Javascript 查找并打印网页大小(以字节为单位)以及所有标记的计数

Javascript 查找并打印网页大小(以字节为单位)以及所有标记的计数,javascript,html,node.js,dom,jsdom,Javascript,Html,Node.js,Dom,Jsdom,我正在开发一个CLI工具,它将URL参数作为输入。我使用在node.js中创建一个伪DOM来解决这个问题。我使用的是以下vanilla js脚本: console.log'Page Size in bytes:',document.getElementsByTagName'HTML'[0].outerHTML.length/1024; console.log'countoftags:',document.getElementsByTagName'a'。长度; 你有很多问题 最简单的是,您正在计

我正在开发一个CLI工具,它将URL参数作为输入。我使用在node.js中创建一个伪DOM来解决这个问题。我使用的是以下vanilla js脚本:

console.log'Page Size in bytes:',document.getElementsByTagName'HTML'[0].outerHTML.length/1024; console.log'countoftags:',document.getElementsByTagName'a'。长度;
你有很多问题

最简单的是,您正在计算页面大小(以字节为单位),但将字符串长度除以1024,这就是计算KB的方法。请注意,字符串长度仅在有限的情况下等于字节长度

一个更大的问题是,您没有定义页面大小的含义。例如,人们经常将页面大小称为服务器发送到浏览器的初始有效负载的大小。使用outerHTML在这方面是不可靠的,因为负载可能被压缩了。如果您想要的是提供给浏览器以生成页面的HTML的大小,那么outerHTML仍然不可靠,因为它显示的是经过清理的HTML,而不是浏览器收到的原始HTML

还有一个问题是,像Facebook这样的网站使用JavaScript构建页面,因此必须首先运行JavaScript代码。默认情况下,JSDOM不执行JavaScript。原因是JSDOM无法保证在JSDOM处理的页面上执行的JavaScript不会执行恶意操作。看

还有一个问题是,当使用JavaScript构建页面时,没有通用的信号可以用来知道页面已经构建完成。你需要决定什么事件与你相关。例如,我考虑在登录按钮显示时生成的页面。您必须等待该事件。我在这里松散地使用事件这个术语。可能有一个实际的DOM事件与您想要的或不想要的相对应。但是请注意,domload事件并不等待JavaScript代码完成其工作。它会在处理完页面的HTML之后以及在任何可能进一步修改页面的异步JavaScript之前发出