2010-04-07 29 views
30

Có một số mục đích hợp lệ để giảm thiểu trước khi nén không? Có vẻ như không chắc rằng tệp gzipped nhỏ hơn nếu nó được rút gọn trước.Có lợi ích gì khi rút gọn JavaScript trước khi gzipping nó?

Tôi hỏi vì chẩn đoán vấn đề sản xuất trong mã được rút gọn là khó khăn hơn rất nhiều, và tôi tự hỏi liệu mọi người có đang tự chịu đựng điều đó không vì mục đích hay không.

+2

điều này thực sự dễ dàng kiểm tra ... và bạn nên sử dụng các tệp thực tế của mình; hoặc đừng lo lắng về nó và chỉ cần gzip –

+0

Tôi vừa thử nó trên một tập tin tôi có ở đây. Nó được đóng gói 160kb, 56kb.Gzipped bằng cách sử dụng các thiết lập tương tự, unpacked một trở thành 28kb, và đóng gói một 23kb. – nickf

+0

@Steve, hãy xem xét Compressor Rater, bạn có thể so sánh mã của mình với các công cụ khai thác phổ biến khác nhau, cả có và không có tác dụng nén gzip bổ sung: http://compressorrater.thruhere.net/ – CMS

Trả lời

21

Có, chắc chắn là một lợi ích.

Giảm thiểu là nén mất dữ liệu trong khi gzipping là không mất dữ liệu. Ergo, với việc giảm thiểu bạn loại bỏ dữ liệu không cần thiết (như bình luận và variablenames dài) mà sẽ luôn luôn giúp đỡ để làm cho tập tin của bạn nhỏ hơn. Ngay cả với gzip vẫn sẽ có sự khác biệt trong hầu hết các trường hợp.

Ví dụ:

function foo(this_is_my_variable){ 
    var this_is_my_other_variable = 0; 
    this_is_my_other_variable = this_is_my_other_variable + this_is_my_variable; 
    return this_is_my_other_variable; 
} 

Điều đó có thể được rút gọn vào:

function foo(a){ 
    var b = 0; 
    b = b +a; 
    return b; 
} 

Hoặc nếu minifier là thông minh:

function foo(a){ 
    return a; 
} 

Tất cả các mã cho kết quả tương tự, nhưng kích thước khác nhiều.

+2

gzip cũng sẽ làm cho ngắn hơn "this_is_my_variable" ngắn hơn. Ba ví dụ của bạn gzip là 98, 70 và 51 byte. – Thilo

+0

@Thilo: không ngắn hơn các biến ký tự đơn lẻ mặc dù .. – nickf

+3

Đúng là trình chỉnh sửa giúp bằng cách chia sẻ các nhận xét; không thực sự đúng rằng rút ngắn tên biến dài giúp kể từ khi deflate của gzip đã được giao dịch với điều đó chỉ tốt (điều duy nhất sẽ được hưởng lợi từ việc giảm thiểu trong trường hợp này là kích thước từ điển.) – vladr

3

Có thể. Ngoài việc loại bỏ khoảng trống, việc rút gọn JavaScript có thể dẫn đến nhiều lần lặp lại cùng một văn bản, điều này có thể có nghĩa là nén cao hơn một chút với gzip. May mắn là thật dễ dàng để thực hiện trước và sau từ công cụ dòng lệnh gzip, phổ biến trong * nix và available for Windows sử dụng cùng một thuật toán nén (mặc dù không chính xác định dạng giống nhau).

1

Tôi luôn thấy sự giảm đáng kể về số byte cuối cùng khi tôi rút gọn trước gzip.

Tôi có một tập lệnh php lệnh hack 20 phút giao tiếp với máy nén yui và trình biên dịch đóng googles. Nó cho tôi thấy trước và sau byte bao gồm sau gzip, vì vậy khá dễ dàng cho tôi để kiểm tra.

22

Đối với kích thước tập tin thô, đây là một mẫu (jQuery 1.4.2):

$ curl http://code.jquery.com/jquery-1.4.2.js | gzip > jquery.gz 
$ curl http://code.jquery.com/jquery-1.4.2.min.js | gzip > jquery-min.gz 

$ ls -la jquery* 
-rw-r--r-- 1 me staff 24545 Apr 7 12:02 jquery-min.gz 
-rw-r--r-- 1 me staff 45978 Apr 7 12:02 jquery.gz 

Vì vậy, phiên bản rút gọn là khoảng một nửa kích thước.

2

Nó cũng có thể giúp tăng tốc phân tích mã javascript trong trình duyệt. Tùy thuộc vào kích thước tệp của bạn, trình duyệt có thể dành một lượng đáng kể thời gian phân tích cú pháp và mã hóa tệp sẽ được giảm bằng cách rút gọn.

Tất nhiên, chỉ điểm chuẩn và lược tả sẽ cho bạn biết nếu đó thực sự sẽ là một lợi ích cho tình huống cụ thể của bạn.

Điều tôi thấy hiệu quả nhất là tôi giữ cả phiên bản được rút gọn và không được rút gọn của tất cả các tệp .js trên trang web của mình và chỉ sử dụng nút chuyển cấu hình để chuyển đổi giữa hai. Bằng cách đó, sản xuất bình thường có thể sử dụng phiên bản được rút gọn và sau đó nếu tôi phải gỡ lỗi một cái gì đó, chỉ cần lật công tắc và phiên bản không được rút gọn được phục vụ thay thế. (Quá trình xây dựng đảm bảo rằng các phiên bản được rút gọn và không được rút gọn được đồng bộ hóa, tất nhiên)

+0

Bạn không nên thực sự gỡ lỗi trên một trang web sản xuất. – Ben

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