有太多的setTimeout()s好吗?

时间:2011-03-17 14:05:51

标签: javascript jquery

我在我的脚本编写时主要使用Javascript。我有一些脚本每1秒执行几个任务,有些每0.02秒执行一次等等。我的间隔执行任务,如检查ifs,做一些innerHTML,小动画等等。现在我有4个,但我认为它会增加未来;也许我会把自己控制在10以内。虽然它在我的电脑里根本没有滞后。

  1. 一般来说,网站会有好处吗?
  2. 由于它是客户端,显然互联网连接不会出现任何问题,对吗?
  3. 这是一种不好的做法,还是根本不是什么问题?
  4. 另外,我对jQuery有疑问。正常的Javascript和jQuery可以做类似的事情(比如innerHTML和.html()),对吧?鉴于这种情况,我应该更喜欢使用jQuery还是Javascript?

    谢谢。

5 个答案:

答案 0 :(得分:8)

有太多的setTimeout()好吗?:你已经给了自己一个答案太多不好,不管你怎么说。

通常对网站有利:可能不会,记住你不知道你的用户的cpu /浏览器组合,所以你应该建立你的网站,这样它仍然会很好用于计算机速度比你慢的人。一个滞后/无响应的网站是第一个用户将逃离的网站。

既然它是客户端,显然互联网连接不会出现任何问题,对吗?是正确的,除非您在超时时间内进行网络请求。 Ajax每秒调用很少是一个好主意。

这是一种不好的做法,还是根本不是什么问题?糟糕的架构是不好的做法。如果您希望遵循最佳实践,请阅读设计模式。

另外,我对jQuery有疑问。正常的Javascript和jQuery可以做类似的事情(比如innerHTML和.html()),对吧?鉴于这种情况,我应该使用jQuery还是Javascript?使用jQuery为您提供了方便的交叉浏览器兼容性。在大多数情况下,使用像jQuery这样的库的非专家比不使用它更好。

答案 1 :(得分:3)

一般来说,网站会有好处吗? 大多数其他回答者都拒绝,但如果没有更多信息,他们就不可能提出这一要求。此决定特定于您的网站。这可能完全没问题。不要猜测性能。测量事物。修复性能问题,确保它们真正存在,而不是直觉告诉你它们存在的地方。

既然是客户端,显然网络连接不会出现任何问题,对吗? 正确的。

这是一种不好的做法,还是根本不是什么问题? 有很多任务最好用超时回调执行。如果您需要定期执行某些操作,或者经过一段时间后,setTimeout不仅合理使用,而且专门针对这些任务而设计。

答案 2 :(得分:2)

对于你的第一个问题,更多的是你在超时后调用的每个回调中所做的事情。不知道提供更清晰的答案很难。

但请记住,javascript在浏览器中是单线程的,所以如果你经常运行昂贵的操作,它就不会运行良好。如果你想用这个做动画,我强烈建议你先考虑现有的一个库(dojo,jquery,mootools等),如果你发现它们不够,只能自己尝试实现它。已经做了很多工作来使这些库具有高性能,并且你不太可能在第一次尝试时做得更好。

第二个问题:我再次使用该库。对于一个简单的innerHTML,不太可能有太大的区别,但是在一般情况下,像jQuery或Dojo这样的库将有助于覆盖不同浏览器中DOM之间的差异,捕获你不知道(或者想要的)令人讨厌的边缘情况知道)并且可能比你自己的代码更好地测试和支持。让它按照自己的方式工作,然后在需要的时候使用自己的香草JS进行优化。

答案 3 :(得分:1)

1)通常很好:不,通常它会产生处理器负载,这会降低浏览器的速度。但是实际代码会比超时本身更多地影响。但是现代浏览器对10个计时器没有任何问题......;)

2)是的,超时没问题。

3)不,这是进行异步处理的唯一方法。所以这不是一个真正的问题;)

4)与innerHTML和.html()(以及其他jQuery函数)的区别在于jQuery具有更好的跨浏览器实现。它知道某些浏览器的怪癖并且能够规避它们。对于简单的问题,简单的JavaScript是完美的(并且带宽和处理能力更便宜)。但是对于更复杂的脚本,一旦你选择使用jQuery,为什么不使用它呢。 ;)

答案 4 :(得分:0)

使用Jquery - 少写,多做

你可以拥有如此多的功能,效果,插件将帮助你节省编码时间。

当您使用javascript或jquery效果开发网站时,您将期望用户应该拥有更新的浏览器和系统。

你的功能不会起作用,即5。 :)

因此,根据我的理解,添加超时和js功能不会影响性能。

http://api.jquery.com/delay/

http://api.jquery.com/toggle/

http://api.jquery.com/html/

使用jquery api函数并开发自己的...而不是使用插件。