构建javascript对象而不冻结

时间:2012-06-14 16:57:03

标签: javascript freeze

我目前正在开发一个管理面板,用于在图表中添加和删除顶点。 我有三个大的“网络”图 - 每个大约500个节点,我加载和构建没有问题。 现在,HTML5中只有一个以图形方式显示。为图形创建所有HTML5对象非常耗时(大约5秒或者其他)。图表可能会在未来增长,而这一时间可能会增加。在构建图形UI时,网站没有响应,我正在尝试解决这个问题。 我使用了'setTimeout',但没有使用预期的结果。

我想知道是否可以在外部文件中构建一个javascript-Object,然后可以使用ajax调用它?请注意,我的构建对象来自javascript函数和基于HTML5!

谢谢。

2 个答案:

答案 0 :(得分:1)

我对这个问题的假设是: 1)您正在获取数据而没有任何问题 2)这是HTML中的渲染导致速度减慢。

DOM不是世界上响应最快的东西。这听起来很奇怪,但实际上构建一个巨大的HTML字符串非常快,然后通过调用div.innerHTML或$('#graph')来设置它.html()。

原因是一旦构建了字符串,复杂的字符串处理和DOM操作就会发生在浏览器中,该浏览器是用高度优化的C或C ++编写的,而不是javascript引擎。

另一个选择是将渲染拆分为多个部分,并尝试使用setTimeout“生成”其他事件。

通过这种方式,您可以一次遍历500个节点50并调用setTimeout(next,0)继续接下来的50个节点。这样可以在做太多工作之前处理其他事件。

一个副作用可能是图表分阶段显示,因为setTimeout将允许DOM在继续之前呈现该部分。

答案 1 :(得分:0)

您可以使用nodejs在服务器上运行处理器密集型代码,并通过简单的ajax调用返回JSON结果。

如果没有看到任何代码,很难详细说明如何实现这一点。但是如果该对象已经在JS中构建,那么卸载到节点并不困难。

也许看看这个答案,了解如何使用节点创建简单的服务器响应: Basic Ajax send/receive with node.js