J'ai Apache avec mod_deflate
activée. Je souhaite connaître la taille de la page avec mod_deflate
activé et non activé, et comparez les performances obtenues en taille. En boucle, je semble demander au serveur le contenu compressé en utilisant --compressed
et pour envoyer la normale, mais ne semble pas trouver la taille de cette page. Une idée de comment faire ça?
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
Je pense que le seul moyen fiable d'obtenir la taille est de télécharger le fichier. Cependant, curl offre une option très pratique pour sortir uniquement les données d'intérêt
-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.
ce qui signifie que vous pouvez faire quelque chose comme ceci:
curl -so /dev/null http://www.whatsmyip.org/http-compression-test/ -w '%{size_download}'
Production:
8437
Et pour obtenir la taille compressée:
curl --compressed -so /dev/null http://www.whatsmyip.org/http-compression-test/ -w '%{size_download}'
Production:
3225
Après cela, votre comparaison devrait être triviale.
Basé sur @ réponse flesk et à ce sujet voici une version lisible par l'homme du script:
#!/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
Production:
URI: https://stackoverflow.com/q/9190190/1480391
Uncompressed size : 106.69 KiB
Compressed size : 24.47 KiB