2009-03-01 20 views
53

Bạn sử dụng những gì để giảm thiểu và nén các thư viện JavaScript?Bạn sử dụng những gì để giảm thiểu và nén các thư viện JavaScript?

+0

Bắt đầu một bounty để xem liệu có bất kỳ phát triển mới kể từ năm 2009. –

+2

Cách mà các câu hỏi là worded, nó cần phải có được wiki cộng đồng. Bất cứ ai cũng có thể trả lời câu hỏi (ngay cả khi câu trả lời là "không có gì"), và không thể có bất kỳ câu trả lời sai nào ... – Guffa

Trả lời

33

Tôi sử dụng YUI Compressor. Dường như hoàn thành công việc tốt!

+0

Theo kinh nghiệm của tôi, YUI Compressor là bộ khai thác an toàn nhất nhưng mạnh nhất. –

+0

YUIcompressor có một số tác dụng phụ xấu. Nó kết hợp với phiên bản Rhino bị hỏng, phá vỡ mọi javascript bên máy chủ với Rhino. – fforw

+1

Thêm liên kết tới phiên bản trực tuyến này nếu bạn thích, đôi khi tôi chỉ có 1 tệp mà tôi nhanh chóng muốn chuyển đổi. http://www.refresh-sf.com/yui/ – Marko

4

Dean Edward's packer đạt được một số tỷ lệ nén khá tốt. Nó có các triển khai dòng lệnh cho phép nó được sử dụng trong một quá trình tích hợp liên tục.

+6

Nhà đóng gói đã được chứng minh là tồi tệ hơn nén thông thường, vì phí tổn giải nén trong trình duyệt. – Magnar

3

Tôi đã thử máy nén YUI trước đây, nhưng nó cho tôi thông báo lỗi.

tôi đề nghị sử dụng JSMin để rút gọn javascript của bạn:

http://www.crockford.com/javascript/jsmin.html

+0

Douglas Crockford là kiến ​​trúc sư Javascript tại Yahoo. Tôi nghĩ anh ấy là kiến ​​trúc sư cho máy nén YUI. – Swanand

+1

Không. Doug làm việc cho Yahoo nhưng là tác giả của JSMin. Máy nén YUI được tạo ra bởi Julien Lecomte. Nó được viết bằng Java - Tôi không nghĩ Doug sẽ quay lại viết Java lần nữa :) – johnhunter

11

tôi cũng sử dụng YUI Compressor. Tôi có một tác vụ kiến ​​như thế này mà tôi sử dụng trong các dự án của mình:

<!-- 
YUI Compressor tasks 
http://www.julienlecomte.net/yuicompressor/README 
--> 
<property name="yuicompressor.jar" 
      value="C:/devlibs/yuicompressor-2.2.4/build/yuicompressor-2.2.4.jar"/> 

<target name="js.compress"> 
    <!-- Create min directory under js direcrtory if it doesnt exist --> 
    <mkdir dir="${js-directory}/min" /> 

    <apply verbose="true" executable="java" parallel="false" failonerror="true"> 
     <fileset dir="${js-directory}" includes="*.js"/> 
     <arg line="-jar"/> 
     <arg path="${yuicompressor.jar}"/> 
     <srcfile/> 
     <arg line="-o"/> 
     <mapper type="glob" from="*.js" to="${js-directory}/min/*-min.js"/> 
     <targetfile/> 
    </apply> 
</target> 
12

Tôi không giảm thiểu JavaScript chút nào: nén gzip đủ tốt cho tôi và có thêm lợi ích là thông báo lỗi vẫn hữu ích.

+3

+1 Giảm thiểu các mã thay đổi và * có thể * giới thiệu các lỗi. – mark

+1

Chắc chắn, nhưng nó vẫn mang lại một số lợi ích phụ hơn và trên gzipping một mình. Chỉ cần chắc chắn rằng bạn làm tất cả các bài kiểm tra của bạn với phiên bản rút gọn. –

+1

Và những gì về người dùng có bảo vệ chống vi-rút hoặc vì một số lý do khác đang chặn enableGzip? – Louis

42

