【问题标题】:Is having too many setTimeout()s good?有太多的 setTimeout() 好吗?
【发布时间】:2011-07-17 10:38:52
【问题描述】:

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

  1. 一般来说,它对网站有好处吗?
  2. 既然是客户端,显然互联网连接不会有任何问题,对吧?
  3. 这是一种不好的做法,还是根本不是什么大问题?

另外,我有一个关于 jQuery 的问题。有些事情普通的 Javascript 和 jQuery 可以做类似的事情(比如 innerHTML 和 .html()),对吧?鉴于这种情况,我应该更喜欢使用 jQuery 还是 Javascript?

谢谢。

【问题讨论】:

标签: javascript jquery


【解决方案1】:

一般来说,这对网站有好处吗? 大多数其他回答者都说不,但如果没有更多信息,他们不可能提出这个要求。此决定特定于您的站点。可能完全没问题。不要猜测性能。衡量事物。解决实际存在的性能问题,而不是您的直觉告诉您它们存在的地方。

既然是客户端,显然互联网连接不会有任何问题,对吧? 正确。

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

【讨论】:

    【解决方案2】:

    使用 Jquery - 少写,多做

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

    当你开发一个带有 javascript 或 jquery 效果的网站时,你会期望用户应该有一个更新的浏览器和系统。

    您的功能无法在 ie 5 上运行。 :)

    所以根据我的理解,添加超时和js函数不会影响性能。

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

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

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

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

    【讨论】:

    • 我自己做事而不是插件的好处。谢谢!!
    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

      setTimeout() 太多好吗?:你已经给自己的答案是too many不好,不管你说什么。 p>

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

      由于它是客户端,显然互联网连接不会有任何问题,对吧? 对,除非您将网络请求作为超时的一部分。每秒调用一次 Ajax 并不是一个好主意。

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

      另外,我有一个关于 jQuery 的问题。普通的 Javascript 和 jQuery 可以做类似的事情(比如 innerHTML 和 .html()),对吧?鉴于这种情况,我应该更喜欢使用 jQuery 还是 Javascript? 使用 jQuery 可以为您提供方便的跨浏览器兼容性。在大多数情况下,对于非专家来说,使用 jQuery 之类的库比不使用它要好。

      【讨论】:

      • 如果我在 setTimeout 上停留了 30 分钟会怎样……这会使浏览器过载吗?对服务器有影响吗?倒计时在哪里进行?
      【解决方案5】:

      1) 一般好:不,一般来说它会造成处理器负载,从而减慢浏览器的速度。但这将更多地受到实际代码的影响,而不是超时本身。但是现代浏览器对 10 个计时器没有任何问题... ;)

      2) 是的,超时没问题。

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

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

      【讨论】:

        猜你喜欢
        • 2012-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-23
        • 1970-01-01
        • 2019-09-11
        相关资源
        最近更新 更多