有没有一种方法可以在JavaScript中以编程方式测量页面权重?

有没有一种方法可以在JavaScript中以编程方式测量页面权重?,javascript,html,dom,memory,Javascript,Html,Dom,Memory,我正在开发一个web应用程序,它通过使用JavaScript操作HTMLDOM动态构建UI 如果正在生成的文档的大小变得太大(假设某个任意数字),我希望采取行动,例如清除旧信息 是否可以通过编程方式查询DOM,以了解DOM的大小—以等效HTML文本的字节(即文件大小)或理想情况下以DOM占用的内存量为单位?我会尝试以下方法: window.document.documentElement.innerHTML.length 但老实说,这比这复杂得多。它将返回字符的数量。要获得文档的大小,您必须实

我正在开发一个web应用程序,它通过使用JavaScript操作HTMLDOM动态构建UI

如果正在生成的文档的大小变得太大(假设某个任意数字),我希望采取行动,例如清除旧信息


是否可以通过编程方式查询DOM,以了解DOM的大小—以等效HTML文本的字节(即文件大小)或理想情况下以DOM占用的内存量为单位?

我会尝试以下方法:

window.document.documentElement.innerHTML.length
但老实说,这比这复杂得多。它将返回字符的数量。要获得文档的大小,您必须实际检查文档使用的字符集/编码

UTF-8的每个ASCII字符将有1个字节。任何非ascii的内容都可能有2到6个字节大。如果文档采用不同的编码,则每个字符的大小将不同。UTF-16每个字符有2字节,UTF-32->4字节

“猜测”文档大小的一种方法是扫描上面代码片段结果中包含的每个字符。对于utf-8,任何非ascii的内容都至少有2个字节(除非文档中有中文或非常奇怪的语言,否则不可能超过2个字节)。即使这样也不能说明它在内存中占用了多少空间,因为文本可能比DOM对象占用更多的空间。将整个树解析为一个字符串将使用内存2,但如果操作正确,它应该不会太重,文档有多大

如果您想知道页面在DOM中的“内存”中占用了多少空间,则不可能知道,因为每个DOM元素都是依赖特定的,并且没有API允许您访问内部

不管出于什么原因,这都是件大事。您可以看看XPCOM,然后构建自己的API,返回DOM中使用的内存量

但你应该跳出框框思考 您遇到的问题不太可能,因为页面太大。但是因为一些JS正在创建很多dom对象。使用一个剖析器来观察页面是如何建立的,你可能会考虑这个问题:我们是否需要保持所有的对象附加到文档中?如果页面在某个地方变大,可以限制块中显示的元素数量,并将数据保留在内存中。在需要时重新生成DOM对象。将数据保存在js代码中。如果某些数据变得未使用,您可以将其忘记,或者将其存储在indexeddb中。需要时从那里重新加载


不要使用“显示:无”隐藏dom对象。仅在需要时生成DOM对象。如果到处都有隐藏的DOM对象。

我会尝试以下方法:

window.document.documentElement.innerHTML.length
但老实说,这比这复杂得多。它将返回字符的数量。要获得文档的大小,您必须实际检查文档使用的字符集/编码

UTF-8的每个ASCII字符将有1个字节。任何非ascii的内容都可能有2到6个字节大。如果文档采用不同的编码,则每个字符的大小将不同。UTF-16每个字符有2字节,UTF-32->4字节

“猜测”文档大小的一种方法是扫描上面代码片段结果中包含的每个字符。对于utf-8,任何非ascii的内容都至少有2个字节(除非文档中有中文或非常奇怪的语言,否则不可能超过2个字节)。即使这样也不能说明它在内存中占用了多少空间,因为文本可能比DOM对象占用更多的空间。将整个树解析为一个字符串将使用内存2,但如果操作正确,它应该不会太重,文档有多大

如果您想知道页面在DOM中的“内存”中占用了多少空间,则不可能知道,因为每个DOM元素都是依赖特定的,并且没有API允许您访问内部

不管出于什么原因,这都是件大事。您可以看看XPCOM,然后构建自己的API,返回DOM中使用的内存量

但你应该跳出框框思考 您遇到的问题不太可能,因为页面太大。但是因为一些JS正在创建很多dom对象。使用一个剖析器来观察页面是如何建立的,你可能会考虑这个问题:我们是否需要保持所有的对象附加到文档中?如果页面在某个地方变大,可以限制块中显示的元素数量,并将数据保留在内存中。在需要时重新生成DOM对象。将数据保存在js代码中。如果某些数据变得未使用,您可以将其忘记,或者将其存储在indexeddb中。需要时从那里重新加载


不要使用“显示:无”隐藏dom对象。仅在需要时生成DOM对象。如果到处都有隐藏的DOM对象。

计算可用内存可能不可能,因为Javascript(浏览器环境)在沙箱中运行,它无法访问系统资源,因此您无法检测内存使用情况,但您可以确定地计算页面大小和可用元素数等:

( document ).ready(function() {
        var pageSize = $('html').html().length;
        var kbytes = pageSize / 1024;
    }
);
或者,您可以根据页面上的元素数采取一些操作:

$( "*" ).length

计算可用内存可能是不可能的,因为Javascript(浏览器环境)在沙箱中运行,它无法访问系统资源,因此您无法检测内存使用情况,但您可以确定地计算页面大小和可用元素数等:

( document ).ready(function() {
        var pageSize = $('html').html().length;
        var kbytes = pageSize / 1024;
    }
);
或者,您可以根据页面上的元素数采取一些操作:

$( "*" ).length

document.documentElement.innerHTML.length
?没有可用的内存接口。当然,您可以将其序列化为HTML(然后获取字符串的
.length
),但我不建议在大型文档上经常这样做。我认为这不会帮助您获取DOM的大小,因为