Tree Shaking คืออะไร? และทำไมมันสำคัญต่อ Performance ของเว็บคุณ

Tree Shaking คือกระบวนการลบโค้ดที่ไม่ถูกใช้งานออกจากบันเดิล โดยพึ่งพา ES Modules ที่มีโครงสร้างสแตติก (import/export) เพื่อพิสูจน์การอ้างอิง ฟีเจอร์นี้มีใน Webpack, Rollup, esbuild และ Vite ช่วยลดขนาด JavaScript ส่งผลดีต่อความเร็วและ Core Web Vitals.
Tree Shaking ใน JavaScript คืออะไร? ใช้อย่างไรให้ได้ผลจริง
สรุปเร็ว หลักการคือ “นำเฉพาะสิ่งที่ใช้จริง” จากโมดูล ESM มาใส่บันเดิล และปล่อยให้มินิไฟเออร์กำจัดซากโค้ดที่เหลือ (dead code elimination) ขั้นสำคัญคือใช้ ES Modules, หลีกเลี่ยง side effects, และตั้งค่าเครื่องมือให้ถูกต้อง
ทำงานอย่างไร (ภาพรวม)
- Static analysis ของ ESM: ตัวบันเดิลอ่าน
import/export
แบบสแตติก รู้ตั้งแต่ build-time ว่าอะไรถูกใช้ - Mark as unused: export ที่ไม่ถูกอ้างอิงจะถูกทำเครื่องหมายเป็น “ไม่ได้ใช้”
- Minifier ตัดทิ้ง: ขั้น minify (เช่น Terser/ESBuild) จะลบโค้ดที่ไม่จำเป็น
โค้ดตัวอย่างพื้นฐาน
// utils.js (ESM)
export function sum(a, b){ return a + b }
export function mul(a, b){ return a * b } // ไม่ถูกใช้
// app.js
import { sum } from './utils.js'
console.log(sum(2,3))
// ผลที่คาดหวัง: mul จะถูกสั่น (ทิ้ง) ออก ถ้าตั้งค่าถูกต้อง
ตาราง: เครื่องมือยอดนิยมและหมายเหตุการตั้งค่า
เครื่องมือ | สถานะ Tree Shaking | ต้องการอะไรเป็นพิเศษ | หมายเหตุ |
---|---|---|---|
Webpack | รองรับ | mode: "production" , ใช้ ESM, sideEffects |
เปิด usedExports อัตโนมัติในโหมดโปรดักชัน |
Rollup | รองรับ (ค่าเริ่มต้น) | ESM, หลีกเลี่ยง side effects | เน้น ESM-first ออกแบบมาดีเรื่อง treeshake |
esbuild | รองรับ | format=esm หรืออินพุต ESM |
เร็วมาก ใช้ภายใน Vite |
Vite | รองรับ | ESM, โปรดักชันใช้ Rollup ใต้ฝากระโปรง | พึ่ง Rollup treeshake ตอน build |
package.json: sideEffects
{
"name": "my-app",
"type": "module",
"sideEffects": false,
// ถ้ามีไฟล์ที่มีเอฟเฟกต์จริง (เช่น ใส่ global CSS) ระบุยกเว้น:
// "sideEffects": ["*.css", "src/polyfills/**"]
}
จุดที่ทำให้ “สั่นไม่ออก” (และวิธีแก้)
อาการ | สาเหตุ | วิธีแก้ |
---|---|---|
ขนาดไม่ลด แม้ import เฉพาะฟังก์ชัน | ใช้ CommonJS (require ) หรือ dynamic require |
ย้ายเป็น ESM (import/export ) ให้มากที่สุด |
ทิ้งโค้ดไม่ได้เพราะ side effects | โมดูลรันโค้ดระดับท็อป (เช่น แก้ global, สมัคร event) | ย้ายเอฟเฟกต์เข้า function/init, ตั้ง sideEffects ให้ถูก |
“barrel file” รวม export ทั้งหมด | รูปแบบ export * from "./*" ทำให้วิเคราะห์ยาก |
export แบบเฉพาะเจาะจง หลีกเลี่ยงการรวมหยาบ ๆ |
โค้ดที่เป็นผลลัพธ์การเรียกฟังก์ชันทิ้งไม่ออก | มินิฟายเออร์ไม่มั่นใจว่า “pure” | ใส่คอมเมนต์ /*#__PURE__*/ หน้าการเรียกที่ปลอดภัย |
ตัวอย่างตั้งค่าอย่างย่อ
Webpack
// webpack.config.js
module.exports = {
mode: "production",
optimization: {
usedExports: true,
concatenateModules: true
}
};
ESBuild (CLI)
esbuild src/app.js --bundle --format=esm --minify --outfile=dist/app.js
Vite
// vite.config.js (ค่าเริ่มต้นก็ดีอยู่แล้ว)
export default {
build: {
target: "es2019", // ให้มินิฟายเออร์ทำงานเต็มที่
rollupOptions: { /* ปรับเมื่อจำเป็น */ }
}
}
เช็กลิสต์ “ทำแล้วได้ผลจริง”
- ใช้ ESM เป็นหลัก (
import/export
) และเลี่ยงrequire()
- ตั้ง
sideEffects
ในpackage.json
ให้ถูกต้องและใส่ไวท์ลิสต์ไฟล์ที่มีเอฟเฟกต์จริง - หลีกเลี่ยง
export *
แบบครอบจักรวาล ใช้การ export แบบเจาะจง - เปิดโหมดโปรดักชัน/มินิฟาย และใช้คอมเมนต์
/*#__PURE__*/
เมื่อเหมาะสม - วัดผลด้วย bundle analyzer และตรวจขนาดไฟล์ก่อน–หลัง
บริการที่เกี่ยวข้อง (Internal Links)
อ่านต่อ (บทความที่เกี่ยวข้อง)
อ้างอิงภายนอก (เอกสารทางการ/มาตรฐาน)
- MDN — ECMAScript modules: developer.mozilla.org
- Webpack — Tree Shaking Guide: webpack.js.org
- Rollup — Tree-shaking: rollupjs.org
- esbuild — Tree Shaking: esbuild.github.io
- Vite — Build & Rollup notes: vitejs.dev
- Google web.dev — Reduce JavaScript payloads: web.dev
- Terser — Compress options (pure funcs/side_effects): terser.org
เกี่ยวกับผู้เขียน
Vision X Brain ทีม Website/SEO/CRO & Web Performance เราช่วยจัดระเบียบโค้ด เร่งความเร็ว และลด JS payload ให้ผ่าน Core Web Vitals อย่างยั่งยืน สนใจเริ่มจาก Audit 14 วัน ดู บริการ Website Renovation
อัปเดตล่าสุด: 21 Aug 2025
ก่อนปรับ UX คนเข้าเว็บแล้วออกเลยค่ะ แต่พอรีดีไซน์ใหม่ กลายเป็นจุดที่ปิดการขายได้ดีที่สุดแทน!

