Existe uma maneira recomendável de obter o tamanho em bytes de uma URL com todas as imagens referenciadas, arquivos CSS e javascript (o número de bytes que um visitante normal deve receber antes que a página seja totalmente carregada no navegador) por meio de utilitários de linha de comando? Algo como (fictício):
wget --output-format=mozilla-archive-format --with-referenced-content --compression=0 \
'http://www.example.com/' > temp.maff && stat -c%s temp.mapp ; rm temp.maff
Eu concordaria com limitações como não incluir referências que são geradas dinamicamente e carregadas por scripts,…. Apenas as informações básicas, obter 4.000.000 quando há uma página HTML de 15.000 bytes com uma imagem de 3.985.000 bytes, já valeria a pena dar uma olhada. Atualmente tenho um script Perl fazendo o básico:
#!/usr/bin/perl
use URI;
$html = `wget -qO - '$ARGV[0]'`;
$sum = length($html);
while($html =~ /\bsrc="(.*?)"/g){
$url = URI->new_abs($1, $ARGV[0]);
$head = `curl -I --silent '$url'`;
if($head =~ /Content-Length: ?(\d+)/){
$size = scalar($1);
}else{
$size = length(`wget -qO - '$url'`);
}
$sum += $size;
}
print "$sum\n";
No entanto, isso tem muitas desvantagens. Apenas um nível de links sendo seguido, sem avaliação de script,…. Qualquer abordagem melhor, talvez uma linha usando ferramentas maduras, seria apreciada.
Responder1
A wget
opção relevante é-p
/--page-requisites
:
Esta opção faz com que o Wget baixe todos os arquivos necessários para exibir corretamente uma determinada página HTML. Isso inclui coisas como imagens embutidas, sons e folhas de estilo referenciadas.
-H
/ --span-hosts
também é recomendado se a página usar algo de outro site (gravatar, APIs do Google).
-O
/ --output-document
irá gerar tudo em um único arquivo, sem qualquer marcação ou estrutura. Isso não é muito útil na maioria das vezes, mas é suficiente se você precisar apenas saber seu tamanho.
wget -p -H 'http://www.example.com/' -O tempfile
wc -c < tempfile