【问题标题】:What is the "acceptable" upper limit for JavaScript array size?JavaScript 数组大小的“可接受”上限是多少?
【发布时间】:2011-04-14 23:29:57
【问题描述】:

我尽量笼统地回答了这个问题,但我确实有一个特定问题需要在我的应用程序中解决,对此的答案会有所帮助。

我正在开发的应用程序使用 PHP/MySQL 作为其后端,并且设置为在输出到浏览器的 HTML/JS 中硬编码用户可见的文本/单词/短语,而不是它们存储在与语言键关联的数据库表中,该语言键用于根据用户的语言偏好获取单词/短语的正确翻译。现在这对于存在于应用程序 HTML 中的文本非常有效,但是为了使该系统能够处理 javascript 文件,所有 javascript 都必须放在一个 .php 文件中并用<script></script> 标签包裹并包含在 HTML 中, CSS 等。

这会给系统 javascript 的灵活性带来一些问题,因为它不能通过<link> 标签作为外部脚本包含(我想除非你手动设置 .php 文件的标题),而且也许更重要的是它不能被缩小/packed 等在生产环境中服务时。

我首先想到的解决这个问题的方法是在任何其他 javascript 之前放置一个 php 脚本,该脚本循环遍历语言数据库表中的每条记录,并使用语言键作为数组键和设置创建一个关联的 javascript 数组根据用户的偏好,他们对翻译短语的价值。因此,通过这种方式,所有 javascript 文件都可以制作成实际的 .js 文件,并根据需要进行链接、缩小、打包等,并且它们只需从创建的主语言数组中引用他们需要的短语(即 @ 987654325@)

唯一的问题是,这个数组中的元素数量很容易达到数千甚至更大。回到我最初的问题,基于普通 PC,javascript 数组可接受的最大大小是多少?还是我一开始就完全错误地攻击这个问题?

【问题讨论】:

标签: javascript arrays localization


【解决方案1】:

JavaScript 本质上是一种脚本语言。解释器位于浏览器内核中。如果我错了,请纠正我,但我不相信有一个明确的上限。唯一限制无限上限的是内存限制。

您可以容纳大量未压缩的数据(压缩后更多)。

在看到任何“已达到上限”之前,您更有可能遇到列表 here 中最常见的错误之一。

【讨论】:

  • 是的,我想我应该用不同的方式表达我的问题。我更担心应用程序的性能(尤其是在较慢的机器上),以及如果它正在访问具有 10,000 个元素的数组中的数据,它是否会开始变得迟缓。
  • 我不明白您为什么要通过 JavaScript 执行此操作,正如另一个问题中所说,这应该在服务器端处理。我认为,如果您通过发布一些代码并展示 JavaScript 与其他语言的不同之处会更有益。正如另一位用户建议的那样,您可能希望拥有基于配置的预配置语言脚本。
【解决方案2】:

我之前尝试以非 Web 程序员的身份解决类似的问题,最终将语言包托管为一个单独的 XML,供 JS 查询。坏主意,我会告诉你为什么。 Google 看不到用 JS 动态填充的页面。但如果这对你来说没有问题,我会推荐这种方式,只是因为我不知道其他任何方式。 :)

【讨论】:

【解决方案3】:

我认为问题与 javascript 理论上可以处理多少数据无关,而与您的应用程序如何处理数据有关。

听起来您在每个页面上都返回了用户语言的所有短语,而不仅仅是他们在该特定页面上需要的短语。如果是这种情况,修复它将是解决您的问题的一部分。

在应用程序完全正常运行之前,解决方案的其余部分不会使用 javascript。然后回去用js做渐进增强的东西。

不是从这些数据库查询生成 javascript,而是以用户的自然语言生成页面(服务器端),并从单独的子域/子目录中提供它们。让您的网络服务器根据子域/子目录为用户的语言加载适当的配置。

这不是您要寻找的答案,但希望对您有所帮助。

【讨论】:

    【解决方案4】:

    方法 Array.prototype.push ,将参数附加到数组的末尾,并返回新的长度。

    在 v8 等一些 JavaScript 引擎中,长度限制为 32 位无符号整数,所以这可能是您想知道的限制。

    【讨论】:

    • 所有 JavaScript 引擎 应该 绑定到 32 位无符号整数,因为这是规范所说的(从技术上讲,最大索引是 2^32-2,因此长度将始终适合 32 位)。高于此的索引将起作用,但仅作为对象属性,因此它们不会影响长度。
    【解决方案5】:

    为了让这个系统能够处理 javascript 文件,所有的 javascript 都必须放在一个 .php 文件中,并用标签包裹并包含在 HTML、CSS 等中。

    这会给系统 javascript 的灵活性带来一些问题,因为它不能通过标签作为外部脚本包含进来

    其实,未必如此。您可以使用 PHP 提供 javascript 文件(不是 html)。当然,这样做很可能意味着您所有的 javascript 文件都将具有扩展名 .php,但这是一件小事。如果您不关心是否严格正确,您甚至不必将 Content-type 设置为 js,因为无论如何浏览器都会将 <script> 标记提供的任何内容视为 javascript。

    很多网站实际上都是这样做的,尽管不一定在 PHP 中。 Google、Yahoo 等经常使用服务器端脚本语言提供 javascript,以使它们能够执行以下任何或所有操作:

    • 自动将 javascript/css 文件连接到一个文件中
    • 自动缩小 javascript/css 文件
    • 自动混淆 javascript 文件
    • 自动对所需的 javascript 文件进行依赖解析

    有些人使用 mod_rewrite 将.php(或.pl.cgi)文件重命名为.js,以隐藏实现的细节。但这完全没有必要。

    Here's an example bookmarklet that I serve as a .php file.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-09
      • 1970-01-01
      • 2010-10-09
      • 2019-08-18
      • 2015-07-14
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      相关资源
      最近更新 更多