49 votes

Comment utiliser curl pour comparer la taille de la page avec le dégonflage activé et sans l'utiliser

J'ai apache avec mod_deflate activé. Je voudrais connaître la taille de la page avec mod_deflate activé et sans, et comparer les performances obtenues en taille. En curl, il semble que je demande au serveur du contenu gzippé en utilisant --compressed et d'envoyer la normale, mais je n'arrive 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

92voto

flesk Points 4937

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 ne sortir que 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}'

Sortir:

 8437

Et pour obtenir la taille compressée :

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

Sortir:

 3225

Après cela, votre comparaison devrait être triviale.

19voto

Yves M. Points 1439

Copier/coller prêt et lisible par l'homme

Sur la base de la réponse @flesk et sur celle-ci, 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

Sortir:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X