对于需要快速刷新数据的应用程序,使用JavaScript轮询服务器的最佳做法是什么?我正在使用jQuery作为前端,使用Java Spring Framework作为后端.
刷新数据的示例可以是非常快速地(每1秒)更新的项目列表.
我正在努力使Backbone.js Collection与服务器上发生的事情保持同步.
我的代码类似于以下内容:
var Comment = Backbone.Model.extend({});
var CommentCollection = Backbone.Collection.extend({
model: Comment
});
var CommentView = Backbone.View.extend({ /* ... */ });
var CommentListView = Backbone.View.extend({
initialize: function () {
_.bindAll(this, 'addOne', 'addAll');
this.collection.bind('add', this.addOne);
this.collection.bind('refresh', this.addAll);
},
addOne: function (item) {
var view = new CommentView({model: item});
$(this.el).append(view.render().el);
},
addAll: function () {
this.collection.each(this.addOne);
}
});
var comments = new CommentCollection;
setInterval(function () {
comments.fetch();
}, 5000);
Run Code Online (Sandbox Code Playgroud)
会发生什么事情,当提取注释时,refresh被调用,相同的注释到底部CommentListView- 这是我对上面代码的期望.
我想知道的是什么是"刷新"视图的最佳方式,而不会失去任何"本地状态".
我是一名软件/硬件工程师,在C和嵌入式技术方面拥有丰富的经验.目前我正在忙着用C#(.NET)编写一些使用硬件进行数据采集的应用程序.现在以下,对我来说,燃烧,问题:
例如:我有一台机器,它有一个用于检测轴最终位置的开关.现在我正在使用USB数据采集模块来读取数据.目前我正在使用Thread来连续读取端口状态.
此设备上没有中断功能.
我的问题:这是正确的方法吗?我应该使用计时器,线程还是任务?我知道民意调查是你们大多数人"讨厌"的事情,但欢迎任何建议!
鉴于以下代码,如何更改它以使得"api/foobar"的get请求每500毫秒重复一次?
import {Observable} from "RxJS/Rx";
import {Injectable} from "@angular/core";
import {Http} from "@angular/http";
@Injectable() export class ExampleService {
constructor(private http: Http) { }
getFooBars(onNext: (fooBars: FooBar[]) => void) {
this.get("api/foobar")
.map(response => <FooBar[]>reponse.json())
.subscribe(onNext,
error =>
console.log("An error occurred when requesting api/foobar.", error));
}
}
Run Code Online (Sandbox Code Playgroud) 我的网页中有一个字段A,当用户编辑时,调用API调用(使用jQuery),更新字段B.编辑后,应每隔10秒调用一次API以再次更新字段B. .我目前这样做使用:
setTimeout(thisFunction, 10000);
Run Code Online (Sandbox Code Playgroud)
问题是每次用户编辑字段A时都会设置此超时,在编辑字段A几次后会导致多次设置超时并且API被多次调用.这使得网站看起来非常紧张.
我想要做的是,每次编辑字段时都设置一个新的超时,无论是用户编辑字段A,还是间隔达到10秒,从而轮询API.换一种说法; 如果字段B未更新10秒或更长时间,则应更新该字段.
最后,如果用户然后单击按钮C,则轮询应该停止.
所以我的问题; 如果该字段B没有更新10秒或更长时间如何运行更新字段B的功能,如何在我想要的时候停止轮询(当用户点击另一个按钮时)欢迎所有提示!
我正在为Android开发游戏.它有很多事情发生但运行得相当顺利.也就是说,直到用户触摸屏幕.
虽然他们触摸它,onTouchEvent被称为(与action = ACTION_MOVE,x = 0和y = 0)大致在一次看似每十毫秒是一个相当高的优先级,因为它绝对抹杀的帧率.一旦触摸结束,帧速率就会恢复到良好状态.
我试过了
onTouchEvent为游戏照常手柄输入onTouchEvent回报true立竿见影onTouchEvent实施这三种情况都存在问题.
有没有遇到过这个?有没有办法降低ACTION_MOVE生成事件的速率,或确保它们仅在实际移动时生成,或者使用仅获取触摸当前位置的轮询方法?或者甚至只是一种完全禁用它的方法?
我需要找到一种方法来更新用它实现的Web应用程序backbone.
用例如下:
我有几个视图,每个视图,或者与此视图相关的模型/集合,需要在不同的时间向服务器发出不同的轮询请求以发现一些更改.
我想知道最通用的方法是什么:
1)实现Traditional Polling Request
2)实现Long Polling Request
3)实现HTML5 web socket
PS:
1)服务器是用PHP编写的.
2)目前我正在寻找一种不使用HTML5 WebSockets的解决方案,因为使用PHP可能并不那么简单.
这是我的简单代码(1)使用Traditional Polling Request.
(1)
// MyModel
var MyModel = Backbone.View.extend({
urlRoot: 'backendUrl'
});
// MyView
var MyView = Backbone.View.extend({
initialize: function () {
this.model = new MyModel();
this.model.fetch();
this.model.on('change', this.render);
setTimeout(function () {
this.model.fetch();
}, 1000 * 60 * 2); // in order to update the view each two minutes
}
});
Run Code Online (Sandbox Code Playgroud)
我进入了这些示例,显示了javascript中的轮询与长轮询,但我不明白它们之间的区别.特别是关于长轮询的例子,它如何保持连接打开?
这就是传统轮询方案的样子:
(function poll(){
setTimeout(function(){
$.ajax({ url: "server", success: function(data){
//Update your dashboard gauge
salesGauge.setValue(data.value);
//Setup the next poll recursively
poll();
}, dataType: "json"});
}, 30000);
})();
Run Code Online (Sandbox Code Playgroud)
这是长轮询的例子:
(function poll(){
$.ajax({ url: "server", success: function(data){
//Update your dashboard gauge
salesGauge.setValue(data.value);
}, dataType: "json", complete: poll, timeout: 30000 });
})();
Run Code Online (Sandbox Code Playgroud)
谢谢!
我正在尝试提高针对ElasticSearch进行测试的套件的性能.
测试需要很长时间,因为Elasticsearch在更新后不会立即更新它的索引.例如,以下代码运行时不会引发断言错误.
from elasticsearch import Elasticsearch
elasticsearch = Elasticsearch('es.test')
# Asumming that this is a clean and empty elasticsearch instance
elasticsearch.update(
index='blog',
doc_type=,'blog'
id=1,
body={
....
}
)
results = elasticsearch.search()
assert not results
# results are not populated
Run Code Online (Sandbox Code Playgroud)
目前解决这个问题的解决方案是将time.sleep调用放入代码中,以便给ElasticSearch一些时间来更新它的索引.
from time import sleep
from elasticsearch import Elasticsearch
elasticsearch = Elasticsearch('es.test')
# Asumming that this is a clean and empty elasticsearch instance
elasticsearch.update(
index='blog',
doc_type=,'blog'
id=1,
body={
....
}
)
# Don't want to use sleep functions
sleep(1) …Run Code Online (Sandbox Code Playgroud) polling ×10
javascript ×5
ajax ×2
backbone.js ×2
jquery ×2
long-polling ×2
android ×1
angular ×1
c# ×1
frame-rate ×1
hardware ×1
observable ×1
python ×1
task ×1
terminology ×1
timeout ×1
touch ×1
wait ×1
websocket ×1