DOM中安全的最大节点数量?

时间:2017-03-03 23:43:24

标签: html dom cross-browser out-of-memory

对于Web应用程序,如果目标移动设备 1 中的可用内存运行目标移动浏览器 2 ,如何估计DOM节点的最大数量,包括可以通过HTML或DHTML生成的文本节点?

如何在

之前计算估计值
  • 失败
  • 崩溃
  • 响应显着降低

此外,任何浏览器是否都有硬限制,不能打开每个标签?

关于事先关闭

这与下面评论中的其他问题不同。它还提出了一个非常具体的问题,寻求一种估算方法。没有任何重复,广泛或基于它的意见,特别是现在它是为了清晰而重写而不改变其作者表达的兴趣。

脚注

[1]例如,从2013年到2018年销售的Android或IOS移动设备具有一些特定的RAM容量

[2] Firefox,Chrome,IE 11,Edge,Opera,Safari

2 个答案:

答案 0 :(得分:3)

这是一个只有统计答案才能准确和全面的问题。

<强>为什么

适当的等式是这样的,其中N是节点数,字节 N 是在DOM中表示它们所需的总字节数,以及节点索引n ∈ [0, N)

  

bytes N N (bytesContent n + bytesOverhead n

问题中请求的值是最差情况下手持设备,操作系统,浏览器和操作条件下的N的最大值。为每个排列求解N并非易事。上面的等式揭示了三个依赖关系,每个依赖关系都可以彻底改变答案。

  1. 节点的平均大小取决于每个节点用于保存内容的平均字节数,例如UTF-8文本,属性名称和值或缓存信息。
  2. DOM对象的平均开销取决于管理每个文档的DOM表示的HTTP用户代理。 W3C的Document Object Model FAQ州,&#34;虽然所有DOM实施都应该可以互操作,但它们在代码大小,内存需求和各个操作的性能方面可能会有很大差异。&# 34;
  3. 可用于DOM表示的内存取决于默认使用的浏览器(可能因手持设备供应商或用户更喜欢的浏览器而异),默认浏览器的用户覆盖,操作系统版本,内存容量手持设备,常见后台任务和其他内存消耗。
  4. 严格的解决方案

    可以运行测试来确定手持设备上使用的每个常见http用户代理的(1)和(2)。任何给定站点的用户代理的分布都可以通过配置Web服务器的日志记录机制来放置HTTP_USER_AGENT(如果默认情况下不存在),然后剥离除日志中的所有字段并计算实例每个值。

    每个字符的字节数都需要针对属性值和UTF-8内部文本(或任何编码)进行测试,以获得一组明确的计算因子(1)。

    在各种常见条件下,可用的存储器也需要进行测试,这本身就是一项重大的研究项目。

    所选N的特定值必须为ZERO才能处理实际的最坏情况,因此可以选择一定百分比的典型内容,节点结构和运行时条件。例如,可以使用某种形式的随机原位(在正常环境条件下)研究中获取病例样本,并找到满足95%这些病例的N.

    也许可以通过上述方式测试一组案例,并将结果放在表格中。这样就可以直接回答你的问题。

    我猜这需要一位优秀的移动软件工程师,他具有良好的数学背景,并且需要一名统计专家全职合作,并且需要大量预算才能获得合理的结果。

    更实际的估算

    可以猜出最糟糕的情况。通过几天的研究和一些概念验证应用程序,这个提案可以改进。没有时间这样做,这是一个很好的初步猜测。

    考虑一个允许1 GB用于DOM的手机,因为正常的操作条件使用4 GB中的3 GB用于上述目的。可以假设节点的平均内存消耗如下,以得到一个大概的数字。

    • 每个字符2个字节,每个节点有40个字符的内部文本
    • 每个字符2个字节,每个字符值为10个字符的
    • 每个字符1个字节,每个字符4个字符的4个属性名称
    • 160字节用于C / C ++节点开销

    在这种情况下,N worst_case ,最差情况下的最大节点,

    = 1,024 X 1,024 X 1,024
      / (2 X 40  +  2 X 4 X 10  +  1 X 4 X 4  +  160)
    
    = 3,195,660 . 190,476.
    
    但是,如果可以完全避免,我不会在具有三百万个DOM节点的浏览器中构建文档。考虑采用下面更常见的做法。

    常规练习

    最佳解决方案是远远低于N可能的范围,并使用标准HTTP设计技术简单地将节点总数减少到可能的程度。

    • 减少任何给定页面上显示的内容的大小和复杂性,这也提高了视觉和概念的清晰度。
    • 从服务器请求最少量的数据,使用窗口技​​术推迟尚未显示的内容,或者以精心策划的方式平衡响应时间和内存消耗。
    • 使用异步调用来协助上述极简主义。

答案 1 :(得分:0)

DOM没有限制。相反,正在运行的应用程序有一个限制,称为浏览器&#39;。与所有其他应用程序一样,它具有4GB的虚拟内存限制。驻留内存的使用量取决于物理内存量。在低RAM的情况下,您可能会遇到不断交换的情况(具有可承受的交换内存量)。某些系统(Linux,Android)有一个特殊的内核任务,如果系统内存不足,可以终止应用程序。此外,Linux系统中应用程序的最大大小通常限制为2MB的虚拟内存,可以通过ulimit命令进行更改。