หลังรีแบรนด์กับ Vision X Brain ยอดขายพุ่ง x3 ภายใน 2 เดือน!

เปลี่ยนเว็บกับ Vision X Brain แค่ไม่กี่วัน ลูกค้าใหม่เริ่มเข้าใจธุรกิจเราทันที

หลังรีดีไซน์กับ Vision X Brain ลูกค้าระดับองค์กรเริ่มเข้ามาจองงานผ่านเว็บไซต์เอง — ไม่ต้องพึ่งคอนเนคชั่นเหมือนก่อน

หลังจากเปลี่ยนเว็บไซต์กับ Vision X Brain ผู้ใช้งานกล้ากดทดลองระบบตั้งแต่หน้าแรก — ไม่ต้องตาม โทร หรืออธิบายซ้ำอีก

Recent Blog

ค้นพบข้อดีของ responsive web design พร้อมเคล็ดลับเพิ่มยอดขายและสร้างประสบการณ์เว็บที่ดีกับลูกค้า เหมาะสำหรับธุรกิจออนไลน์ยุคใหม่ปี 2025

ค้นพบข้อดีของ responsive web design พร้อมเคล็ดลับเพิ่มยอดขายและสร้างประสบการณ์เว็บที่ดีกับลูกค้า เหมาะสำหรับธุรกิจออนไลน์ยุคใหม่ปี 2025
