</>
⌕
Senior #bundler#webpack#vite#tree-shaking#code-splitting

Bundler (Webpack/Vite), tree-shaking và code splitting hoạt động thế nào?

⚡ Trả lời nhanh

Bundler gộp module và tối ưu (minify, chia chunk). Tree-shaking loại code export không dùng, dựa vào ES Modules tĩnh và cờ sideEffects. Code splitting chia bundle thành chunk tải khi cần bằng dynamic import(). Vite dev dùng native ESM + esbuild nên khởi động nhanh, build production dùng Rollup.

// Dynamic import: tạo chunk riêng, tải khi cần
button.addEventListener("click", async () => {
  const { renderChart } = await import("./chart.js");
  renderChart();
});
{ "sideEffects": ["*.css"] }
  • Tree-shaking cần ESM (import/export) vì phân tích tĩnh được; CommonJS (require) thì khó loại bỏ.
  • sideEffects: false báo bundler rằng import mà không dùng export có thể bỏ nguyên module.
  • Import cả thư viện (import _ from "lodash") làm phình bundle; dùng bản ESM hoặc import theo hàm (lodash-es).
  • Code splitting theo route (React.lazy, router lazy) và theo vendor/chunk dùng chung; kèm rel="modulepreload"/prefetch để giảm độ trễ.
  • Hash trong tên file ([contenthash]) cho phép cache dài hạn.
WebpackVite
Dev serverBundle trướcNative ESM, transform theo yêu cầu
Prod buildWebpackRollup
Cấu hìnhNhiều, linh hoạtÍt, mặc định tốt
🃏 Ôn bằng flashcard