Есть ли рекомендуемый способ получить размер URL-адреса в байтах со всеми связанными изображениями, файлами CSS и javascript (количество байтов, которое должен получить обычный посетитель, прежде чем страница полностью загрузится в браузере) с помощью утилит командной строки? Что-то вроде (вымышленное):
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
Я бы согласился на ограничения, например, не включать ссылки, которые динамически генерируются и загружаются скриптами, .... Даже базовая информация, получение 4 000 000, когда есть 15 000 байт HTML-страницы с 3 985 000 байт изображения на ней, уже стоила бы рассмотрения. В настоящее время у меня есть скрипт Perl, который делает самое простое:
#!/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";
Однако у этого есть много недостатков. Только один уровень ссылок, по которым осуществляется переход, нет оценки скрипта, .... Любой лучший подход, может быть, однострочный с использованием зрелых инструментов, был бы оценен.
решение1
Соответствующий wget
вариант:-p
/--page-requisites
:
Эта опция заставляет Wget загружать все файлы, необходимые для правильного отображения данной HTML-страницы. Сюда входят такие вещи, как встроенные изображения, звуки и ссылочные таблицы стилей.
-H
/ --span-hosts
также рекомендуется, если страница использует что-либо с другого сайта (Gravatar, API Google).
-O
/ --output-document
выведет все это в один файл, без какой-либо разметки или структуры. Это не очень полезно в большинстве случаев, но достаточно хорошо, если вам нужно только знать его размер.
wget -p -H 'http://www.example.com/' -O tempfile
wc -c < tempfile