Wal*_*ril 9 html dom cross-browser out-of-memory
对于web应用,给定运行目标移动浏览器2的目标移动设备1中的可用存储器,如何估计可以通过HTML或DHTML生成的DOM节点(包括文本节点)的最大数量?
如何计算之前的估计值
此外,是否有任何浏览器的硬限制不打开每个标签?
关于事先关闭
这与下面评论中的其他问题不同.它还提出了一个非常具体的问题,寻求一种估算方法.没有任何重复,广泛或基于它的意见,特别是现在它是为了清晰而重写而不改变其作者表达的兴趣.
脚注
[1]例如,从2013年到2018年销售的Android或IOS移动设备具有一些特定的RAM容量
[2] Firefox,Chrome,IE 11,Edge,Opera,Safari
这是一个只有统计答案才能准确和全面的问题。
为什么
适当的公式是这样的,其中 N 是节点数,字节N是在 DOM 中表示它们所需的总字节数,以及节点索引n ? [0, N)。
字节N = ? N (bytesContent n + bytesOverhead n )
问题中要求的值是在最坏情况下手持设备、操作系统、浏览器和操作条件下 N 的最大值。为每个排列求解 N 并非易事。上面的等式揭示了三个依赖关系,每个依赖关系都可能彻底改变答案。
严谨的解决方案
可以运行测试来确定 (1) 和 (2) 用于手持设备上使用的每个常见 http 用户代理。可以通过配置 Web 服务器的日志记录机制来获取任何给定站点的用户代理分布,以放置 HTTP_USER_AGENT(如果默认情况下不存在),然后剥离日志中除该字段之外的所有字段并计算每个值的实例.
需要针对属性值和 UTF-8 内部文本(或任何编码)测试每个字符的字节数,以获得用于计算 (1) 的明确因素对。
可用的内存也需要在各种常见条件下进行测试,这本身就是一个重大的研究项目。
选择的 N 的特定值必须为零才能处理实际的最坏情况,因此可以选择内容、节点结构和运行时条件的典型情况的特定百分比。例如,可以使用某种形式的随机原位(在正常环境条件下)研究来抽取案例样本,并找到满足这些案例 95% 的 N。
也许可以通过上述方式测试一组案例,并将结果放在表格中。这将代表对您的问题的直接回答。
我猜这需要一位具有良好数学背景的优秀移动软件工程师和一位统计专家全职工作,预算充足,大约需要四个星期才能获得合理的结果。
更实际的估计
人们可以猜测最坏的情况。通过几天的研究和一些概念验证应用程序,可以完善该提案。没有时间这样做,这是一个很好的初步猜测。
考虑允许 1 GB 用于 DOM 的手机,因为正常操作条件使用 4 GB 中的 3 GB 用于上述目的。人们可能假设一个节点的平均内存消耗如下,以获得一个大概的数字。
在这种情况下,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.
Run Code Online (Sandbox Code Playgroud)
但是,如果完全可以避免的话,我不会在具有 300 万个 DOM 节点的浏览器中构建文档。考虑采用下面更常见的做法。
常见做法
最好的解决方案是远远低于 N 可能的值,并使用标准 HTTP 设计技术将节点总数减少到可能的程度。