Chuyển đến nội dung

Nén JavaScript

Cùng loại công cụ nén mà các công cụ build sử dụng, chạy ngay trong trang này. Hiểu được cú pháp hiện đại và module, và mã nguồn của bạn không bao giờ bị lưu trữ.

  • Không bao giờ lưu trữ
  • Không xếp hàng, không phải chờ
  • Không cần đăng ký, không watermark
Đã nén

JavaScript đã nén sẽ hiện ở đây.

Cách hoạt động

1

Dán mã JavaScript

Hoặc thả file vào. Module, class và cú pháp hiện đại đều được hỗ trợ.

2

Chọn tùy chọn

Đổi tên biến cục bộ, bỏ lệnh console, giữ chú thích giấy phép — mỗi tùy chọn là một công tắc.

3

Sao chép hoặc tải xuống

Kèm dung lượng trước và sau.

Đổi tên, xóa bỏ, và những gì tuyệt đối không được đụng vào

Có ba việc diễn ra, theo thứ tự tăng dần về mức tiết kiệm và cái giá bạn phải trả. Khoảng trắng và chú thích bị xóa, việc này chẳng tốn gì. Mã chết bị xóa — một nhánh không bao giờ chạy, một biến được gán mà không bao giờ được đọc. Và tên cục bộ được rút ngắn, nên một cái tên được đặt cẩn thận như calculateMonthlyTotal trở thành một chữ cái. Việc cuối cùng này mang lại phần lớn dung lượng tiết kiệm, và cũng là thứ khiến kết quả khó đọc — không sao khi phát hành nhưng vô dụng khi gỡ lỗi.

Những gì không thể đổi tên là bất cứ thứ gì bên ngoài tham chiếu đến bằng tên, và làm sai điều này là cách các công cụ nén làm hỏng mã. Hàm được export, thuộc tính đối tượng được truy cập bằng chuỗi, mọi thứ truy cập qua window, và tên dùng trong eval đều phải được giữ nguyên, vì có thứ gì đó ở nơi khác đang tìm chúng theo đúng cái tên bạn đã viết. Thuộc tính nói riêng được mặc định để nguyên: đổi tên user.emailAddress sẽ gây lỗi ngay khi đối tượng đó được chuyển thành JSON hoặc được đọc bởi đoạn mã được nén riêng.

Hãy giữ source map hoặc bản gốc. Khi tên đã mất, một stack trace từ người dùng thực tế sẽ chỉ báo lỗi ở hàm t tại ký tự 48.213, và điều đó chẳng cho bạn biết gì cả. Source map khôi phục tên gốc và số dòng trong trình gỡ lỗi lẫn trong báo cáo lỗi, và tạo nó không tốn gì vì nó đi kèm dưới dạng một file riêng, chỉ tải khi có người mở công cụ dành cho nhà phát triển.

Chú thích giấy phép mặc định được giữ lại, và đó là một lập trường pháp lý chứ không phải sở thích. Rất nhiều mã nguồn mở được cấp phép thoáng với một điều kiện duy nhất là thông báo bản quyền phải đi kèm với nó — MIT và BSD đều nói rõ như vậy. Xóa những chú thích đó khỏi một bundle chứa mã của bên thứ ba là vi phạm chính giấy phép đã cho phép bạn dùng nó. Chúng chỉ tốn vài trăm byte.

Khi bạn cần công cụ khác

Việc này nên nằm trong bước build thay vì trong một tab trình duyệt, và các bundler hiện đại đều làm sẵn. esbuild --minify cùng Rollup hoặc Vite nén khi build, tự động tạo source map, và — quan trọng hơn nhiều — thực hiện tree shaking, loại bỏ những export của các thư viện phụ thuộc mà bạn không bao giờ import. Trên một ứng dụng thực tế, điều đó tiết kiệm nhiều hơn hẳn so với việc nén một file đã hoàn chỉnh.

Trước khi tối ưu, hãy đo đạc. Một công cụ phân tích bundle thường sẽ cho thấy một thư viện lớn chiếm phần lớn file — một thư viện ngày tháng, một bộ icon, một gói vẽ biểu đồ được kéo vào toàn bộ chỉ để vẽ một biểu đồ. Thay thế hoặc tải trễ thư viện đó hiệu quả hơn mọi mức nén, và code splitting để mỗi trang chỉ tải những gì nó cần còn hiệu quả hơn cả hai.

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

Mã của tôi có bị lưu ở đâu không?

Không, và với mã nguồn thì đó chính là điều cốt yếu. Không lưu trữ gì cả và không máy chủ nào nhìn thấy nó. Dán mã nguồn độc quyền vào một công cụ nén online có gửi nó đi đâu đó chính là làm lộ mã, bất kể trang đó nói gì về việc lưu giữ — và đó đúng là loại việc người ta làm vội vàng mà không suy nghĩ.

Công cụ này có giống công cụ nén trong bước build của tôi không?

Gần như chắc chắn là có. Đây là cùng loại công cụ nén mà webpack, Rollup, Vite và hầu hết các bundler khác sử dụng. Khác biệt duy nhất là nó chạy ở đây, thay vì là thứ bạn phải cài đặt.

Nó có làm thay đổi cách mã của tôi hoạt động không?

Không nên có, và điều đó được kiểm tra chứ không phải giả định: các bài kiểm tra của chúng tôi nén một module, import cả bản gốc lẫn bản đã nén, chạy chúng và so sánh kết quả. Những gì CÓ thay đổi: tên biến cục bộ (trừ khi bạn tắt tùy chọn đó), các biểu thức hằng có thể tính trước, và mã chết. Bất cứ thứ gì phụ thuộc vào tên hàm lúc chạy, hoặc vào Function.prototype.toString, có thể bị hỏng khi đổi tên — hãy tắt đổi tên nếu bạn dựa vào một trong hai.

“Phân tích dạng module” nghĩa là gì?

Là việc mã của bạn được phân tích như một ES module hay như một script thông thường. Module có thể dùng import và export và luôn ở chế độ strict. Tùy chọn này mặc định bật vì phần lớn mã hiện đại là như vậy; nếu file của bạn là script kiểu cũ dùng "with" hoặc dựa vào hành vi non-strict, hãy tắt nó đi.

Tôi có nên bỏ lệnh console không?

Với production, thường là nên — chúng chỉ là nhiễu, và có thể làm lộ chi tiết nội bộ cho bất kỳ ai mở công cụ dành cho nhà phát triển. Tùy chọn này mặc định tắt, vì lặng lẽ xóa mã không phải là việc một công cụ nên làm khi chưa được yêu cầu.

Công cụ có giữ chú thích giấy phép không?

Có, theo mặc định. Chú thích bắt đầu bằng /*! và chú thích chứa @license hoặc @preserve được giữ lại, vì xóa chúng khỏi thư viện cấp phép MIT của người khác là vi phạm giấy phép. Chú thích thông thường bị xóa.

Công cụ có tạo được source map không?

Không phải trên trang này. Source map chỉ hữu ích khi nằm cạnh file gốc tại một URL xác định, điều không phù hợp với một công cụ dán rồi sao chép — công cụ build của bạn mới là nơi thích hợp cho việc đó.

Có giới hạn dung lượng không?

Không có giới hạn cố định. Vài nghìn dòng được nén trong chưa đến một giây; một file bundle rất lớn sẽ lâu hơn vì toàn bộ file được phân tích trước khi đổi tên bất cứ thứ gì. Nếu bạn nén cả một bundle production, công cụ build của bạn là nơi phù hợp hơn — trang này dành cho một file đơn lẻ hoặc kiểm tra nhanh.

Nên biết: Đổi tên biến cục bộ làm file nhỏ hơn và kết quả khó đọc, điều không sao khi phát hành nhưng vô dụng khi gỡ lỗi — hãy giữ source map hoặc bản gốc. Chú thích giấy phép mặc định được giữ lại, vì xóa chúng có thể vi phạm giấy phép của đoạn mã bạn được phép sử dụng.

Đặt công cụ này lên website của bạn

Miễn phí cho mọi blog, trang lớp học hay bài viết hướng dẫn. Chỉ cần dán một đoạn mã là khách truy cập có thể dùng ngay trên trang của bạn.