我有一个使用JavaScript setInterval()
来运行数字时钟的应用程序.我想知道它是否有超时或限制它执行此功能的次数.
对于即将推出的node.js项目,我需要定期执行各种内务处理任务.特别是一些任务每毫秒,其他任务每20毫秒(每秒50次),还有其他每秒.所以我考虑使用setInterval(),结果很有趣:许多函数调用都被跳过了.
我使用的基准如下:
var counter = 0;
var seconds = 0;
var short = 1;
setInterval(function() {
counter ++;
}, short);
setInterval(function() {
seconds ++;
log('Seconds: ' + seconds + ', counter: ' +
counter + ', missed ' +
(seconds * 1000 / short - counter));
}, 1000);
Run Code Online (Sandbox Code Playgroud)
有一个长秒计时器和一个短计时器可以使用变量调整short
,在这种情况下为1毫秒.每秒我们打印短周期中预期刻度数与短计数器更新的实际次数之间的差异.
以下是短定时器为1 ms时的行为方式:
2012-09-14T23:03:32.780Z Seconds: 1, counter: 869, missed 131
2012-09-14T23:03:33.780Z Seconds: 2, counter: 1803, missed 197
2012-09-14T23:03:34.781Z Seconds: 3, counter: 2736, missed 264
...
2012-09-14T23:03:41.783Z Seconds: 10, counter: 9267, …
Run Code Online (Sandbox Code Playgroud) 我有一个关于间隔内的AJAX调用的问题.为什么它不起作用,或以它的工作方式工作.
我有这个代码(这个不起作用)
setInterval($.ajax({
//Place code here
}), 2000);
Run Code Online (Sandbox Code Playgroud)
但后来我这样做了
setInterval(function() {
$.ajax({
//Do ajax stuff here
});
}, 2000);
Run Code Online (Sandbox Code Playgroud)
现在它可以工作,但对我来说,这似乎只是我做了一个额外的匿名函数.
我想动态更改setInterval的间隔值.由于setInterval回调函数中存在循环,我正在努力.我在stackoverflow上看到了太多问题.但是没有任何解决方案可以帮助我.如果有人知道答案,那么请举例说明.谢谢.这是我的代码.
<html>
<head>
<script type="text/javascript">
var speed = 10;
function updateSlider(slideAmount) {
speed = slideAmount;
}
function load() {
downloadUrl("points.xml", function (data) {
/* code */
abc();
});
function abc() {
function track() {
/* code */
downloadUrl("points.xml", function (data) {
var xml = data.responseXML;
var points = xml.documentElement.getElementsByTagName("point");
var i = 0;
setInterval(function () {
if (i != points.length) {
alert(speed);
}
i++;
}, 100 * speed);
});
}
track();
}
}
function downloadUrl(url, callback) {
var request = …
Run Code Online (Sandbox Code Playgroud) 随着Windows系统接近49.7天的正常运行时间,内部Windows毫秒计时器接近2 ^ 32.在计算何时触发setInterval或setTimeout事件时,Internet Explorer 8中的错误似乎有算术溢出.例如,如果您在正常运行时间的第49天,并致电
setInterval(func, 86400000); // fire event in 24 hours
Run Code Online (Sandbox Code Playgroud)
将立即调用func,而不是24小时.
如果将足够大的数字传递给setInterval或setTimeout,则可能在25天正常运行时间(2 ^ 31毫秒)后的任何时间发生此错误.(不过,我只在第49天检查过.)
您可以在命令行中输入"net statistics server"来检查正常运行时间.
有解决方法吗?
在JavaScript中,我习惯于能够调用稍后要执行的函数,就像这样
function foo() {
alert('bar');
}
setTimeout(foo, 1000);
Run Code Online (Sandbox Code Playgroud)
这不会阻止其他代码的执行.
我不知道如何在Python中实现类似的东西.我可以睡觉
import time
def foo():
print('bar')
time.sleep(1)
foo()
Run Code Online (Sandbox Code Playgroud)
但这会阻止其他代码的执行.(实际上在我的情况下阻塞Python本身并不是问题,但我无法对该方法进行单元测试.)
我知道线程是为不同步执行而设计的,但我想知道是否更容易,类似setTimeout
或setInterval
存在.
我有一个使用jquery的setIntervall()函数无限滑动图像的网站.
在Chrome 13中调用页面时,我切换到另一个选项卡几秒钟后返回,图像滑动发生得更快,好像它试图保持到原来的状态,如果它没有切换到另一个选项卡.
我该如何解决这个问题?
$(window).load(function() {
setInterval(nextSlide, 3500);
});
function nextSlide(){
offset += delta;
$("#slideContent").animate({left: -1 * offset}, 1000);
}
Run Code Online (Sandbox Code Playgroud)
解:
我选择了jfriend00的第一个建议.现在,当窗口变为非活动状态时,我会关闭计时器.
可以在这里找到这样做的简单代码.
我一直在控制台中看到这个非破坏性异常:
Uncaught ReferenceError: stopme is not defined
Run Code Online (Sandbox Code Playgroud)
(匿名功能)
在我的任何文件中都没有调用stopme的变量,在控制台中进行了完整的搜索.我有多重:
setInterval(function() {
updateMetrics();
}, 1000);
Run Code Online (Sandbox Code Playgroud)
在我的代码中调用,只要其中一个失败,就会显示在控制台中.我也不知道这是否是默认行为,但我也注意到每次使用时设置新的间隔:
var intervalId = setInterval(function() {}, 1000);
Run Code Online (Sandbox Code Playgroud)
intervalId是非连续的,如:console.log(intervalId)
结果是1, 4, 9, 14
.我从控制台手动调用上面的代码,看看为什么我的intervalIds是自动递增的.
这是完整的堆栈跟踪:
Uncaught ReferenceError: stopme is not defined
(anonymous function)
Run Code Online (Sandbox Code Playgroud)
其他图书馆:
bootstrap.js
d3.v3.js
ember.js
handlebars.js
jquery-1.9.1.js
jquery.jsPlumb.js
jquery.timeago.js
require.js
string.min.js
Run Code Online (Sandbox Code Playgroud)
错误仅在Chrome上显示,而不在Firefox中显示.我的Chrome版本是:版本29.0.1547.57
我正在使用NodeJs并需要调用无限功能,但我不知道什么是最佳性能.
递归函数
function test(){
//my code
test();
}
Run Code Online (Sandbox Code Playgroud)
的setInterval
setInterval(function(){
//my code
},60);
Run Code Online (Sandbox Code Playgroud)
的setTimeout
function test(){
//my code
setTimeout(test,60);
}
Run Code Online (Sandbox Code Playgroud)
我想要最好的性能而不会崩溃服务器.我的代码有几个算术运算.
感谢任何优化javascript性能的建议.
我正在学习文档https://facebook.github.io/react/docs/state-and-lifecycle.html之后的反应组件
为什么我们需要在这里使用箭头功能:
this.timerID = setInterval(() => this.tick(), 1000);
Run Code Online (Sandbox Code Playgroud)
为什么我不能说(显然它不起作用)
this.timerID = setInterval(this.tick(), 1000);
Run Code Online (Sandbox Code Playgroud) setinterval ×10
javascript ×8
jquery ×2
settimeout ×2
ajax ×1
callback ×1
ember.js ×1
milliseconds ×1
node.js ×1
performance ×1
python ×1
reactjs ×1
recursion ×1