我正在开发大数据客户端应用程序。服务器语言是Java。在前端中,我使用大量普通 JavaScript,但使用 AngularJS 作为 MVC 框架。
问题
处理大数据分析,一次单个 REST api 响应约为 1.5MB 到 3MB。处理这些数据来构建 DOM 是一件痛苦的事情。
建议,我有哪些选项可以优化页面响应能力”
给我你的具体解决方法!
示例 JSON 可能是:
var data = [
{
prop:val,
prop2: {},
prop3:[
id: val,
prop4: { {}, {}, {}, {}},
prop5: [ [], [], [] ]
]
},
{},
{},
{}
]
一些用例
这里有一个非常基本的示例:http://shekhardesigner.github.io/OuchGrid/
我的一些建议:
“首先,加载 JSON 大约需要 5 到 10 秒。 然后我构建 UI (DOM)”
这两个步骤不可能异步执行吗?例如加载 dom 并等待 ajax 回调?
我不确定是否有办法,因为我缺乏细节,但也许您想在需要时重新考虑加载“较小对象”的整个过程。
考虑以某种方式压缩对象/字符串
这是我现在能想到的前 3 种优化方法。根据您的用例,您也许可以调整这些建议
我希望这有帮助 - 请随时添加反馈
对于我的一项作业,我们使用了自己的解决方案。大多数数据都是集合或数组,因此我们实现了简单的算法来删除所有冗余的属性名称,仅删除一组属性名称和值对象的集合。我们看到大小有了相当大的减少,并且可能在下一个级别上可以使用一些库来进一步解压缩。 同样,只有当我们处理结构化数据时,这才有效,如果数组对象具有不同的结构,则可能需要不同的算法。
像我这样的其他算法建议查看自然压缩技术,例如从 JSON 中删除所有空白,使字段名称更小。
或者,您可以查看像 Protocol Buffers 这样的规范,它可能会产生更小的上传大小。看看https://github.com/dcodeIO/ProtoBuf.js
如果数据处理需要时间并冻结屏幕渲染,您可以尝试使用 Web Worker(适用于最新浏览器)来卸载处理逻辑,主线程/事件循环仍可用于 UI 渲染或响应用户操作。
“首先需要大约 5 到 10 秒来加载 JSON。然后构建 UI (DOM)”
我建议您异步加载 UI 和数据,但在加载适当的数据之前禁止用户执行某些操作。
将数据加载到变量/服务后,请使用前端分页来最大程度地减少浏览器的压力。 JavaScript 可以存储大量数据,但 DOM 很难渲染大量 HTML。
我为我的项目开发了一个库,并且刚刚将其发布到 npm:https://www.npmjs.com/package/api-data-compressor
关键的技术特点是它会扫描数据结构并将所有对象转换为数组(删除属性名称以节省空间)。
在我的项目中,这种方法为大型数据集提供了约 50% 的压缩率:)