Tôi đã sử dụng YUI Compressor trong một thời gian dài và đã không có vấn đề với nó, nhưng thời gian gần đây đã bắt đầu sử dụng Google Closure Compiler và đã có một số thành công với nó. Lần hiển thị của tôi về nó cho đến thời điểm này:

  • Nó thường hoạt động tốt hơn Máy nén YUI về giảm kích thước tệp. Bởi một số lượng nhỏ trên chế độ đơn giản, và rất nhiều trên chế độ nâng cao.
  • Chế độ đơn giản cho đến nay đáng tin cậy như Máy nén YUI. Không có gì tôi đã ăn nó đã cho thấy bất kỳ vấn đề.
  • Chế độ "biên dịch" nâng cao rất tuyệt vời cho một số tập lệnh, nhưng việc giảm kích thước kịch bản của kịch bản giảm đáng kể với rất nhiều sự can thiệp vào mã của bạn. Có ways to deal with some of these problems và hiểu những gì nó đang làm có thể đi một chặng đường dài để tránh các vấn đề nhưng tôi thường tránh sử dụng chế độ này.

Tôi đã chuyển sang sử dụng Trình biên dịch đóng cửa của Google ở ​​chế độ "biên dịch" đơn giản, vì nó hơi tốt hơn Máy nén YUI nói chung. Tôi đã sử dụng nó ít hơn đáng kể so với tôi có YUI Compressor nhưng từ những gì tôi đã nhìn thấy cho đến nay tôi muốn giới thiệu nó.

Một điều khác mà tôi chưa thử nhưng âm thanh đầy hứa hẹn là Mihai Bazon's UglifyJS.

+2

Trình biên dịch Đóng cửa của Google là trình tôi khuyên bạn nên sử dụng. Giống như bạn - chế độ đơn giản vừa mới hoạt động ... không có vấn đề gì cả. – Adam

1

http://code.google.com/p/jsmin-php/

Tốt cũ Doug Crockford :-) Cái hay của việc này là điều khiển bộ nhớ cache bạn có thể nhận nén somelovely tự động chỉ khi nó là bắt buộc. Hoặc trong một trong các dự án của tôi, tôi chỉ xuất các tệp nén/gzip và xóa chúng khi tôi thực hiện thay đổi. Đối với một môi trường phát triển, tôi chỉ không gọi kịch bản rút gọn.

0

Tôi sử dụng JavaScript của perl :: Minifier. Nó hoạt động khá tốt và bạn có thể thay thế một số cụm từ bằng cách sử dụng perl.

5

UglifyJS là hình mới.

UglifyJS nén tốt hơn YUI Máy nén và chỉ ngang tầm với Trình biên dịch đóng cửa của Google. Ví dụ: , phiên bản nén của jQuery từ Trình đóng cửa của Google Trình biên dịch chỉ nhỏ hơn 403 byte so với phiên bản do UglifyJS tạo ra - ấn tượng! UglifyJS cũng là nhanh nhất để chạy bằng một cú sút dài, đánh bại Đóng cửa bằng hơn 6 giây!

Ngoài ra, mã được tạo bởi UglifyJS an toàn hơn mã mà Đóng cửa tạo ra. Ví dụ: Đóng cửa không biết cách xử lý eval hoặc bằng {} - nó chỉ ghi lại lỗi và tiếp tục đổi tên biến . Điều này, rõ ràng, dẫn đến mã bị hỏng. UglifyJS không có vấn đề này.

Thông tin thêm có thể được tìm thấy ở đây: http://badassjs.com/post/971960912/uglifyjs-a-fast-new-javascript-compressor-for-node-js

+2

Thật là một cái tên tuyệt vời! –

4

của Google closure cụ

Bạn có thể lập bản đồ phiên bản rút gọn vào mã nguồn thường xuyên để gỡ lỗi trong Firebug với add-on của họ.

22

Bạn có một bầy khả năng ở đây:

Từ kinh nghiệm cá nhân của tôi, tôi muốn khuyên bạn nên sử dụng Dojo SDK để xây dựng một tùy chỉnh xây dựng, mà bạn có thể sau đó lần lượt định cấu hình để sử dụng trình biên dịch ShrinkSafe thông thường của họ hoặc Google Closure, which they now support as well.

Xét về nén, tôi nghĩ Google Closure là kết quả tốt nhất cho tôi cho đến nay, tuy nhiên tôi thường hài lòng với ShrinkSafe và nó lớn hơn một chút và mạnh mẽ hơn, trong khi Trình biên dịch đóng cửa trông hơi mới kid trên khối (mà các bên liên quan của bạn có thể không quá ngây thơ, ví dụ).

