🔥 แค่ 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

ทำไมการเลือก Webflow Design Development ถึงสำคัญต่อการใช้งานง่าย?
ทำไมการเลือก Webflow Design Development ถึงสำคัญต่อการใช้งานง่าย?

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

6 วิธีเพิ่มยอดขาย E-Commerce ที่ใช้งานได้จริงในปี 2025
6 วิธีเพิ่มยอดขาย E-Commerce ที่ใช้งานได้จริงในปี 2025

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

5 ขั้นตอนปรับปรุงเว็บไซต์ SME เพื่อเพิ่ม Conversion ทันที
5 ขั้นตอนปรับปรุงเว็บไซต์ SME เพื่อเพิ่ม Conversion ทันที

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