频繁更新主动.js的数据
frequent data update for ractive.js
我正在考虑重写使用纯jQuery的传统应用程序。它呈现通过websocket获取的日志数据,它通过删除旧记录并附加新记录仅显示最后100条记录。
因为渲染速度很重要,我首先尝试渲染随机传入的数据,而 Ractive 比我们的 jQuery 代码慢两倍。根据基准测试,jQuery在15秒内呈现1000条记录,Ractive的版本在30秒内呈现。(我们的后端代码以 0.01 s 的延迟推送每个事件)
因此,我想知道是否有任何调整设置?我使用的代码很简单:
var LogApp = Ractive.extend({
template: '#items',
init: function() {
var self = this;
socket.bind("logs", function(data_raw) {
var data = JSON.parse(data_raw);
if (self.data.items.length > 100) {
self.pop('items');
}
self.unshift('items', data);
});
}
});
var ractive = new LogApp({
el: react,
data: {
items: []
}
});
<script id='items' type='text/ractive'>
{{#each items:i}} {{>item}} {{/each}}
</script>
<script id='item' type='text/ractive'>
<tr>
<td>{{id}}</td>
<td>{{log_level}}</td>
<td>{{log_message}}</td>
</tr>
</script>
使用反应式0.7
,性能现在更好。它在 ~11 秒处执行,每个项目约为 10 毫秒(见 http://jsfiddle.net/aqe53ocm/)。
您也可以尝试使用merge
而不是两个操作,pop
和unshift
:
var copy = self.get('items').slice();
if (copy.length > 100) {
copy.pop();
}
copy.unshift(data);
self.merge('items', copy);
请参阅 http://jsfiddle.net/56hfm4bt/。
例如,打开开发工具的时间会影响时间,因为它是 console.time 记录每个项目,所以尽量不要。
对于好奇的人来说,0.8
中有一些变化,这将使每件商品最多~1ms
。
相关文章:
- 如何使用 php 会话变量作为 Angular Js 数据
- DC.js数据表没有按应有的方式显示
- D3.JS数据映射国家名称变量
- 向Graph中的所有d3.js数据点添加唯一链接
- Vue.js 数据对象不适用于某些 lodash 函数
- 如何在 PHP var OpenWeatherMap 中获取第二行 js 数据
- 为knockout.js数据绑定加载多个远程数据源
- 将JS数据发布到页面B
- 页面加载前的Angular JS数据加载
- 如何在ajax请求周期性自动刷新时使用knockout.js数据绑定
- D3.js数据组和转换
- 在href跳转到另一个html元素之前,执行Knockout.js数据绑定:点击函数
- js数据:;none”;以及“;注入“;对于DS“;reapAction”;配置选项
- JS:数据href中指定的链接在转盘中不起作用
- 挖空 JS - 数据绑定多个值
- EXT JS : 数据存储过滤器功能不起作用
- Google Analytics(分析)在淘汰赛中推送跟踪事件.js数据绑定
- 解析 XML 到 js 数据,如何访问特定标记
- 显示带有角度 js 数据绑定表单的引导框
- JS数据类型说明