Mặc dù một số người chỉ thề bởi Máy nén YUI. Cá nhân tôi không thể thực sự xác minh cho nó.

Bây giờ nếu bạn đặt câu hỏi là nén và không chỉ mã JavaScript của riêng bạn, nó thực sự còn liên quan nhiều hơn, vì bạn sẽ cần hầu hết các công cụ này để xuất các ký hiệu không được đổi tên hoặc tước. Hầu hết các máy nén tốt sẽ loại bỏ các chức năng mà chúng nghĩ là không sử dụng - thường là trường hợp trong thư viện, nếu không bị ràng buộc vào một dự án, và thay đổi tên để làm cho chúng ngắn hơn và sử dụng ít ký tự hơn - cũng là vấn đề. API không bị giả mạo.

Bạn cũng có thể tìm thấy các chủ đề khác về chủ đề này và tìm thông tin trong tài liệu hỗ trợ của công cụ. Bạn cũng có thể muốn xem JSBuilder2, một số loại mặt dây chuyền cho công cụ Xây dựng của Dojo (vì vậy, sử dụng ShrinkSafe hoặc Trình biên dịch Đóng cửa) cho ExtJS (sử dụng máy nén YUI).

(Xin lỗi, là một người dùng mới SO, tôi không thể thêm nhiều hơn một liên kết vì vậy tôi không thể liên kết trực tiếp đến các công cụ.)

EDIT: liên quan đến những mối quan tâm thể hiện trong một số câu trả lời mà nén có thể giới thiệu các lỗi và rằng nó làm cho việc gỡ lỗi dễ dàng hơn vì mã không bị xáo trộn: có, đó là một mối quan tâm hợp lệ. Tuy nhiên:

  • bạn sẽ nhận được một cải tiến rất đáng kể về băng thông nếu bạn sử dụng một minifier, ngay cả với nén gzip kích hoạt (và bạn có thể học cách tận dụng nén gzip bằng cách làm cho cuộc sống của máy nén dễ dàng hơn
  • bạn nên chỉ cần nếm thử mã của bạn trong chế độ gỡ lỗi và chế độ sản xuất để đảm bảo hành vi là giống hệt nhau. mã của bạn. Chúng thực sự chỉ tái sắp xếp mọi thứ và thay thế các chuỗi, thực sự là
  • một số máy nén (Ví dụ hệ thống xây dựng dojo) đi kèm với các tùy chọn để cho phép bạn tạo ra cả một đầu ra nén và không nén, để sau đó bạn có thể kích hoạt các chế độ khác nhau để gỡ lỗi và sản xuất, sử dụng tham số truy vấn chẳng hạn.
3

Đây là giải pháp của Microsoft mà bạn có thể tích hợp vào Visual Studio để giảm thiểu các tệp tự động khi bạn tạo dự án của mình.

để cài đặt:

Tải msi từ: http://aspnet.codeplex.com/releases/view/40584

Bạn có thể cần phải khởi động lại máy tính của bạn sau khi hoàn thành nó.

để sử dụng:

Chỉnh sửa file csproj bạn và bao gồm những điều sau đây vào cuối của tập tin (nhưng trước thẻ </Project>):

<Import Project="$(MSBuildExtensionsPath)\Microsoft\MicrosoftAjax\ajaxmin.tasks" /> 

<Target Name="AfterBuild"> 
    <ItemGroup> 
     <JS Include="**\*.js" Exclude="**\*.min.js;Scripts\*.js" /> 
     <CSS Include="**\*.css" Exclude="**\*.min.css" /> 
    </ItemGroup> 
    <AjaxMin 
    JsSourceFiles="@(JS)" 
    JsSourceExtensionPattern="\.js$" 
    JsTargetExtension=".min.js" 
    CssSourceFiles="@(CSS)" 
    CssSourceExtensionPattern="\.css$" 
    CssTargetExtension=".min.css"/> 
</Target> 

Bây giờ khi bạn xây dựng dự án của bạn, tất cả các tệp CSS và js không kết thúc bằng .min.js, .min.css sẽ được rút gọn (Xem thuộc tính "Loại trừ" để loại trừ các tệp khác khỏi bị rút gọn).

Các vấn đề liên quan