我想使用AJAX将htmlfile加载到<div>
然后我需要在此上运行jsMath。我用innerHTML完成的所有事情都是一两段,也许是一张表格和/或图片。没什么太花哨。innerHTML大小限制
当我将innerHTML设置为外部25k文件时,可能会发生什么样的潜在问题,以及各种复杂的css格式? (感谢jsMath)我想不出任何其他方法做这件事,但需要知道是否有任何限制。
在此先感谢。
--Dave
我想使用AJAX将htmlfile加载到<div>
然后我需要在此上运行jsMath。我用innerHTML完成的所有事情都是一两段,也许是一张表格和/或图片。没什么太花哨。innerHTML大小限制
当我将innerHTML设置为外部25k文件时,可能会发生什么样的潜在问题,以及各种复杂的css格式? (感谢jsMath)我想不出任何其他方法做这件事,但需要知道是否有任何限制。
在此先感谢。
--Dave
没有什么可以阻止您在技术上做到这一点。最大的问题将是页面加载时间。确保包含某种数据正在加载的指示,或者看起来没有任何事情发生。
在我目前正在使用的应用程序中,我没有任何问题在任何浏览器将innerHTML设置为30k或更多的字符串。 (不知道限制是什么)
这种类型的东西的唯一限制是纯粹的带宽和处理器相关。您应该确保您的ajax请求没有设置较低的超时时间。您还应该测试一些速度较低的计算机以查看是否存在内存问题。一些旧的浏览器可能对内存中的大型对象非常宽容。
您可能想要使用类似dynatrace ajax或speed tracer这样的工具来分析此问题,以了解如何将innerHTML设置为真正巨大的值以影响性能。您可能想要将其与另一种方法比较,如将新内容放入iframe中,或对内容进行分页。
我没有想到本身我使用AJAX来决定第6章审查,第7章审查等,但我没有想过将每个审查分裂。谢谢 – 2009-12-24 04:41:57
您的限制很可能是从您的Web服务器设置的下载限制。通常是几MB。几个Web框架允许增加这个大小,但你不能这样做,因为这意味着增加缓冲区大小,这不是一件好事。
我不知道任何浏览器特定的大小限制,但是如果您分配的字符串长度超过65536,Chrome会将其分割成多个elem.childNodes
,因此您可能必须遍历这些节点并将它们连接起来。
在Chrome开发工具中运行以下内容。它构造一个160 k字符串,但theDivElement.childNodes[0]
被剪辑为65536个字符。
var longString = '1234567890';
for (var i = 0; i < 14; ++i) {
longString = longString + longString;
}
console.log('The length of our long string: ' + longString.length);
var elem = document.createElement('div');
elem.innerHTML = longString;
var innerHtmlValue = elem.childNodes[0].nodeValue;
console.log('The length as innerHTML-childNodes[0]: ' + innerHtmlValue.length);
console.log('Num child nodes: ' + elem.childNodes.length);
结果:(Chrome版本39.0.2171.95(64位),Linux Mint的17)
The length of our long string: 163840
The length as innerHTML-childNodes[0]: 65536
Num child nodes: 3
,但在Firefox innerHTML
内容不分割成许多节点:(FF版本34.0 ,Linux Mint的17)
"The length of our long string: 163840"
"The length as innerHTML-childNodes[0]: 163840"
"Num child nodes: 1"
所以,你需要考虑到不同的浏览器处理childNodes
不同,或许遍历所有子节点并连接。 (我注意到这一点,因为我试图用innerHTML
到反转义一> 100k的HTML编码的字符串。)
事实上,在Firefox我可以通过循环到上述i < 24
创建长度167 772 160的innerHTML-childNodes[0]
。但是在这个长度以上的地方,有一个InternalError: allocation size overflow
错误。
提醒一下,你应该接受你的问题的答案。这是SO方式。 – 2010-01-13 02:36:28