2012-02-08 10 views
19

Tôi đã kích hoạt với mod_deflate. Tôi muốn tìm hiểu kích thước của trang với kích hoạt mod_deflate và không có, và so sánh số lượng hiệu suất đạt được về kích thước. Trong curl, tôi dường như yêu cầu máy chủ cho nội dung gzipped bằng cách sử dụng --compressed và gửi bình thường, nhưng dường như không thể tìm thấy kích thước của trang đó. Có ý tưởng nào để làm việc này không?Có thể 8 sử dụng curl để so sánh kích thước của trang với bật tắt và không sử dụng nó

curl --head http://site

HTTP/1.1 200 OK 
Date: Wed, 08 Feb 2012 08:48:04 GMT 
Server: Apache/2.2.14 (Unix) mod_ssl/2.2.14 OpenSSL/0.9.7a mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 
X-Powered-By: PHP/5.2.12 
Expires: Thu, 19 Nov 1981 08:52:00 GMT 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma: no-cache 
Set-Cookie: PHPSESSID=ce39b051a9cd493cbe4a86056e11d61f; path=/ 
Vary: Accept-Encoding 
Content-Type: text/html 

curl --head --compressed http://site

HTTP/1.1 200 OK 
Date: Wed, 08 Feb 2012 08:48:19 GMT 
Server: Apache/2.2.14 (Unix) mod_ssl/2.2.14 OpenSSL/0.9.7a mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 
X-Powered-By: PHP/5.2.12 
Expires: Thu, 19 Nov 1981 08:52:00 GMT 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma: no-cache 
Set-Cookie: PHPSESSID=513b8ac5818fd043471c8aac44355898; path=/ 
Vary: Accept-Encoding 
Content-Encoding: gzip 
Content-Length: 20 
Content-Type: text/html 
+0

Bạn có thể làm một bình thường GET và so sánh cơ thể phản ứng? – alex

Trả lời

41

Tôi nghĩ rằng cách duy nhất đáng tin cậy để có được kích thước, là để thực sự tải file. Tuy nhiên, curl cung cấp một lựa chọn rất thuận tiện cho việc chỉ xuất ra dữ liệu quan tâm

-w/--write-out <format> 
    Defines what to display on stdout after a completed and successful operation. 

[...] 

size_download The total amount of bytes that were downloaded. 

có nghĩa là bạn có thể làm một cái gì đó như thế này:

curl -so /dev/null http://www.whatsmyip.org/http-compression-test/ -w '%{size_download}' 

Output:

8437 

curl --compressed -so /dev/null http://www.whatsmyip.org/http-compression-test/ -w '%{size_download}' 

Output:

3225 

Sau đó, việc so sánh của bạn sẽ không đáng kể.

+0

Nó hoạt động. Cảm ơn. Nhưng là có bất kỳ tùy chọn trong curl mà cũng cho phép để tải về tất cả các tập tin liên kết (js, css, hình ảnh) trong trang web nhất định để có được tổng kích thước của trang. – Anjesh

+0

Chỉ muốn thêm rằng nó xuất ra theo byte. Từ 'man curl':' size_download Tổng số byte đã được tải xuống.' –

4

Copy/dán sẵn sàng và con người có thể đọc được

Dựa trên @flesk answeron this đây là một phiên bản có thể đọc được con người của kịch bản:

#!/usr/bin/env bash 
set -e 

bytesToHuman() { 
    b=${1:-0}; d=''; s=0; S=(Bytes {K,M,G,T,E,P,Y,Z}iB) 
    while ((b > 1024)); do 
     d="$(printf ".%02d" $((b % 1024 * 100/1024)))" 
     b=$((b/1024)) 
     let s++ 
    done 
    echo "$b$d ${S[$s]}" 
} 

compare() { 
    echo "URI: ${1}" 

    SIZE=$(curl -so /dev/null "${1}" -w '%{size_download}') 
    SIZE_HUMAN=$(bytesToHuman "$SIZE") 
    echo "Uncompressed size : $SIZE_HUMAN" 

    SIZE=$(curl --compressed -so /dev/null "${1}" -w '%{size_download}') 
    SIZE_HUMAN=$(bytesToHuman "$SIZE") 
    echo "Compressed size : $SIZE_HUMAN" 
} 

compare https://stackoverflow.com/q/9190190/1480391 

Output:

URI: https://stackoverflow.com/q/9190190/1480391 
Uncompressed size : 106.69 KiB 
Compressed size : 24.47 KiB 
+1

Tuyệt vời! Tôi dán này vào một tập tin thực thi trên 'PATH' của tôi và thay thế' so sánh https: // stackoverflow.com/q/9190190/1480391' với 'so sánh $ 1'. Bây giờ tôi có thể chạy 'so sánh example.com' để nhấn lên bất cứ điều gì tôi muốn. Nơi này đã được toàn bộ cuộc sống của tôi? – bowheart