可能重复:
Javascript Memory Limit
我正在使用客户端javascript创建html页面,这将在页面加载时加载大约150mb的XML数据文件。当文件大小约为5 mb时,将整个数据加载到数组中需要30秒。但是当我将文件更改为140 MB时,页面在firefox中没有响应并且在chrome中突然崩溃。我的片段加载数据将处理xml中的每个标记。我的问题是,javascript的堆大小是否有限?任何学术文章资源都可以强调我的研究。
$(document).ready(function () {
// Open the xml file
$.get("xyz.xml", {}, function (xml) {
// Run the function for each in the XML file
$('abc', xml).each(function (i) {
a = $(this).find("a").text();
b = $(this).find("b").text();
c = $(this).find("c").text();
ab = $(this).find("ab").text();
bc = $(this).find("bc").text();
cd = $(this).find("cd").text();
de = $(this).find("de").text();
// process data
dosomething(a,b,c,ab,bc,cd,de);
}); }); });
答案 0 :(得分:2)
我不知道有什么限制。我甚至可以加载1Gb文件。是的,最初加载速度很慢,一切都运行缓慢,因为大部分内存都会被分页。
但是,尝试加载一个大的JavaScript对象时存在问题,主要是因为解析器无法解析太大的对象。见Have I reached the limits of the size of objects JavaScript in my browser can handle?
对于这种情况,解决方案是将JavaScript对象的创建分解为多个阶段,而不是使用单个文字语句。
答案 1 :(得分:0)
因为要改进很多。首先,我想向您推荐一篇帖子76 bytes for faster jQuery。所以,依靠在$ _(this)上替换你的$(this)。 它会为你节省很多记忆和时间!!
如果您不想使用单个jQuery对象,请将变量包含在内:
$('abc', xml).each(function (i) {
var $this = $(this);
a = $this.find("a").text();
....
});
并且您可以提供dosomething功能以尝试改进它