Release and CI
การกวาดตรวจประสิทธิภาพของรีลีส
หน้านี้บันทึกหลักฐานเบื้องหลังการล้างข้อมูลด้านประสิทธิภาพของ OpenClaw เดือนพฤษภาคม 2026, ขนาดแพ็กเกจ, dependency และ shrinkwrap เป็นคู่มือเชิงเทคนิคประกอบ บทความบล็อกสาธารณะ
มีการรวมการตรวจสอบสองชุดไว้ที่นี่:
- การกวาดตรวจประสิทธิภาพของรีลีส: GitHub Releases ตั้งแต่
v2026.5.28ย้อนกลับไปถึง stablev2026.4.23โดยใช้เวิร์กโฟลว์OpenClaw Performance,profile=smoke, เลน mock-provider แถวของแท็กส่วนใหญ่เป็นตัวอย่างหนึ่งชุด; แถวv2026.5.27และv2026.5.28ใช้อาร์ติแฟกต์ release-branch แบบ repeat-3 ล่าสุด - บริบทช่วงต้นเดือนเมษายน: baseline mock-provider จาก
clawgrit-reportsที่เผยแพร่แล้วตั้งแต่v2026.4.1ถึงv2026.5.2ใช้เฉพาะเพื่อหลีกเลี่ยงการถือว่า รีลีสปลายเดือนเมษายนที่เสียเป็น baseline ประสิทธิภาพสาธารณะ - การกวาดตรวจพื้นที่ติดตั้ง: การติดตั้งใหม่ด้วย
npm install --ignore-scriptsลงในแพ็กเกจชั่วคราว โดยใช้du -sk node_modulesสำหรับขนาด และเดินสำรวจnode_modulesเพื่อนับจำนวนอินสแตนซ์แพ็กเกจ - การกวาดตรวจขนาดแพ็กเกจ npm:
npm pack openclaw@<version> --dry-run --jsonสำหรับรีลีสที่เผยแพร่แล้ว โดยบันทึกขนาด tarball ที่บีบอัดแล้ว, ขนาดเมื่อแตกไฟล์ และ จำนวนไฟล์
ภาพรวม
ความครอบคลุมด้านประสิทธิภาพ: 77 รีลีสที่ขอ, 74 จุดที่มีอาร์ติแฟกต์รองรับ,
และ 3 งาน CI ที่ไม่พร้อมใช้งาน จุดวัด stable ล่าสุด: v2026.5.28
cold turn เร็วขึ้น 5.1 เท่า
v2026.4.14: 9.8 วินาทีv2026.5.28: 1.9 วินาที
tarball 17.9MB
แพ็กเกจ stable ล่าสุด ลดลงจากจุดสูงสุดของขนาดแพ็กเกจเดือนมีนาคมที่ 43.3MB
การติดตั้งใหม่ 361.7MiB
v2026.5.28 ลด dependency tree ของ OpenClaw ที่ซ้อนอยู่ลงอย่างมาก แต่ยังมี
tree ที่ซ้อนอยู่ขนาดเล็กกว่า 259.7MiB เหลืออยู่ในการตรวจสอบการติดตั้งภายในเครื่อง
แพ็กเกจที่ติดตั้ง 300 รายการ
รีลีส stable ล่าสุด วัดเป็น root ของชื่อ/เวอร์ชันแพ็กเกจที่ไม่ซ้ำกันในการติดตั้งใหม่ โดยปิดใช้งานสคริปต์
ไทม์ไลน์พื้นที่ติดตั้ง
dependency 645 รายการ
2026.2.26 เป็นจุดสูงสุดของจำนวน dependency รายเดือนในตัวอย่างนี้
การติดตั้ง 1,020.6MB
2026.5.22 เพิ่ม shrinkwrap ที่ root และเผยให้เห็นปัญหารูปร่างแพ็กเกจ:
มี 911.8MB ไปอยู่ใต้ openclaw/node_modules ที่ซ้อนอยู่
การติดตั้ง 361.7MiB
2026.5.28 ลดขนาดการติดตั้งใหม่ลง 52.8% จาก 2026.5.27 แต่ยังคง
ติดตั้ง tree ของ OpenClaw ที่ซ้อนอยู่ขนาด 259.7MiB
root แพ็กเกจ 300 รายการ
2026.5.28 ติดตั้ง root ของชื่อ/เวอร์ชันแพ็กเกจที่ไม่ซ้ำกันน้อยกว่า
2026.5.27 อยู่ 71 รายการ
สิ่งที่เปลี่ยนใน 5.28
การเก็บกวาดระหว่าง v2026.5.27 และ v2026.5.28 ลดกราฟการติดตั้งค่าเริ่มต้น
แทนที่จะลบความสามารถต่างๆ ออกไปเอง
รากชื่อแพ็กเกจ/เวอร์ชันที่ไม่ซ้ำลดจาก 371 เหลือ 300 อินสแตนซ์ของแพ็กเกจ ลดจาก 372 เหลือ 301
openclaw/node_modules ที่ซ้อนอยู่ลดจาก 656.1MiB เหลือ 259.7MiB ใน
การตรวจสอบการติดตั้งภายในเครื่องเดียวกัน
กรวยแพ็กเกจ native สำหรับทุกแพลตฟอร์มของ @napi-rs/canvas หยุดถูกติดตั้งใน
การติดตั้งค่าเริ่มต้น
แพ็กเกจค่าเริ่มต้นที่น้อยลงหมายถึง tarball, ผู้ดูแล, ไบนารี native, พฤติกรรมระหว่างติดตั้ง และเส้นทางอัปเดตแบบ transitive ที่ต้องเชื่อถือโดยค่าเริ่มต้นน้อยลง
ตัวเลขสำคัญ
อย่าใช้แถวที่เสียในช่วงปลายเดือนเมษายนเป็น baseline ประสิทธิภาพสาธารณะ
v2026.4.23 และ v2026.4.29 เป็นหลักฐาน regression ที่มีประโยชน์ แต่ส่วนต่างขนาดใหญ่แบบ
14x ส่วนใหญ่อธิบายการฟื้นตัวจากสาย release ที่ไม่ดี
สำหรับ narrative ในบล็อก ให้ใช้ baseline ที่เผยแพร่ก่อนหน้าในเดือนเมษายนเป็นสเกล:
| เมตริก | baseline ต้นเดือนเมษายน | v2026.5.28 |
ส่วนต่าง |
|---|---|---|---|
| เทิร์นเอเจนต์แบบ cold | 9,819ms | 1,908ms | ต่ำลง 80.6%, เร็วขึ้น 5.1x |
| เทิร์นเอเจนต์แบบ warm | 7,458ms | 1,870ms | ต่ำลง 74.9%, เร็วขึ้น 4.0x |
| RSS สูงสุดของเอเจนต์ | 686.2MB | 581.0MB | ต่ำลง 15.3% |
baseline ต้นเดือนเมษายนคือ v2026.4.14 จากการรัน mock-provider ของ
clawgrit-reports ที่เผยแพร่แล้ว การรันนั้นใช้ repeat 3 และล้มเหลวเฉพาะเพราะ
ไม่ได้ปล่อย diagnostic timeline ออกมา ค่ามัธยฐานของ cold, warm และ RSS
ยังมีประโยชน์ในฐานะสเกลคร่าวๆ ให้ถือสิ่งนี้เป็นบริบท narrative ไม่ใช่
สถิติสำหรับ release gate
ภายใน sweep เดือนพฤษภาคม แถว release branch ล่าสุดขยับอย่างมีนัยสำคัญจาก
v2026.5.2:
| เมตริก | v2026.5.2 |
v2026.5.28 |
ส่วนต่าง |
|---|---|---|---|
| เทิร์นเอเจนต์แบบ cold | 3,897ms | 1,908ms | ต่ำลง 51.0% |
| เทิร์นเอเจนต์แบบ warm | 3,610ms | 1,870ms | ต่ำลง 48.2% |
| RSS สูงสุดของเอเจนต์ | 613.7MB | 581.0MB | ต่ำลง 5.3% |
เทียบกับ stable release ก่อนหน้า:
| เมตริก | v2026.5.27 |
v2026.5.28 |
ส่วนต่าง |
|---|---|---|---|
| เทิร์นเอเจนต์แบบ cold | 2,231ms | 1,908ms | ต่ำลง 14.5% |
| เทิร์นเอเจนต์แบบ warm | 2,226ms | 1,870ms | ต่ำลง 16.0% |
| RSS สูงสุดของเอเจนต์ | 649.0MB | 581.0MB | ต่ำลง 10.5% |
ขนาดพื้นที่ติดตั้ง
| เมตริก | Baseline | v2026.5.28 |
ส่วนต่าง |
|---|---|---|---|
ขนาดติดตั้งจากจุดสูงสุด 2026.5.22 |
1,020.6MB | 361.7MiB | ต่ำลง 64.6% |
ขนาดติดตั้งจาก release ล่าสุด 2026.5.27 |
767.1MiB | 361.7MiB | ต่ำลง 52.8% |
dependencies จากค่าสูงสุดรายเดือน 2026.2.26 |
645 | 300 | ต่ำลง 53.5% |
dependencies จาก release ล่าสุด 2026.5.27 |
371 | 300 | ต่ำลง 19.1% |
openclaw/node_modules ที่ซ้อนอยู่จาก 2026.5.22 |
911.8MB | 259.7MiB | ต่ำลง 71.5% |
openclaw/node_modules ที่ซ้อนอยู่จาก 2026.5.27 |
656.1MiB | 259.7MiB | ต่ำลง 60.4% |
ขนาดแพ็กเกจ npm
| เวอร์ชัน | tarball ที่บีบอัด | แพ็กเกจที่แตกไฟล์แล้ว | ไฟล์ | หมายเหตุ |
|---|---|---|---|---|
2026.1.30 |
12.8MB | 33.5MB | 4,607 | แพ็กเกจช่วงแรกหลังรีแบรนด์ |
2026.2.26 |
23.6MB | 82.9MB | 10,125 | การเติบโตของฟีเจอร์ |
2026.3.31 |
43.3MB | 182.6MB | 21,037 | จุดสูงสุดของขนาดแพ็กเกจ |
2026.4.29 |
22.9MB | 74.6MB | 9,309 | เห็นการตัดทอนแพ็กเกจชัดเจน |
2026.5.12 |
23.4MB | 80.1MB | 12,035 | การแยก Plugin ภายนอกครั้งใหญ่ |
2026.5.22 |
17.2MB | 76.9MB | 12,386 | ตัด docs/assets ออกจากแพ็กเกจ |
2026.5.27 |
17.8MB | 79.0MB | 12,509 | แพ็กเกจ stable ก่อนหน้า |
2026.5.28 |
17.9MB | 81.0MB | 9,082 | แพ็กเกจ stable ล่าสุด |
2026.5.12 คือหมุดหมายการแยก Plugin ที่เห็นได้ใน changelog:
Amazon Bedrock, Bedrock Mantle, Slack, OpenShell sandbox, Anthropic Vertex,
Matrix และ WhatsApp ถูกย้ายออกจากเส้นทาง dependency หลัก เพื่อให้กรวย dependency
ของสิ่งเหล่านั้นติดตั้งพร้อมกับ Plugin เหล่านั้น แทนที่จะติดตั้งกับทุกการติดตั้ง core
สรุปเทิร์นเอเจนต์ Kova
สาย stable เดือนเมษายนมีเรื่องราวสองแบบที่ต่างกัน ช่วงต้นเมษายนช้าแต่ยังพอจำแนกได้
ช่วงปลายเมษายนกลายเป็นหน้าผา regression v2026.5.2 คือจุดที่ lane ของ
mock-provider ลดลงเข้าสู่ช่วง 3-5 วินาทีเป็นครั้งแรก และเริ่มผ่านอย่างสม่ำเสมอ
ใน sweep ที่ให้มา
บริบทที่เผยแพร่ก่อนหน้า:
| Release | Kova | เทิร์น cold | เทิร์น warm | RSS สูงสุดของเอเจนต์ |
|---|---|---|---|---|
v2026.4.10 |
ไม่ผ่าน | 11,031ms | 7,962ms | 679.0MB |
v2026.4.12 |
ไม่ผ่าน | 11,965ms | 8,289ms | 713.5MB |
v2026.4.14 |
ไม่ผ่าน | 9,819ms | 7,458ms | 686.2MB |
v2026.4.20 |
ไม่ผ่าน | 22,314ms | 18,811ms | 810.8MB |
v2026.4.22 |
ไม่ผ่าน | 9,630ms | 7,459ms | 743.0MB |
sweep ที่ให้มา:
| Release | Kova | เทิร์น cold | เทิร์น warm | RSS สูงสุดของเอเจนต์ |
|---|---|---|---|---|
v2026.4.23 |
ไม่ผ่าน | 47,847ms | 8,010ms | 1,082.7MB |
v2026.4.24 |
ไม่ผ่าน | 48,264ms | 25,483ms | 996.0MB |
v2026.4.25 |
ไม่ผ่าน | 81,080ms | 59,172ms | 1,113.9MB |
v2026.4.26 |
ไม่ผ่าน | 76,771ms | 54,941ms | 1,140.8MB |
v2026.4.27 |
ไม่ผ่าน | 60,902ms | 33,699ms | 1,156.0MB |
v2026.4.29 |
ไม่ผ่าน | 94,031ms | 57,334ms | 3,613.7MB |
v2026.5.2 |
ผ่าน | 3,897ms | 3,610ms | 613.7MB |
v2026.5.7 |
ผ่าน | 3,923ms | 3,693ms | 654.1MB |
v2026.5.12 |
ผ่าน | 7,248ms | 6,629ms | 834.8MB |
v2026.5.18 |
ผ่าน | 3,301ms | 2,913ms | 630.3MB |
v2026.5.20 |
ผ่าน | 3,413ms | 2,952ms | 643.2MB |
v2026.5.22 |
ผ่าน | 4,494ms | 4,093ms | 654.3MB |
v2026.5.26 |
ผ่าน | 2,626ms | 2,282ms | 660.4MB |
v2026.5.27-beta.1 |
ผ่าน | 2,575ms | 2,217ms | 635.3MB |
v2026.5.27 |
ผ่าน | 2,231ms | 2,226ms | 649.0MB |
v2026.5.28 |
ผ่าน | 1,908ms | 1,870ms | 581.0MB |
source probe
source probe ถูกข้ามสำหรับ ref เก่าที่สำเร็จ 17 รายการ เพราะ source tree เหล่านั้น ยังไม่มี entry point ของ probe ที่จำเป็น เมตริกเทิร์นเอเจนต์ยังคงมีอยู่สำหรับ ref เหล่านั้น
จุด source-probe ที่เป็นตัวแทน:
| Release | Default readyz p50 |
50 Plugin readyz p50 |
CLI health p50 | RSS สูงสุดของ Plugin |
|---|---|---|---|---|
v2026.4.29 |
2,819ms | 2,618ms | 1,679ms | 389.0MB |
v2026.5.2 |
2,324ms | 2,013ms | 1,384ms | 377.2MB |
v2026.5.7 |
1,649ms | 1,540ms | 1,175ms | 387.6MB |
v2026.5.18 |
1,942ms | 1,927ms | 607ms | 426.5MB |
v2026.5.20 |
1,966ms | 1,987ms | 621ms | 455.0MB |
v2026.5.22 |
2,081ms | 1,884ms | 5,095ms | 444.2MB |
v2026.5.26 |
1,546ms | 1,634ms | 656ms | 400.4MB |
v2026.5.27-beta.1 |
1,462ms | 1,548ms | 548ms | 394.0MB |
v2026.5.27 |
1,491ms | 1,571ms | 553ms | 401.5MB |
v2026.5.28 |
1,457ms | 1,474ms | 623ms | 386.1MB |
ค่า spike ด้านสุขภาพของ CLI ใน v2026.5.22 มองเห็นได้ในตารางนี้ แม้ว่า lane
agent-turn จะยังผ่านอยู่ก็ตาม ให้เก็บ source probes ไว้เมื่อสืบสวน
regression เฉพาะจุดของ CLI หรือ gateway
การตรวจสอบ install footprint
ตัวอย่าง dependency ใช้ stable release หนึ่งรายการต่อเดือน รวมถึงเหตุการณ์
เริ่มนำ shrinkwrap มาใช้ใน 2026.5.22 และ release ล่าสุด 2026.5.28
| จุด | dependency ที่ติดตั้ง | fresh install | แพ็กเกจ OpenClaw | openclaw/node_modules แบบซ้อน |
shrinkwrap ระดับรูท | พฤติกรรมการติดตั้ง Canvas |
|---|---|---|---|---|---|---|
ม.ค. 2026.1.30 |
605 | 438.4MB | 45.8MB | 2.4MB | ไม่ใช่ | wrapper ระดับบนสุด + darwin-arm64 |
ก.พ. 2026.2.26 |
645 | 575.7MB | 110.1MB | 3.5MB | ไม่ใช่ | wrapper ระดับบนสุด + darwin-arm64 |
มี.ค. 2026.3.31 |
438 | 584.1MB | 234.8MB | 0MB | ไม่ใช่ | wrapper ระดับบนสุด + darwin-arm64 |
เม.ย. 2026.4.29 |
392 | 335.0MB | 97.4MB | 0MB | ไม่ใช่ | ไม่ได้ติดตั้งอะไร |
2026.5.22 |
401 | 1,020.6MB | 1,020.4MB | 911.8MB | ใช่ | แบบซ้อน: แพ็กเกจ @napi-rs/canvas ทั้ง 12 รายการ |
พ.ค. 2026.5.26 |
371 | 767.5MB | 767.4MB | 656.4MB | ใช่ | แบบซ้อน: แพ็กเกจ @napi-rs/canvas ทั้ง 12 รายการ |
2026.5.27 |
371 | 767.1MiB | 766.9MiB | 656.1MiB | ใช่ | แบบซ้อน: แพ็กเกจ @napi-rs/canvas ทั้ง 12 รายการ |
ล่าสุด 2026.5.28 |
300 | 361.7MiB | 361.6MiB | 259.7MiB | ใช่ | ไม่ได้ติดตั้งอะไร |
ขอบเขตของ shrinkwrap
2026.5.20 ไม่มี shrinkwrap ระดับรูท และไม่มี dependency tree ของ OpenClaw
แบบซ้อนขนาดใหญ่
2026.5.22 เพิ่ม shrinkwrap ระดับรูท และติดตั้ง 911.8MB ภายใต้
openclaw/node_modules แบบซ้อน
2026.5.28 ยังคงมี shrinkwrap และยังติดตั้ง 259.7MiB ภายใต้
openclaw/node_modules แบบซ้อน
2026.5.28 ไม่ติดตั้งแพ็กเกจ @napi-rs/canvas ใด ๆ อีกแล้วในการตรวจสอบ
fresh install ในเครื่อง
การตรวจสอบ tarball ที่เผยแพร่ยืนยันขอบเขตดังกล่าว:
| เวอร์ชัน | เผยแพร่เป็น stable? | npm-shrinkwrap.json ระดับรูท |
หมายเหตุ |
|---|---|---|---|
2026.5.20 |
ใช่ | ไม่ใช่ | stable release สุดท้ายก่อนมี shrinkwrap |
2026.5.21 |
ไม่ใช่ | n/a | ไม่มี stable npm release |
2026.5.22 |
ใช่ | ใช่ | เริ่มนำ shrinkwrap มาใช้ |
2026.5.23 |
ไม่ใช่ | n/a | ไม่มี stable npm release |
2026.5.24 |
ไม่ใช่ | n/a | ไม่มี stable npm release |
2026.5.25 |
ไม่ใช่ | n/a | ไม่มี stable npm release |
2026.5.26 |
ใช่ | ใช่ | dependency tree แบบซ้อนยังคงมีอยู่ |
2026.5.27 |
ใช่ | ใช่ | dependency tree แบบซ้อนยังคงมีอยู่ |
2026.5.28 |
ใช่ | ใช่ | dependency tree แบบซ้อนเล็กลงมาก |
ความแตกต่างสำคัญคือ: ตัว shrinkwrap เองไม่ใช่ปัญหา
v2026.5.28 ยังคงส่งมาพร้อม shrinkwrap ระดับรูท ปัญหาคือรูปทรงของแพ็กเกจ
ที่ทำให้ npm materialize dependency tree ของ OpenClaw แบบซ้อนขนาดใหญ่ และแพ็กเกจ
แพลตฟอร์ม @napi-rs/canvas ทั้ง 12 รายการ tree แบบซ้อนเล็กลงใน v2026.5.28
และ fanout ของแพลตฟอร์ม canvas ไม่ปรากฏในการตรวจสอบในเครื่องอีกต่อไป
สำหรับคำอธิบาย shrinkwrap แบบภาษาทั่วไปและการตรวจสอบแพ็กเกจระดับ maintainer ดู npm shrinkwrap
การตีความด้าน supply-chain
จำนวน dependency เป็น metric ด้านความปลอดภัยเชิงปฏิบัติการ ไม่ใช่แค่ metric ด้านขนาดการติดตั้งเท่านั้น ทุกแพ็กเกจขยายชุดของ maintainer, tarball, transitive update, optional native binary และพฤติกรรมระหว่างการติดตั้งที่ operator ต้องไว้วางใจ
ทิศทางการ cleanup คือ:
- เก็บ capability ที่หนักและเป็น optional ไว้นอกการติดตั้ง core เริ่มต้น
- ให้แพ็กเกจ Plugin เป็นเจ้าของ runtime dependency graph ของตัวเอง
- หลีกเลี่ยงการซ่อมแซม package-manager ระหว่างการเริ่มต้น Gateway
- รักษาการติดตั้งแบบ deterministic โดยไม่ทำให้เกิดการ materialize แพ็กเกจ native ทุกแพลตฟอร์ม
- ปิดใช้งาน install script ในเส้นทาง package acceptance และ measurement
- ตรวจจับ dependency tree แบบซ้อนและการเพิ่มขึ้นอย่างมากของ native optional dependency ก่อนเผยแพร่
เอกสารที่เกี่ยวข้อง: