Máy nén JavaScript tốt nhất [đã đóng]


171

Máy nén JavaScript tốt nhất hiện có là gì? Tôi đang tìm kiếm một công cụ:

  • dễ sử dụng
  • có tốc độ nén cao
  • Tạo kết quả cuối cùng đáng tin cậy (không làm rối mã)

14
Có ai biết tình hình năm 2011 không?
Dan

4
Bây giờ là năm 2012 và tôi nghĩ UglifyJS và Clos là người chiến thắng, tôi sử dụng UglifyJS và nó thường đánh bại mọi thứ khác.
mkoistinen

Tôi sử dụng htmlcompressor.com/compressor.html cho ứng dụng nhiều trang jQuery Mobile của mình. Nó nhận một tệp HTML với các thẻ <script> và nén HTML, JavaScript và CSS. Hoạt động như một lá bùa.
Anders

Đó là năm 2017 - Có gì mới nhất bây giờ?
Abhinav Singi

Đó là năm 2020. Với cấu hình "an toàn" mặc định, UglifyJS thắng nhẹ vì nó "an toàn" hơn. Để sử dụng năng lượng tiên tiến, Trình biên dịch đóng cửa cung cấp cho ass của UglifyJS. Trình biên dịch đóng với ADVANCDED_OPTIMIZATION có thể thực hiện tất cả các loại thủ thuật giúp bạn tối ưu hóa quy trình làm việc và mã của mình cùng một lúc. Xem stackoverflow.com/a/50355530/5601591 để biết ví dụ về sự tuyệt vời của Trình biên dịch đóng cửa (TUYÊN BỐ: Tôi không thể tìm thấy một bài đăng blog phù hợp ở nơi khác, vì vậy tôi phải giới thiệu cho bạn một bài đăng tôi đã viết).
Jack Giffin

Câu trả lời:


149

Gần đây tôi đã phát hành UglifyJS , một trình nén JavaScript được viết bằng JavaScript (chạy trên nền tảng NodeJS Node.js , nhưng nó có thể dễ dàng sửa đổi để chạy trên bất kỳ công cụ JavaScript nào, vì nó không cần bất kỳ phần Node.jsbên trong nào ). Nó nhanh hơn nhiều so với cả YUI CompressorGoogle Clos , nó nén tốt hơn YUI trên tất cả các tập lệnh mà tôi đã thử nghiệm và nó an toàn hơn so với Đóng (biết cách xử lý "eval" hoặc "với").

Ngoài việc xóa khoảng trắng, UglifyJS cũng thực hiện như sau:

  • thay đổi tên biến cục bộ (thường là ký tự đơn)
  • tham gia khai báo var liên tiếp
  • tránh chèn bất kỳ dấu ngoặc, parens và dấu chấm phẩy không cần thiết
  • tối ưu hóa IF (loại bỏ "khác" khi phát hiện thấy không cần thiết, chuyển đổi IF thành toán tử &&, || hoặc? /: khi có thể, v.v.).
  • biến foo["bar"]thành foo.barnơi có thể
  • xóa dấu ngoặc kép khỏi các phím trong nghĩa đen đối tượng, nếu có thể
  • giải quyết các biểu thức đơn giản khi điều này dẫn đến mã nhỏ hơn (1 + 3 * 4 ==> 13)

PS: Ồ, nó cũng có thể "làm đẹp". ;-)


17
Chúng tôi sử dụng uglify trong một ứng dụng cấp doanh nghiệp. Đó là một công việc tốt.
gyorgyabraham

Bạn có thể so sánh với jsmin trên nút?
Gringo Suave

gần đây Uglify đã bỏ các lệnh gọi API
Gadelkareem

@mishoo Này, tôi yêu Uglify JS2 của bạn. Mạng của tôi không hoạt động tốt trong những ngày này ... Tôi muốn sử dụng nó trên Windows. Một số giải pháp? : o)
Hydroper

@mishoo Tôi hiển thị liên kết git nhưng không biết cách sử dụng nó
Sachin Sarola

124

Xem lại câu hỏi này một vài năm sau đó, UglifyJS , dường như là lựa chọn tốt nhất cho đến thời điểm hiện tại.

Như đã nêu dưới đây, nó chạy trên nền tảng NodeJS, nhưng có thể dễ dàng sửa đổi để chạy trên bất kỳ công cụ JavaScript nào.

--- Câu trả lời cũ bên dưới ---

Google phát hành Closure Compiler mà dường như được tạo ra các tập tin nhỏ nhất cho đến nay như đã thấy ở đâyở đây

Trước đó, các tùy chọn khác nhau như sau

Về cơ bản Packer thực hiện công việc tốt hơn khi nén ban đầu, nhưng nếu bạn định gzip các tập tin trước khi gửi trên dây (mà bạn nên làm) thì YUI Compressor có kích thước nhỏ nhất.

Các thử nghiệm đã được thực hiện trên mã btw jQuery.

  • Thư viện jQuery gốc 62,885 byte, 19,758 byte sau gzip
  • jQuery rút gọn với JSMin 36.391 byte, 11,541 byte sau gzip
  • jQuery rút gọn với Packer 21.557 byte, 11.119 byte sau gzip
  • jQuery rút gọn với Trình nén YUI 31.822 byte, 10.818 byte sau gzip

@ daniel james đề cập đến trong chương trình nén bình luận cho thấy Packer dẫn đầu bảng xếp hạng về độ nén tốt nhất, vì vậy tôi đoán ymmv


Packer có một tùy chọn để 'mã hóa base62' - và đối với jQuery, nó nén nhỏ hơn yui sau gzip. Điều này là do jquery sử dụng 'eval' và 'with' để ngăn chặn máy nén 'an toàn' thực hiện một số lần nén nhất định, nhưng trình đóng gói bỏ qua chúng. Nói chung không an toàn nhưng jQuery được thử nghiệm cho Packer.
Daniel James

Ngoài ra, hãy thử nén nén.thruhere.net nếu bạn không tin tôi.
Daniel James

9
Đừng quên nhược điểm của packer - thời gian giải nén.
Nosredna

1
xem ra, đóng cửa google đôi khi có thể là máy nén tồi tệ nhất (đầu ra thậm chí lớn hơn bản gốc) - nó chuyển đổi các ký tự không phải mã ascii thành chuỗi \uxxxxtheo mặc định .. sử dụng ví dụ --charset UTF-8(nếu bạn chắc chắn rằng bạn cho trình duyệt biết về nó bằng cách nào đó)
mykhal

Đầu ra ClosCompiler không hoạt động đối với tôi. jscompress.com hoạt động
codenamezero

43

Máy nén YUI là con đường để đi. Nó có tốc độ nén tuyệt vời, được thử nghiệm tốt và được sử dụng trong số nhiều trang web hàng đầu, và, tốt, cá nhân tôi khuyên dùng.

Tôi đã sử dụng nó cho các dự án của mình mà không có một lỗi JavaScript hay trục trặc nào. Và nó có tài liệu tốt đẹp.

Tôi chưa bao giờ sử dụng khả năng nén CSS của nó, nhưng chúng cũng tồn tại. Nén CSS cũng hoạt động tốt.

Lưu ý: Mặc dù / bộ đóng gói / đạt được tốc độ nén tốt hơn so với YUI Compressor của Dean Edwards , tôi đã gặp phải một số lỗi JavaScript khi sử dụng nó.


5
Trình đóng gói có vẻ tốt về kích thước tệp nhưng hóa ra thời gian giải nén thường vượt trội hơn thời gian chuyển tệp nhỏ hơn qua các ống. Hầu hết các điểm chuẩn trình duyệt thực tế mà tôi thấy có tốc độ chậm hơn so với các tệp không nén thô được cung cấp với gzip về thời gian thực hiện trong trình duyệt.
Đại tá Sponsz


