【问题标题】:Feedback on practical limitations for JSON?关于 JSON 的实际限制的反馈?
【发布时间】:2012-06-22 23:29:42
【问题描述】:

我正处于应用程序设计的关键决策点。它是一个 ASP.NET Web 应用程序,它使用 REST 来请求有关各种产品的信息。某些产品具有不同的 ProductID,具体取决于它们的属性/变体。例如,用户可能对 Rogaine 感兴趣。关于 Rogain 的 REST 请求可能会返回包含多个变体的响应 - 1 个月的供应量、3 个月的供应量或 4 个月的供应量。这些变体中的每一个都有不同的 ProductID、不同的正常价格、不同的销售价格和许多不同的属性。每个产品都有一组不同的“功能”、不同的图像等。每个产品的属性数量可能非常多。

在大多数情况下,只有几个产品变体。有时半打,有时一打或两个。在这些情况下,JSON 可以轻松处理我的要求。

但以连衣裙为例。它可能有几十种颜色可供选择。它也有 6 种不同的尺寸可供选择。您不希望在它们自己的页面上显示这些中的每一个。在单个页面上显示此产品并呈现这些尺寸和颜色选项供用户选择更加用户友好。也许他们想订购红色的小号。

在上面的示例中,有近 100 种选项组合。在这一点上,我认为 JSON 对我来说是一个不切实际的选择。对于每个独特的组合,都有多个图像链接(每个图像以不同的颜色显示产品)。每个产品都有标价、常规价格和销售价格,节省的金额。每个都有运输属性。每个都有自己的功能列表,可以是每个产品的文本段落。

好的,我的意思是 - 这是要填充到 JSON 字符串中的大量数据,当颜色或大小发生更改时,查找详细信息会有延迟。

我喜欢亚马逊提供选择的方式。这是这种情况的链接:

http://www.amazon.com/American-Apparel-Jersey-Chemise-Small-Navy/dp/B003ILSHQ2/

我查看了源页面,没有看到他们在客户端存储每个产品的详细信息的位置。如果您将鼠标悬停在每个颜色样本上,您会看到页面上的所有细节都发生了变化。价格、运费、大图、功能。几乎一切都在改变。

我偶尔会看到“正在加载...”指示器,但在大多数情况下,它的速度非常快,以至于您看不到任何客户端/服务器通信的迹象。

他们是如何在不完全重新加载页面并且不将这些信息存储在客户端上的情况下做到这一点的?他们用的是什么技术,有人知道吗?

相信我,每次更改产品变体时来回发送另一个 REST 请求的成本太高了。在我的第一个 REST 响应中,我已经拥有每个产品的 ALL 数据。数据不在我的服务器上或我的控制范围内,我真的不想将其保存在我的服务器上。

由于我已经拥有所有数据,我想将其存储起来,以便像亚马逊一样使用它,但我想将其交给客户。使用 JSON 字符串是完美的,在大多数情况下,我可以......但不是有效/高效。

有没有一种方法可以索引 JSON 字符串以使其更快地处理大量数据? JSON 是不是太多了?我还可以在 JQuery/Javascript 中使用哪些其他选项?

【问题讨论】:

  • 听起来更像是如何组织数据的问题,而不是数据量的问题。亚马逊上的示例将数据存储在 js 变量中。以colorImages对象为例
  • 我也考虑过。将数据分解为对象。是的,您肯定会看到他们将一些数据存储在变量中的位置,但是该产品有 77 种独特的组合(5 种尺寸和 21 种颜色)。我没有找到任何有 77 个不同产品 ID 的对象。我找不到任何具有一堆价格或一堆运输选项的物品。图片,是的。但是其中很多不在客户端页面中-据我所知。我花了好几个小时看着它玩。
  • 有很多方法可以处理它,如果不查看数据以及 UI 需要如何工作,就很难评估
  • 该链接演示了我希望 UI 如何工作。真的,差不多就是这样。至于查看数据,上面的链接是一个由大约 100k 大小的复杂 XML 文件创建的页面。我认为您最初的评论是有价值的,它让我更加认真地考虑多个对象。尺寸/颜色选项(属性)决定了产品 ID。一旦确定了产品 ID,它就可以用作每个对象的键 - 定价、运输、图像等。我有点喜欢这样,并且认为它比将所有数据放在一个对象中要快得多。
  • 您对 json 的大小完全反应过度,您的问题更多地与如何构建数据有关

标签: jquery asp.net json


【解决方案1】:

我目前正在编写一个应用程序,我从各种来源获取 JSON 负载,然后将它们存储在 localStorage 中。它们是一组 Facebook、Twitter 和 RSS 订阅源。我通过应用程序分配的唯一 ID 构建提要索引,并将其存储为一个数组,每个 ID 都与一个表示类型的字符串相关联,即 FBK/TWI/RSS 和一个带有提要标题的字符串。

然后,我为每个提要存储一个数组数组,其中包含从它们获取的帖子的数据。

使用 5Mb,这是一个可行的设置。如果您需要存储的数据不超过这个值,我可以想象它不会,它也适用于您。在更改页面时,您可以清除存储空间并下载您的下一个产品对象。

很难想象一个 50kB 的对象会超过 JSON + localStorage 的组合能力 :-) 虽然我确信我即将被告知为什么我错了哈哈!

【讨论】:

  • localStorage 是如何操作的?我熟悉“本地存储”术语,但不认为我处理过 localStorage。这和ASP有关系,还是JQuery/JS?
  • 它是 JavaScript。在 Google 上搜索 localStorage - 太棒了。
  • 可以建立一个 php->localStorage 链接,所以我可以想象如果由于某种原因 JS + JSONP 对你来说还不够的话,也可以用 ASP 做同样的事情......跨度>
  • 我肯定会阅读 localStorage。听起来很方便。虽然我真正的问题是根据属性/变量确定 ProductID。似乎需要很长时间才能为选定的尺寸/颜色解析一个 50k JSON 字符串,这样我才能获得产品 ID。我相信多个对象会解决这个问题。然后我可以使用产品 ID 作为每个对象中的一个键来查找其余的详细信息。
  • 是的,这就是我在回答中的意思。当它到达时解析它以构建产品 id 的索引,然后将每个产品的属性存储在它自己的键中,由它的 id 命名。或者根据大小或颜色创建多个索引。这都是关于 localStorage 和索引的。 :-p
【解决方案2】:

charlietfl 最好地回答了我的问题,但我无法将他的回答标记为答案,因为他没有发布答案,只是发表评论。谢谢charlietfl。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    • 2011-02-10
    • 2011-02-20
    • 1970-01-01
    相关资源
    最近更新 更多