Javascript轮询服务器.这会导致堆栈溢出吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Javascript轮询服务器.这会导致堆栈溢出吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1459字,纯文字阅读大概需要3分钟。
内容图文
![Javascript轮询服务器.这会导致堆栈溢出吗?](/upload/InfoBanner/zyjiaocheng/651/c254abd8794b42038dcc4fd2d91dfde2.jpg)
我不太熟悉每个浏览器上每个javascript实现的细节.我确实知道,但是使用setTimeout可以在单独的线程上调用传入的方法.那么在方法内部递归使用setTimeout会导致其堆栈无限期增长,直到导致堆栈溢出?还是会创建一个单独的调用堆栈并在失去焦点时破坏当前帧?这是我想知道的代码.
function pollServer()
{
$.getJSON("poll.php", {}, function(data){
window.setTimeout(pollServer, 1000);
});
}
window.setTimeout(pollServer, 0);
我想每秒钟左右轮询一次服务器,但是不想浪费CPU周期,而使用“阻塞循环”-我也不想设置一个时间限制,即用户在浏览器死机之前可以访问页面的时间.
编辑
使用firebug,我设置了一些断点,并通过查看“脚本->堆栈”面板来看到调用堆栈实际上只是“ pollServer”,并且不会随每次调用而增长.这很好-但是,JS的其他实现是否有所不同?
解决方法:
我不确定是否会导致堆栈溢出,但是如果周期是恒定的,我建议您使用setInterval.
这就是prototype实现其PeriodicalExecuter的方式.
// Taken from Prototype (www.prototypejs.org)
var PeriodicalExecuter = Class.create({
initialize: function(callback, frequency) {
this.callback = callback;
this.frequency = frequency;
this.currentlyExecuting = false;
this.registerCallback();
},
registerCallback: function() {
this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
},
execute: function() {
this.callback(this);
},
stop: function() {
if (!this.timer) return;
clearInterval(this.timer);
this.timer = null;
},
onTimerEvent: function() {
if (!this.currentlyExecuting) {
try {
this.currentlyExecuting = true;
this.execute();
} finally {
this.currentlyExecuting = false;
}
}
}
});
内容总结
以上是互联网集市为您收集整理的Javascript轮询服务器.这会导致堆栈溢出吗?全部内容,希望文章能够帮你解决Javascript轮询服务器.这会导致堆栈溢出吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。