JavaScript数组大小的“可接受”上限是多少?

时间:2010-09-21 01:41:15

标签: javascript arrays localization

我将此问题尽可能保持通用,但我确实遇到了一个需要在我的应用程序中解决的特定问题,答案对此有帮助。

我正在使用的应用程序使用PHP / MySQL作为其后端,并且设置为使得用户可见的文本/单词/短语在输出到浏览器的HTML / JS中没有硬编码,而是它们是存储在与语言密钥相关联的数据库表中,该语言密钥用于基于用户的语言偏好来获取单词/短语的正确翻译。现在,这适用于应用程序HTML中存在的文本,但为了使此系统能够使用javascript文件,所有javascript必须放在.php文件中,并包含在<script></script>标记中,并包含在内联HTML,CSS等。

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

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

唯一的问题是,这个数组中的元素数量很容易进入数千甚至更大。回到我原来的问题,基于普通PC,javascript数组的可接受最大大小是多少?或者我开始时是否完全错误地解决了这个问题?

5 个答案:

答案 0 :(得分:5)

我认为问题与理论上可以处理的javascript数据有关,而与应用程序处理数据的方式有关。

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

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

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

这不是你要找的答案,但我希望它有所帮助。

答案 1 :(得分:1)

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

您可以处理未压缩数据的演出(如果您压缩它会更多)。

在您看到任何“达到上限限制”之前,您更有可能获得列表here中的顶级错误之一。

答案 2 :(得分:1)

  
    

为了使这个系统能够使用javascript文件,所有javascript必须放在一个.php文件中,并用标签包装,并与HTML,CSS等内联。

         

这会在系统的javascript中产生一些灵活性,因为它不能通过标签包含在外部脚本中

  

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

许多网站实际上都这样做,但不一定是在PHP中。谷歌,雅虎等经常使用服务器端脚本语言提供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.

答案 3 :(得分:0)

之前我曾尝试解决类似非网络程序员的问题,并最终将语言包托管为JS查询的单独XML。不好的主意,我会告诉你原因。 Google无法通过JS动态填充页面。但如果这对你没有问题,我会建议那样,因为我不知道任何其他问题。 :)

答案 4 :(得分:0)

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

在某些JavaScript引擎(例如v8)中,长度限制为32位无符号整数,因此这可能是您想要知道的限制。