我正面临一个问题,并认为我找到了一个有效的解决方案。 但只是为了确保我愿意面对公众评论家。
我有一个可以触发ajax调用的小应用程序。
这些电话可能需要一段时间才能回来。
所以为了避免我以为我可以:
这是我的代码:
function bob(i) {
var me = this;
if (this.isFetching === undefined) {
this.isFetching = false;
}
if (this.isFetching) {
this.nextFetch = i;
return;
} else {
this.isFetching = true;
}
yourFavoriteAjaxCallerMethod({
url: 'http://this_server_does_not_exist.net/this.is?an=example',
data: {
json: JSON.encode({
bob: i
}),
delay: 2
},
onSuccess: function (response) {
console.log(response.bob);
me.isFetching = false;
if (me.nextFetch !== undefined) {
var nextFetch = me.nextFetch;
delete me.nextFetch;
bob(nextFetch);
return;
}
alert(response.bob);
}
}).send();
}
为了澄清所有这些,我已经制作了一个应该不言自明的工作jsFiddle:http://jsfiddle.net/LhermitteG/L8kqa/
到目前为止,一切运作良好,这很好,但我的问题是:
我做得对吗?
有关于此的设计模式吗?
如果我做错了,那有什么不好?
我怎样才能改善它?
我错过了什么吗?
你知道我...我总是想念一些事情:(
是的,我知道我有不安全问题,我应该解决......
- * 我确定这是一种真正的疾病,它必须是,它是真的,我已经看过它了!
答案 0 :(得分:2)
对于减少事件,你谈论的是去抖动。 http://benalman.com/projects/jquery-throttle-debounce-plugin/有一个jquery debounce方法,http://underscorejs.org/#debounce有自己的实现。
问题的第二部分在自动填充中很常见 - 在一般搜索中,用户首先键入较少的字符,从而导致更大且通常更慢的响应。当他们输入更多信息时,查询会更长,但响应速度更快,因为搜索查询返回的匹配次数更少且有效负载更小。需要确保最后响应的软件模式是相关标识符模式(163),我认为最好在此处提供:http://www.slideshare.net/kevinhakanson/implementing-messaging-patterns-in-java-script-using-the-openajax-hub - 请参阅幻灯片45。
如果这看起来太棘手,请接受最后一个请求,并在javascript中将相关的(消息)id存储到回调处理程序中,或者如果您可以从服务器回显它,这对于映射一对一请求是理想的。如果有任何请求返回,请检查他们是否有最新的(消息)ID,否则应该安全地忽略它们。