【问题标题】:Passing a large dataset to the client - Javascript arrays or JSON?将大型数据集传递给客户端 - Javascript 数组还是 JSON?
【发布时间】:2009-09-22 05:42:07
【问题描述】:

我正在向客户端传递一个最多包含 1000 行的表,其中包含名称、ID、纬度和经度值。

然后该列表将由 Javascript 处理并转换为 Google 地图上的标记。

我最初计划使用 JSON 来实现这一点,因为我希望代码可读且易于处理,并且随着时间的推移我们可能会为其添加更多结构。

但是,我的同事建议将其作为 Javascript 数组传递下来,因为它会大大减小大小。

这让我想到,也许 JSON 有点多余。毕竟,对于定义的每一行,每个字段的名称也是重复输出的。而对于数组,单元格的位置用于指示字段。

但是,使用数组真的会提高性能吗?

该网站使用 GZIP 压缩。这种压缩是否足够有效以处理在 JSON 字符串中发现的任何冗余?

[编辑]

我意识到 JSON 只是一种符号。

但我真正的问题是 - 在性能方面,哪种表示法最好?

如果我使用完全命名的属性,那么我可以有这样的代码:

var x = resultset.rows[0].name;

如果我不这样做,它的可读性会降低,如下所示:

var x = resultset.rows[0][2];

我的问题是——为了性能提升而牺牲代码可读性是否值得?还是不行?


补充说明:

根据 Wikipedia,Deflate 压缩算法(由 gzip 使用)执行“重复字符串消除”。 http://en.wikipedia.org/wiki/DEFLATE#Duplicate_string_elimination

如果这是正确的,我没有理由担心 JSON 中的任何冗余,因为它已经被处理了。

【问题讨论】:

  • 压缩并没有完全消除重复的字符串,它只是有效地表示它。如果从一开始就没有重复的字符串,它仍然会更小。

标签: javascript json dataset


【解决方案1】:

JSON 只是一种表示法(Javascript Object Notation),包括 JS 数组——即使它的名称中有“对象”一词。

http://json.org/ 上查看它的语法,它定义了一个像这样的数组(引用)

数组是一个有序的集合 价值观。数组以[ 开头(左 括号)并以]结尾(右 括号)。值由, 分隔 (逗号)。

这意味着 (取自 JSON Data Set Sample 将是有效的 JSON:

[ 100, 500, 300, 200, 400 ]

即使它根本不包含也不声明任何对象。


在你的情况下,我想你可以使用一些数组,按位置存储数据,而不是按名称。

如果您担心大小,您可能希望自己在服务器端“压缩”该数据,并在客户端对其进行解压缩——但我不会这样做:这意味着您会客户端需要更多的处理时间/能力...

我宁愿对包含数据的页面进行 gzip 压缩:您将无事可做,它是全自动的,而且运行良好——而且大小上的差异可能不会很明显。

【讨论】:

  • 请注意,JSON 只是 JavaScript 的一个子集。
  • 而 JavaScript 数组只是 JSON 的一个子集。您真正想知道的是将数据存储为 JSON 中的数组还是对象。
  • @Marius:不。JSON 是 JavaScript 的子集,不是,反之亦然。这是有效的 JavaScript,但不是有效的 JSON:[foobar]
【解决方案2】:

我建议使用简单的 CSV 格式。有一个很好的article on the Flickr Development Blog,他们在其中谈到了解决此类问题的经验。但最好是自己尝试。

【讨论】:

    猜你喜欢
    • 2016-01-10
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 2018-08-13
    • 2017-04-02
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多