【问题标题】:What is the maximum file size javascript can process? [duplicate]javascript 可以处理的最大文件大小是多少? [复制]
【发布时间】:2013-01-14 22:08:05
【问题描述】:

可能重复:
Javascript Memory Limit

我正在使用客户端 javascript 创建 html 页面,这将在页面加载时加载大约 150mb 的 XML 数据文件。当文件大小约为 5 mb 时,将整个数据加载到数组中需要 30 秒。但是当我将文件更改为 140 mb 时,该页面在 Firefox 中没有响应并且在 chrome 中突然崩溃。我的 sn-p 加载数据将处理 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);
                   }); }); });

【问题讨论】:

  • 我之前用 javascript 读取了数百兆字节的文件并且没有任何问题,不过我不是在浏览器中这样做的。
  • @BenjaminGruenbaum 你是从这么大的 XML 文件中实例化 DOM 吗?
  • @Pointy,不确定它本身是否符合 dom,我在 node.js 上使用 JSDOM 和 jQuery。它比 C# 上的 CsQuery 慢,但它仍然是合理的

标签: javascript jquery xml


【解决方案1】:

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

但是,尝试加载单个这么大的 JavaScript 对象时会出现问题,主要是因为解析器无法解析太大的对象。见Have I reached the limits of the size of objects JavaScript in my browser can handle?

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

【讨论】:

    【解决方案2】:

    因为它需要改进很多。首先,我想向您推荐一个帖子76 bytes for faster jQuery。因此,依靠 $_(this) 替换您的 $(this)。 它将为您节省大量内存和时间!

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

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

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

    【讨论】:

    • 这对这里没有帮助。 (我认为那篇博文的建议在任何情况下都不是一个好的建议,真的。)
    • (我应该说我怀疑它会有所帮助;我怀疑内存问题源于仅仅从一个很大的 XML 文件构建 DOM。)
    • 我同意,解析那么大的 xml 文件并不是一项 JavaScript 工作。最好在服务器端解析,然后得到结果
    • 随机 javascript 库与语言和运行时环境的内存限制有什么关系? jQuery 是一个库的简单玩具,它不是 javascript - 所以在回答 JS 问题时 - 不要包含 jQuery。你看到有人用 Visual Basic sn-ps 回答 C 和 ASM 问题吗?
    • @JonLennartAasenden jQuery 是 javascript,而且 jQuery 很慢而且内存效率低下。所以,这实际上是一个“某种”有效的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    • 2019-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    相关资源
    最近更新 更多