Đây là phiên bản trực tuyến của máy nén trong trường hợp bạn không muốn đối phó với việc chạy java: refresh-sf.com/yui
Truyền thuyết Bryan

Các tập lệnh được nén bằng trình đóng gói không cần phải giải nén trừ khi bạn kiểm tra tùy chọn mã hóa Base62 (điều mà bạn không nên làm vì đó là gzip của layman - Tôi chắc chắn rằng hầu hết các máy chủ hiện đại đều hỗ trợ gzip). Không có điểm nào trong việc thu thập tệp được mã hóa base62 vì không còn dư thừa để khai thác. Phiên bản mới nhất của trình đóng gói (phiên bản cuối cùng) không giới thiệu các lỗi, không có phần giải nén (miễn là bạn không mã hóa base62) và vẫn đạt được độ nén nhất. Hiện tại cũng có phiên bản dòng lệnh của packer. Chỉ cần cài đặt nó bằng cách sử dụng npm như sau : npm install packer. (= D
Aadit M Shah

8

Tôi sử dụng ShrinkSafe từ dự án Dojo - thật đặc biệt vì nó thực sự sử dụng trình thông dịch JavaScript ( Rhino ) để đối phó với việc tìm các ký hiệu trong mã và hiểu phạm vi của chúng, v.v ... giúp đảm bảo rằng mã sẽ hoạt động khi xuất hiện đầu kia, trái ngược với rất nhiều công cụ nén sử dụng regex để làm tương tự (điều này không đáng tin cậy).

Tôi thực sự có một nhiệm vụ MSBuild trong Dự án triển khai web trong giải pháp Visual Studio hiện tại của tôi chạy một kịch bản lần lượt chạy tất cả các tệp JS của giải pháp thông qua ShrinkSafe trước khi chúng tôi triển khai và nó hoạt động khá tốt.

EDIT: Nhân tiện , "tốt nhất" là mở để tranh luận, vì các tiêu chí cho "tốt nhất" sẽ thay đổi tùy thuộc vào nhu cầu của dự án. Cá nhân, tôi nghĩ ShrinkSafe là một sự cân bằng tốt; đối với một số người nghĩ kích thước nhỏ nhất == tốt nhất, nó sẽ không đủ.

EDIT: Điều đáng chú ý là máy nén YUI cũng sử dụng Rhino.


5

Hãy thử JSMin , có C #, Java, C và các cổng khác và cũng có sẵn.


Cổng C # đã được di chuyển / gỡ bỏ chưa?
Greg B

4

Nếu bạn sử dụng Packer, chỉ cần đi xa tùy chọn 'thu nhỏ biến' và gzip mã kết quả. Tùy chọn base62 chỉ dành cho nếu máy chủ của bạn không thể gửi các tệp được nén. Trình đóng gói với 'vars thu nhỏ' đạt được khả năng nén YUI tốt hơn, nhưng có thể gây ra lỗi nếu bạn bỏ qua dấu chấm phẩy ở đâu đó.

Base62 về cơ bản là gzip của một người nghèo, đó là lý do tại sao gzipping mã base62-ed cung cấp cho bạn các tệp lớn hơn gzipping mã co-var-ed.





1

Dưới đây là một tập lệnh nén YUI ( Byuic ) tìm thấy tất cả các js và đưa xuống một đường dẫn và nén / (tùy chọn) làm xáo trộn chúng. Rất vui được tích hợp vào một quá trình xây dựng.



1

Máy tính KJS

http://opensource.seznam.cz/KJScompress/index.html

Kjscompress / csskompress là tập hợp của hai ứng dụng (kjscompress a csscompress) để xóa các khoảng trắng và nhận xét không quan trọng khỏi các tệp có chứa JavaScript và CSS. Cả hai đều là các ứng dụng dòng lệnh cho hệ điều hành GNU / Linux.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.