Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript innerHTML大小限制_Javascript_Ajax_Innerhtml - Fatal编程技术网

Javascript innerHTML大小限制

Javascript innerHTML大小限制,javascript,ajax,innerhtml,Javascript,Ajax,Innerhtml,我想使用AJAX将一个htmlfile加载到中,然后需要在此基础上运行jsMath。到目前为止,我对innerHTML所做的一切都是一段或两段,可能是一个表和/或图像。不要太花哨 当我将innerHTML设置为一个外部25k文件,并使用各种复杂的css格式时,可能会出现什么潜在问题?(感谢jsMath)我想不出任何其他方法来实现这一点,但需要知道是否有任何限制 提前谢谢 --戴夫没有什么可以阻止你从技术上这么做。最大的问题是页面加载时间。请确保包含某种类型的指示,表明数据正在加载,否则看起来什么

我想使用AJAX将一个htmlfile加载到
中,然后需要在此基础上运行jsMath。到目前为止,我对innerHTML所做的一切都是一段或两段,可能是一个表和/或图像。不要太花哨

当我将innerHTML设置为一个外部25k文件,并使用各种复杂的css格式时,可能会出现什么潜在问题?(感谢jsMath)我想不出任何其他方法来实现这一点,但需要知道是否有任何限制

提前谢谢


--戴夫

没有什么可以阻止你从技术上这么做。最大的问题是页面加载时间。请确保包含某种类型的指示,表明数据正在加载,否则看起来什么都没有发生。

从技术上讲,没有什么可以阻止您这样做。最大的问题是页面加载时间。请确保包含某种类型的指示,表明数据正在加载,否则看起来什么都没有发生。

在我当前正在使用的应用程序中,我在任何浏览器中将innerHTML设置为30k或更大的字符串时都没有遇到任何问题。(不知道限制是什么)

在我目前正在使用的应用程序中,我在任何浏览器中将innerHTML设置为30k或更大的字符串时都没有遇到任何问题。(不知道限制是什么)

这类东西唯一的限制是纯粹的带宽和处理器相关。您应该确保在ajax请求上没有设置低超时。您还应该在一些低速计算机上进行测试,以查看是否存在内存问题。一些旧浏览器对内存中的大型对象可能非常不宽容。

这种类型的东西唯一的限制是纯粹的带宽和处理器相关。您应该确保在ajax请求上没有设置低超时。您还应该在一些低速计算机上进行测试,以查看是否存在内存问题。一些旧浏览器对内存中的大型对象可能非常不宽容。

您可能希望使用类似的工具对此进行分析,或者了解如何将innerHTML设置为一个非常大的值来影响性能。您可能希望将其与另一种方法(如将新内容放入iframe或对内容分页)进行比较。

您可能希望使用类似的工具对此进行分析,或者了解如何将innerHTML设置为一个非常大的值来影响性能。您可能希望将其与另一种方法进行比较,例如将新内容放入iframe或对内容进行分页。

您的限制很可能是从web服务器设置的下载限制。通常是几MB。一些web框架允许增加此大小,但您不能这样做,因为这意味着增加缓冲区大小,这不是一件好事。

您的限制很可能是从web服务器设置的下载限制。通常是几兆字节。一些web框架允许增加这个大小,但你不能这样做,因为这意味着增加缓冲区大小,这不是一件好事。

我不知道任何浏览器特定的大小限制,但如果你指定的字符串长度超过65536,Chrome会将其拆分为许多
元素childNodes
,因此,您可能必须在这些节点上循环并连接它们

在Chrome开发工具中运行下面的截图。它构造了一个160k字符串,但是驱动元素.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);
但是在Firefox中,
innerHTML
并没有将内容分成许多节点:(Firefox版本34.0,Linux版本17)

因此,您需要考虑到不同的浏览器以不同的方式处理
childNodes
,可能需要迭代所有子节点并连接。(我注意到了这一点,因为我试图使用
innerHTML
来取消显示一个>100k的HTML编码字符串。)


事实上,在Firefox中,我可以通过循环到上面的
I<24
来创建长度为167 772 160的
innerHTML子节点[0]
。但是,在这个长度以上的某个地方,有一个
内部错误:分配大小溢出
错误。

我不知道任何特定于浏览器的大小限制,但是如果您分配的字符串长度超过65536,Chrome会将其拆分为许多
elem.childNodes
,因此您可能必须在这些节点上循环并连接它们

在Chrome开发工具中运行下面的截图。它构造了一个160k字符串,但是驱动元素.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);
但是在Firefox中,
innerHTML
并没有将内容分成许多节点:(Firefox版本34.0,Linux版本17)

因此,您需要考虑到不同的浏览器以不同的方式处理
childNodes
,可能需要迭代所有子节点并连接。(我注意到了这一点,因为我试图使用
innerHTML
来取消显示一个>100k的HTML编码字符串。)


事实上,在Firefox中,我可以通过循环到上面的
I<24
来创建长度为167 772 160的
innerHTML子节点[0]
。但是,在这个长度以上的某个地方,有一个
内部错误:分配大小溢出
错误。

我没有想到这一点本身,我正在使用AJAX在第6章回顾、第7章回顾等之间做出决定,但我没有想到将每个回顾分开。ThanksI没有想到这一点,因为我正在使用AJAX来决定第6章的回顾,第7章的回顾等等,但我没有想到要将每个回顾分开。谢谢提醒,你应该接受问题的答案。就是这样。只是提醒一下,你应该接受你问题的答案。就是这样。我们可以调用方法,而不是迭代所有子节点。我们可以调用方法,而不是迭代所有子节点。
"The length of our long string: 163840"
"The length as innerHTML-childNodes[0]: 163840"
"Num child nodes: 1"