2010-07-13 20 views
17

Nếu trang web của bạn đã kích hoạt tính năng nén/nén zip có điểm nào để rút gọn JavaScript không?Có điểm nào để giảm thiểu JavaScript nếu bạn đã bật tính năng nén không?

Lý thuyết của tôi là sự khác biệt giữa tệp JavaScript được nén nhỏ và tệp JavaScript chưa được nén không đáng kể.

Có rất ít trình duyệt bị bỏ sót ở đó không hỗ trợ nén. Tôi sẽ tưởng tượng rằng một số bot (nhện) có thể không hỗ trợ nén (tôi biết ít nhất một) nhưng chúng dường như không "quan tâm" trong JavaScript của bạn vì chúng không thể thực thi JS và do đó không nên tải xuống.

+2

Xem [Gzip so với minify] (http://stackoverflow.com/questions/807119/gzip-versus-minify). –

+1

Việc rút gọn sẽ trích xuất các nhận xét, giảm kích thước vượt quá mức độ nén có thể làm một mình. –

+1

được rút ngắn sẽ phân tích cú pháp nhanh hơn trên máy khách và sẽ tiết kiệm được nhiều không gian hơn nén một mình –

Trả lời

28

Hãy thử nghiệm nó. Tôi đã sử dụng jQuery 1.4.2 và gzip (không có cờ; dường như không tạo ra sự khác biệt đáng kể) để có được các con số sau.

  • Phát triển: 163.855 byte
  • Phát triển, nén: 45.994 byte
  • được rút gọn: 72.174 byte
  • được rút gọn, nén: 24.565 byte

Vì vậy, đặc biệt này trường hợp, việc rút gọn làm cho tệp gần gấp đôi. Phải thừa nhận rằng, bản phát hành đầy đủ các nhận xét. Hãy lột những người ra, và xem những gì sẽ xảy ra:

  • Stripped: 131.155 byte
  • Stripped, nén: 32.914 byte

Con số này vẫn lớn hơn so với phiên bản rút gọn đáng kể.

2

Có một tệp được rút gọn trước khi bạn gzip nó sẽ tạo ra một sự khác biệt nhỏ về hiệu năng máy chủ, mặc dù tôi nghi ngờ rằng sẽ tăng lên nhiều. Việc rút gọn sẽ xóa nhận xét, mà gzip/deflate sẽ không, nhưng khác với điều tôi muốn nói là bạn đúng.

Tất nhiên, luôn có IE6. Theo kinh nghiệm của tôi, trình duyệt này là không đáng tin cậy khi nói đến gzipped bất cứ điều gì khác hơn là văn bản/html. Đó là gần như đến mức mà nó không quan trọng, mặc dù, như IE6 sử dụng tiếp tục giảm.

+1

Đó là * gần như * đến mức không quan trọng? Tôi ước khách hàng của tôi có cùng quan điểm. Nó giống như "một chút mang thai" trope: miễn là chỉ một trong những khách hàng của bạn nhấn mạnh về hỗ trợ IE6, bạn phải hỗ trợ nó. Tôi muốn địa ngục Microsoft sẽ ép buộc vấn đề này bằng cách nào đó và loại bỏ nó hoàn toàn. – Robusto

+0

Chắc chắn, nếu bạn đang làm công việc của khách hàng thì tùy thuộc vào họ. Nếu không, đó là ý của bạn - gần đây chỉ có 2,5% khách truy cập vào các trang web mà tôi làm việc đang sử dụng IE6. Chúng tôi vẫn ủng hộ nó, nhưng có lẽ nếu chúng tôi không làm vậy, hiệu quả sẽ không quá lớn. Tôi hy vọng sẽ ngừng lo lắng về nó trong khoảng một năm. – JAL

+0

MS có thể giúp khắc phục sự cố bằng cách cung cấp nâng cấp miễn phí từ phiên bản cũ của InfoPath lên InfoPath 2010. Tôi thấy "InfoPath" trong rất nhiều chuỗi tác nhân người dùng IE6 từ thế giới công ty (thông qua trang web vẫn có khoảng 30% IE6 người thua cuộc người dùng). Rõ ràng, nếu bạn cài đặt IE7 với InfoPath cũ, mọi thứ sẽ bị hỏng. – Matt

2

tôi đã cố gắng để zip jquery-1.3.2 trong cả hai phiên bản gốc và minified:

jquery-1.3.2.js  118 kb -> 36 kb 
jquery-1.3.2.min.js 56 kb -> 20 kb 

Vì vậy, Giảm bớt trước khi nén thực sự tạo ra diffence đáng kể.

+0

Điều đó thật thú vị. Bất kỳ suy đoán nào về lý do tại sao có thể, ngoài việc xóa nhận xét? – JAL

+1

Giảm thiểu làm cho mã trở nên đồng nhất hơn, có nghĩa là nó có thể được nén tốt hơn. Bạn có ít "tiếng ồn" (tên biến dài) và nhiều biểu tượng tương tự '() [] {}' v.v.cho phép tỷ lệ nén cao hơn, cũng như một tệp có số không lớn sẽ chỉ nhỏ khi được nén, so với dữ liệu thực (không phải tất cả số không, v.v.) –

+0

Chắc chắn, nếu bạn đang sử dụng tính năng rút gọn để đổi tên biến có ý nghĩa . Đó không phải là một cái gì đó giống như Closure Compiler? Tôi đã nghĩ đến loại chỉ loại bỏ khoảng trống và nhận xét. – JAL

1

Tôi tin rằng phiên bản được rút gọn sẽ chạy nhanh hơn. Biến bây giờ là 1-2 glyphs, vì vậy việc phân tích cú pháp nhanh hơn, khoảng trống và nhận xét là một vấn đề không phải là vấn đề. Tất nhiên, bạn sẽ cần phải thiết kế một thử nghiệm để có thể thực sự cho biết bất kỳ sự khác biệt nào.

Nén cho nền tảng di động có ưu và nhược điểm. Có, nó tải nhanh hơn một chút, nhưng giải nén không ăn hết pin.

--Dave

0

Mỗi byte đếm. Bạn càng tiết kiệm thì tốt hơn.

0

Bạn cũng có thể sử dụng máy nén/trình đóng gói JavaScript sử dụng mã hóa cơ bản 62 (ví dụ: this).

Nó có thể biến 72174 byte (jquery-1.4.2.min.js) thành khoảng 50640 byte. Tuy nhiên, gzipping nó hơn nữa sẽ không cải thiện nén so với một gzipping trực tiếp của tập tin minified (24K quá).

(Bạn cũng có thể cần giữ lại tiêu đề giấy phép nếu bạn đang sử dụng máy nén/trình đóng gói, khoảng 400 byte trong ví dụ này).

+0

Không sử dụng máy nén JavaScript; tệp sẽ được chuyển sẽ có cùng kích thước, nhưng nó tải chậm hơn, vì việc giải nén trong JavaScript là * cách * chậm hơn so với giải nén bằng cách sử dụng GZip gốc. Xem http://www.ericmmartin.com/comparison-of-javascript-compression-methods/ –

+0

Tôi chỉ đang xem xét kích thước, nhưng bạn nói đúng. – Bruno

0

Kiểm tra trang web của Nhà phát triển của Yahoo - http://developer.yahoo.com/performance/rules.html - để giải thích một số lý do tại sao giảm thiểu cùng với nén là tốt. Ngoài ra, hãy kiểm tra mọi thứ của Steve Souders (High Performance Web Sites - trang web và cuốn sách tuyệt vời!).

Tôi muốn tránh bị làm phiền trừ khi bạn thực sự muốn ép nhiều nhất có thể trong tập lệnh của mình. Obfuscation, tùy thuộc vào cách bạn viết JavaScript của bạn, có thể dẫn đến lỗi. Bạn có thể tốt hơn chỉ cần giảm thiểu và nhận được 80-90% con đường ở đó.

Chúc may mắn!

0

Hãy nhớ rằng việc rút gọn thực tế là hủy thông tin. Khoảng trống/nhận xét/tên biến dài/etc ... là hoàn toàn bị loại bỏ (và không thể khôi phục được).

Nén máy chủ, mặt khác, cần phải mất dữ liệu, do đó, nó không thể loại bỏ bất kỳ thông tin nào. Chỉ có thể nén.

Nén máy chủ do đó không thể (về mặt lý thuyết) đạt đến cùng một mức độ nén mà minificaiton có thể (về mặt lý thuyết) đạt được.

Remember, though that while theory and practice are theoretically the same, in practice they never are. :-)

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