🔥 แค่ 5 นาที เปลี่ยนมุมมองได้เลย

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, และตั้งค่าเครื่องมือให้ถูกต้อง

ทำงานอย่างไร (ภาพรวม)

  1. Static analysis ของ ESM: ตัวบันเดิลอ่าน import/export แบบสแตติก รู้ตั้งแต่ build-time ว่าอะไรถูกใช้
  2. Mark as unused: export ที่ไม่ถูกอ้างอิงจะถูกทำเครื่องหมายเป็น “ไม่ได้ใช้”
  3. 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 แบบเฉพาะเจาะจง หลีกเลี่ยงการรวมหยาบ ๆ
แชร์

Recent Blog

5 ขั้นตอนสร้างเว็บไซต์ E-Commerce ที่ทำให้ยอดขายพุ่งสูงทันที

เคยรู้สึกว่าเว็บไซต์ของคุณไม่ดึงดูดลูกค้าไหม? มาดู 5 ขั้นตอนง่ายๆ ที่จะช่วยแก้ปัญหานี้และทำให้ยอดขายพุ่งสูงขึ้น! อ่านต่อ...

เคล็ดลับการออกแบบเว็บไซต์ด้วย Webflow: เพิ่มความเร็วและประสิทธิภาพทันที
เคล็ดลับการออกแบบเว็บไซต์ด้วย Webflow: เพิ่มความเร็วและประสิทธิภาพทันที

เว็บไซต์ของคุณช้าอยู่หรือเปล่า? หากใช่ นี่คือปัญหาที่คุณต้องแก้ไขเพื่อให้ลูกค้าไม่ออกจากเว็บไซต์ อ่านต่อเพื่อค้นพบเคล็ดลับการออกแบบที่ช่วยเพิ่มความเร็ว!

5 เหตุผลที่เว็บไซต์ของคุณควรปรับปรุงเพื่อเพิ่มผลลัพธ์ทันที
5 เหตุผลที่เว็บไซต์ของคุณควรปรับปรุงเพื่อเพิ่มผลลัพธ์ทันที

เคยรู้สึกว่าเว็บไซต์ของคุณไม่ดึงดูดลูกค้าไหม? บทความนี้จะช่วยคุณหาวิธีปรับปรุงและทำให้ลูกค้าอยู่ต่อมากขึ้น อ่านต่อ...