document.documentElement.innerHTML.length
согласно @meder, вероятно, достаточно хорош. Он не будет точным , поскольку он возвращает сериализацию DOM текущей страницы, а не исходный HTML-источник.
Для статических страниц это не имеет значения, так как здесь будет только случай с дополнительным закрывающим тегом, с цитированием там другого атрибута ... но если будет много содержимого страницы, созданного на лету из скрипта, это содержимое считать в innerHTML
, несмотря на то, что он отсутствует в исходном источнике, что может привести к потере вычисления.
Если вам нужно узнать фактическую длину ресурса, вам нужно будет снова извлечь страницу, что можно сделать, используя XMLHttpRequest
на текущем URL:
var xhr= new XMLHttpRequest();
xhr.onreadystatechange= function() {
if (this.readyState!==4) return;
alert(this.responseText.length);
};
xhr.open('GET', location.href, true);
xhr.send();
(Этого нельзя сделать, если страница является результатом запроса POST.)
Это даст вам размер символов. Если вы используете однобайтовую кодировку, такую как ISO-8859-1, размер байта загрузки сети будет таким же. Если вы используете UTF-8, то вы можете узнать размер байта, преобразовав строку в UTF-8-байтов-как-кодовые единицы, для чего есть быстрый идиоматический взлом:
var bytes= unescape(encodeURIComponent(this.responseText));
alert(bytes.length);
Если вам не повезло использовать многобайтовую кодировку не-UTF-8, вы не сможете здесь многое сделать; для кодировки вам придется включить полные таблицы сопоставления, которые для восточноазиатских кодировок будут безумно большими.