3

可能重复:
Javascript 内存限制

我正在使用客户端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);
                   }); }); });
4

2 回答 2

2

我不知道有什么限制。我什至能够加载一个 1Gb 的文件。是的,最初加载速度很慢,而且一切都运行得很慢,因为大部分内存将被分页。

但是,尝试加载一个那么大的单个 JavaScript 对象时会出现问题,主要是因为解析器无法解析太大的对象。请参阅我是否已达到浏览器中 JavaScript 可以处理的对象大小的限制?

对于这种情况,解决方案是将 JavaScript 对象的创建分解为多个阶段,而不是使用单个文字语句。

于 2013-01-30T23:02:00.057 回答
1

因为要改进的太多了。首先,我想向您推荐一个76 字节的帖子,以获得更快的 jQuery。因此,依靠 $_(this) 替换您的 $(this)。它将为您节省大量内存和时间!!

如果您不想使用单个 jQuery 对象,请像这样兑现您的变量:

$('abc', xml).each(function (i) {
   var $this = $(this);
   a = $this.find("a").text();
   ....
});

你可以提供你的 dosomething 函数来尝试改进它

于 2013-01-30T22:30:33.093 回答