Nén gọn HTML, CSS và JavaScript

Nén gọn hoặc làm đẹp HTML, CSS, JS và xem số byte giảm được, cả sau gzip.

Ngôn ngữ

Thao tác

Tên biến không bao giờ bị rút gọn, và các dấu xuống dòng mà cơ chế tự chèn dấu chấm phẩy cần đến đều được giữ lại.

Kích thước
475 B → 355 B (−25.3% giảm)
Sau gzip
…

Công cụ này làm gì

Dán HTML, CSS hoặc JavaScript, hoặc mở tệp, rồi chọn Nén gọn hay Làm đẹp. Ngôn ngữ được nhận diện khi bạn dán hoặc mở tệp, và bạn có thể đổi. Kết quả cho biết kích thước trước và sau, tính bằng byte và sau khi nén gzip, tức là thứ máy chủ thật sự gửi đi. Mọi thứ chạy trong trình duyệt.

Nén gọn làm gì với từng ngôn ngữ

  • JavaScript. Bỏ chú thích và khoảng trắng; chú thích giấy phép (/*! … */, @license) có thể giữ lại. Tên biến không bao giờ bị rút gọn. Bộ tách từ hiểu chuỗi, template literal có ${…} lồng nhau, biểu thức chính quy (phân biệt a / b / c với /re/g), và giữ những khoảng trắng quan trọng: a + +b thành a+ +b chứ không phải a++b. Các dấu xuống dòng mà cơ chế tự chèn dấu chấm phẩy cần đến (sau return, trước ++) được giữ, nên mã viết không có dấu chấm phẩy vẫn chạy đúng.
  • CSS. Bỏ chú thích, khoảng trắng và dấu chấm phẩy cuối khối, ngoài ra không đổi gì. Khoảng trắng quanh +, - trong calc() được giữ, khoảng trắng trước dấu hai chấm trong bộ chọn (a :hover khác a:hover) cũng vậy. Chuỗi và url(…) được chép nguyên.
  • HTML. Bỏ chú thích (trừ chú thích điều kiện), gộp khoảng trắng trong văn bản thành một dấu cách, bỏ khoảng trắng cạnh phần tử khối như div, p, li. Giữa các phần tử nội dòng luôn còn một dấu cách. <pre> và <textarea> được giữ nguyên; <style> và <script> nội tuyến có thể nén theo.

Tiết kiệm được bao nhiêu, nói thật

Khoảng trắng và chú thích chiếm nhiều chỗ trong mã viết tay nhưng nén gzip rất tốt, nên phần giảm sau gzip nhỏ hơn nhiều. Đo bằng công cụ này trên bản development của React 19.2, tệp giảm từ 47.219 xuống 32.393 byte, nhỏ đi một phần ba, nhưng sau gzip chỉ từ 10.755 xuống 9.174 byte, khoảng 15%. Một bộ nén đầy đủ có đổi tên biến (esbuild) đạt 7.340 byte sau gzip. Nếu bạn đã dùng bundler và gzip/Brotli, công cụ này không thay được chúng; nó dành cho một đoạn mã, mẫu email, script nội tuyến hay để xem nhanh. Bài viết nén gọn mã tiết kiệm được gì giải thích quan hệ với gzip và source map.

Giới hạn

Không hỗ trợ JSX, TypeScript và ngôn ngữ mẫu (Handlebars, PHP); ký tự không đọc được, chuỗi, chú thích hay regex chưa đóng đều được báo kèm dòng và cột. Để thử biểu thức chính quy, dùng công cụ kiểm tra regex.

Câu hỏi thường gặp

Nén gọn có làm hỏng JavaScript không?

Có thể, nếu làm ẩu: a + +b thành a++b, bỏ dấu xuống dòng sau return đổi giá trị trả về. Công cụ giữ mọi khoảng trắng và dấu xuống dòng ảnh hưởng tới cách đọc mã, và được kiểm tra bằng cách so cây cú pháp của các thư viện thật trước và sau khi nén.

Vì sao phần giảm sau gzip nhỏ hơn nhiều?

Gzip vốn đã nén khoảng trắng lặp lại và từ thông dụng rất tốt, nên bỏ chúng đi chỉ lấy lại những byte gzip lưu rất rẻ. Tệp viết tay thường giảm 30–40% trước nén nhưng chỉ 10–20% sau gzip.

Có đổi tên biến như Terser hay esbuild không?

Không. Đổi tên tiết kiệm hơn nhưng cần phân tích phạm vi đầy đủ mới an toàn. Với bản build chính thức, hãy dùng bộ nén của bundler.

Mã của tôi có bị tải lên không?

Không. Việc nén, làm đẹp và đo gzip đều chạy trong trình duyệt.