这是一个只有统计答案才能准确全面的问题。
为什么
适当的方程式如下,其中N是节点数,bytesN是在DOM中表示它们所需的总字节数,节点索引n ∈ [0,N)
。
bytesN = ∑N (bytesContentn + bytesOverheadn)
问题中请求的值是在最坏情况下的手持设备、操作系统、浏览器和操作条件下N的最大值。对于每个排列解出N并不容易。上述方程式揭示了三个依赖关系,每个依赖关系都可能极大地改变答案。
- 节点的平均大小取决于每个节点中用于保存内容(如UTF-8文本、属性名称和值或缓存信息)的平均字节数。
- DOM对象的平均开销取决于管理每个文档的DOM表示的HTTP用户代理。W3C的文档对象模型FAQ指出,“虽然所有DOM实现应该是互操作的,但它们在代码大小、内存需求和单个操作的性能方面可能会有很大差异。”
- 可用于DOM表示的内存取决于默认使用的浏览器(这可能因手持设备供应商或用户而异),用户覆盖默认浏览器,操作系统版本,手持设备的内存容量,常见的后台任务和其他内存消耗。
严格解决方案
可以对常用的手持设备上使用的每个HTTP用户代理进行测试以确定(1)和(2)。可以通过配置Web服务器的日志机制以放置HTTP_USER_AGENT(如果默认情况下没有)并在日志中剥离除该字段以外的所有内容,然后计算每个值的实例来获取任何给定站点的用户代理分布。
需要测试字符每个属性值和UTF-8内部文本(或任何编码)的字节数,以获得用于计算(1)的清晰因素对。
还需要在各种常见条件下进行内存可用性测试,这本身就是一个重要的研究项目。
所选的特定N值必须为零,以处理实际最坏情况,因此应选择一定比例的典型内容、节点结构和运行时条件。例如,可以使用某种形式的随机原地(在正常环境条件下)研究对案例进行取样,并找到满足95%这些情况的N。
也许可以测试一组案例并将结果放在表中。这将代表对您的问题的直接回答。
我猜需要一位优秀的移动软件工程师,具有良好的数学背景和统计专家,全职合作并拥有充足的预算约四周时间才能得出合理的结果。
更切实可行的估算如下。进行几天完整的研究和一些概念性应用程序后,可以进一步细化提案。如果没有这样做的时间,则以下是一个很好的第一次猜测。
考虑一部允许DOM使用1 G字节的手机,因为正常操作条件使用4 G字节中的3 G字节用于上述目的。为了得到一个大致的数字,人们可能会假设一个节点的平均内存消耗如下:
- 每个节点的40个字符的内部文本占用2个字节
- 4个属性值,每个属性值10个字符,每个字符占用2个字节
- 4个属性名称,每个属性名称4个字符,每个字符占用1个字节
- C/C ++节点开销160个字节
在这种情况下,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设计技术尽可能减少节点数量。
- 减少在任何给定页面上显示的内容的大小和复杂性,这也提高了视觉和概念上的清晰度。
- 从服务器请求最小量的数据,通过窗口技术推迟尚未可见的内容或者以明智的方式平衡响应时间和内存消耗。
- 使用异步调用来帮助实现上述极简主义。