【发布时间】:2011-05-04 15:17:30
【问题描述】:
由于这是一个巨大的帖子,这里是一个简短的摘要(如果你想回答,请阅读漏洞帖子):
现已实施:
- 网站会提取大量 json(每次大约 30kb 的完整数据集,已压缩)
- 将数据呈现为 html 表格客户端
- 流量过多
- 渲染时间过长
链接到其中一个网站:Sample
我们已经实现了部分数据检索,现在我们需要找到一个解决方案:
- 只渲染更改
- Flash 更新单元格
问题:有哪些网格或其他解决方案可以实现这一目标?
UPDATE:客户端希望一次查看所有可用数据,不分页。
完整说明:
在我们的应用程序中,我们需要在网格中显示一定数量的行(~300-1000)。访问者可以通过点击标题排序(客户端)。此外,每一行都包含多个链接,这些链接可以打开 使用颜色框的 iframe。
数据
- 每 30 秒刷新一次(来自服务器的 json)
- 由多个字段(字符串、整数和小数)组成。
- 不过只有小数点发生变化,这意味着链接(颜色框)也保持不变
- 并非所有数据都显示出来,有些仅用于客户端排序
目前我们正在使用 jTemplates、tablesorter 和 colorbox 的组合来将整个 json 数据集渲染到一个 html 表格中。目前的流程是:
- 从服务器检索数据(完整数据集)
- 使用 jTemplates 将数据呈现为 html
- 初始化表格的颜色框
- 为表格初始化 tablesorter
- 从 #1 重新开始
上述解决方案有效,但存在一些问题:
- 获得大量重复数据 转移。这加起来相当 快速(>5GB/天)
- 数据的渲染需要相当长的时间 一段时间(约 300 毫秒),在手机上更糟
- 每次重新初始化颜色框和表格排序器也需要相当长的时间(约 400 毫秒),在移动设备上也更糟
所以我们的目标是通过 json 传输更新的和新的数据。每行都有一个简单的唯一键 (int),因此可以轻松识别它们。
此外,我们希望刷新更新或新插入数据的容器,作为通知用户发生更改。
我们想到的流程是:
- 从服务器获取json数据(全套)
- 使用排序和渲染网格 初始化彩盒链接
- 从服务器获取 json 数据(仅更新值和新行)
- 更新网格(仅更改值和新行)flash 值容器
- 从 #3 重新开始
所以我们正在寻找的网格需要支持加载数据作为一个洞并且还加载只加载更新的值。
完整的数据集如下所示:
{
[
{
"key":1,
"StaticProperty":"value3",
"PropertyOne":2.85 ,
"PropertyTwo":1.99
},
{
"key":2,
"StaticProperty":"value2",
"PropertyOne":5.66,
"PropertyTwo":7.36
},
{
"key":3,
"StaticProperty":"value3",
"PropertyOne":1.78,
"PropertyTwo":9.31
},
{
"key":4,
"StaticProperty":"value4",
"PropertyOne":1.78,
"PropertyTwo":9.31
},
{
"key":5,
"StaticProperty":"value5",
"PropertyOne":1.78,
"PropertyTwo":9.31
}
]
};
更新数据集看起来像(记住它只会包含更改的值):
{
"updates" : [
{
"key":1,
"PropertyOne":4.88
},
{
"key":2,
"PropertyOne":2.77,
"PropertyTwo":3.88
},
{
"key":6,
"StaticProperty":"value6",
"PropertyOne":7.23,
"PropertyTwo":8.42
}
],
"deletes" : [ 4, 5 ]
};
如您所见,更新可以包含:
- 部分更新(ID #1)
- 每行多次更新(id #2)
- 现有行 (id #3) 没有更新
- 已删除行的 ID 作为简单数组(id #4、#5)
- 新行(ID #6)
我们需要一个网格或其他能让我们能够处理所有提到的操作的建议。
我们已经有办法确保数据永远不会损坏(已经在服务器和客户端处理),所以它真的只是关于显示数据并保持显示最新。
非常感谢所有输入。
【问题讨论】:
标签: javascript jquery json sorting grid