2010-01-08 21 views
6

Tôi rút gọn các tệp css và js của mình khi đang di chuyển với google.codes rút gọn. Tôi cũng đã thiết lập .htaccess của tôi để sử dụng deflate trên tất cả các tệp css và js của tôi - lý do beeing một số tệp js (như shadowbox và tinymce) tham chiếu đến các tệp js khác trong mã. Vì vậy, tôi nén với apache deflate và cũng minify nén một số js và css tập tin với gzip - tôi tạo ra overhead bằng cách làm điều này - gzipping đầu tiên (minify) và sau đó zlib (deflate) sẽ chạy lại. Hoặc sẽ apache deflate bỏ qua các tập tin đã được gzipped có các thuộc tính được thiết lập bởi minify trong các tiêu đề. Bất cứ ai có bất kỳ kinh nghiệm với điều này?Kết hợp giảm phát và giảm thiểu - tôi có đang tạo chi phí không?

+0

Đó là một câu hỏi thực sự hay! Tôi không biết câu trả lời là gì, nhưng tác giả của Minify có vẻ rất nhạy cảm với nhóm thảo luận của mình: https://groups.google.com/group/minify – Annie

Trả lời

5

Giảm thiểu + xói mòn/gzipping hoạt động tốt với nhau.

Tôi sử dụng viết lại mod để thực hiện mục đích đó, tôi đã tạo sẵn tất cả các tệp css/js thành 2 phiên bản, phiên bản gốc và .css.gz/.js.gz.

Trình duyệt chỉ gửi yêu cầu .js/.css, máy chủ kiểm tra sự tồn tại của .js.gz/.css.gz và trả lại nội dung được nén nếu các điều kiện nhất định được khớp.

Vì vậy, nó không quan trọng cho js/file css được nạp khi đang bay từ js (ví dụ shadowbox hoặc TinyMCE của bạn)

Về cơ bản, như

RewriteEngine On 
RewriteBase/

#Check for browser's Accept-Encoding, 
RewriteCond "%{HTTP:Accept-Encoding}" "gzip.*deflate|deflate.*gzip" 

#check file name is endswith css or js 
RewriteCond %{REQUEST_FILENAME} "\.(css|js)$" 

#check existance of .gz file name 
RewriteCond %{REQUEST_FILENAME}.gz -s 

#rewrite it to .js.gz or .css.gz 
RewriteRule ^.*$ %{REQUEST_URI}.gz [L] 

#update some response header 
<FilesMatch "\.js\.gz$"> 
    AddEncoding gzip .gz 
    ForceType "text/javascript" 
</FilesMatch> 

<FilesMatch "\.css\.gz$"> 
    AddEncoding gzip .gz 
    ForceType "text/css" 
</FilesMatch> 
+0

Cảm ơn vì điều đó! Kịch bản tuyệt vời bạn có ở đó! Nhưng bạn biết công cụ giảm thiểu (không phải là giảm thiểu nói chung) từ google thực sự giảm thiểu và gửi các tập tin với nén và sau đó tôi sẽ làm điều đó một lần nữa với phần máy chủ (apache deflate trên bay). Và với việc làm nó hai lần tôi đã tự hỏi nếu tôi đã tạo ra trên không ..? xin lỗi nếu tôi không rõ ràng ... –

+0

Bạn có nghĩa là gzipping đôi? Tôi đoán nó sẽ không phải vì người làm hoa sẽ không biết cần phải giải nén 2 lần. – YOU

1

gzip này sử dụng các thuật toán nén zlib và hầu hết các chuỗi byte sẽ không nén tốt lần thứ hai.

+0

oh tôi không biết gzip sử dụng thư viện zlib .. tôi nghĩ đó là sự khác biệt giữa gzip và xì hơi. gzip sử dụng các thư viện gzip tốt và giảm phát bằng cách sử dụng các thư viện zlib. nhưng câu hỏi là tập tin sẽ được nén đôi - tôi chắc chắn nó sẽ không nhỏ hơn nhiều - nhưng khách hàng sẽ phải giải mã tập tin deflatet đầu tiên và sau đó là các tệp được rút gọn - tương tự cho máy chủ. vì vậy phải có phí ở đó ..? –

+3

Nếu bạn đã biết nó sẽ không nhận được nhỏ hơn, thì tại sao làm điều đó? :) –

1

Minify không phân phát tệp qua Apache, vì vậy không có mã hóa kép.

Với bộ lọc DEFLATE, Apache gzips các tập tin được yêu cầu on-the-fly mỗi lần. Giảm bớt gzips các tập tin trên yêu cầu đầu tiên sau đó gửi phiên bản được lưu trữ trước gzipped cho các yêu cầu sau này.

Là nền tảng PHP, nó thực hiện giao dịch linh hoạt và dễ bảo trì, nhưng nếu bạn ném bộ nhớ cache proxy ở phía trước nó sẽ thực hiện cũng như cấu hình của S.Mark.