在我正在构建的网络应用程序中,我有两个松散相关的代码,每两秒钟在两个独立的计时器中运行。
我正在寻求优化Javascript,是否值得将这两个定时器合并为一个或者仅仅是顶部?
实际上,我是否会通过将两个1秒的间隔合并为一个1秒的间隔来增加任何性能(考虑到我们不知道访问者正在运行什么类型的系统)?
据我了解,JavaScript是单线程的,因此发生的事情越多,这些事件就越多,并阻止其他事情发生(特别是计时器)。我只是不知道每秒运行一个微不足道的计时器是否是一个问题。
保持两个定时器分开的原因纯粹是代码可读性,这在您控制硬件的服务器端很好,但我不知道我的访问者将运行什么类型的浏览器或硬件。
感谢。
答案 0 :(得分:3)
就可以完成的整体操作数而言,不会有可衡量的差异。但是,在保持多个计时器时,可能存在感知的性能优势。您在单个计时器迭代中同步运行的代码越多,所有DOM更新和某些类型的用户交互“停止”的时间就越长。通过将它们分成多个计时器,您可以在计时器迭代之间进行其他更新,因此用户可以获得“更流畅”的体验。
在这种情况下,即使是感知性能也不会有差异,所以无论哪种方式使代码组织更简单,我都会这样做。
答案 1 :(得分:1)
如果性能确实存在问题,您可以创建1个计时器,例如使用它来调用这两个函数:
function update()
{
A(); //Do your first task
B(); //Do the second
setTimeout("update()", 1000);
}
update();
但是,你有多确定瓶颈在这个计时器内?首先尝试测量,不要优化应用程序的错误部分。
答案 2 :(得分:1)
我敢打赌,你可以通过消除JS级别的时钟处理来提高性能。您肯定不会降低性能,并且只运行一个计时器,我认为如果不是可读性,您将增强代码可维护性。在我正在使用的应用程序中,我有一个计时器运行来处理三个任务:一种特殊的滚动,更改可能300个单元格的背景图像,并检查是否有时间刷新页面并发出AJAX请求如果是这样。那个计时器以1/10秒的间隔运行,事情很紧张,但是代码可以通过所有这些工作,偶尔会有一个时钟滴答在前一个时钟之上。
所以我怀疑你在1秒的时间间隔和一个嘀嗒声处理程序中会遇到任何麻烦。