【问题标题】:Timer vs setTimeout计时器与 setTimeout
【发布时间】:2011-02-10 14:55:38
【问题描述】:

flash.utils.setTimeout() 状态的文档:

不要使用这种方法,而是考虑 创建一个 Timer 对象,使用 指定的间隔,使用 1 作为 repeatCount 参数(设置 计时器只运行一次)。

有谁知道这样做是否有(显着)优势?当您只需要延迟 1 个呼叫时,使用 setTimeout 会容易得多。

【问题讨论】:

    标签: apache-flex actionscript-3


    【解决方案1】:

    setTimeout 实际上使用了一个Timer 子类,SetIntervalTimer,它是一个内部类。您可以通过setTimeout(function ():void { throw "booom"; }, 1); 进行检查。您会在堆栈跟踪中看到它。

    因此,我真的看不出有很大的劣势。唯一的区别是,您有 2 个匿名电话,而不是 1 个。 OTOH,在性能关键的情况下,您不应该使用任何一种(除了一个内部计时器)以避免频繁实例化 TimerEvent 对象。

    基本上,我认为这是一个品味问题。 Adobe 决定,AS3 事件系统很牛,所以他们推广它。

    【讨论】:

      【解决方案2】:

      计时器:

      • 为您提供更多控制权 注册更多的事件监听器 接收事件而不是 带 setTimeout 的单个

      • 您可以控制开始时间和
        重复次数(不是很 对 setTimeout 很有用,因为 this
        必须只运行一次,然后运行一次
        延迟考虑即时时间 它被称为)

      • 要写更多行,如果你写得更多 需要用参数来区分 (为此自定义事件类)
      • 使用事件监听器
        as3 中的标准做法。
      • 外观更简洁

      设置超时:

      • 更容易使用

      • 编写更少的代码

      • 参数发送方便;

      我更喜欢 Timer 类,但我看到程序员经常使用 setTimeout。

      另外,如果你使用的是 Tweening 库,有些支持延迟调用

      例如 TweenMax TweenMax.delayedCall(2, myFunction, ["myParam"]);

      对于那些说 setTimeout 已被弃用的人来说,这是没有意义的..

      http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/utils/package.html#setTimeout%28%29

      我相信您在这里看不到任何围绕 setTimeout 的“已弃用”关键字

      【讨论】:

        【解决方案3】:

        setTimeout 在外部 .as 文件中运行良好。

        在课堂上使用这个:

        import flash.utils.*;
        import flash.events.TimerEvent;
        

        【讨论】:

          【解决方案4】:

          据我了解,setTimeout 在 AS3 中已贬值。我在查找 setTimeout 代码的来源时遇到了一些麻烦,但我也相信清除对 Timer 对象的任何引用比使用 setTimeout 更容易(如果我从 AS2 中没记错的话)。

          【讨论】:

            【解决方案5】:

            如果有新的更强大的方法来实现某事,通常会弃用某事。

            是的 setTimeout 在某些情况下更容易设置,但在其他情况下则受到更多限制。

            我会使用 Timer 类,因为通常当某些东西被弃用时,这意味着将来某个时候可能会删除对它的支持,然后您的代码将无法工作。

            【讨论】:

            • 通常是一个很好的推理,但在 Flash 播放器中不太可能发生。 adobe 非常关心向后兼容性和遗留支持。此外,在这种情况下,可以在几行内重写函数。
            • @back2dos,是的,您在 Adob​​e 的情况下是对的,但为什么不遵循一般的良好做法?
            • 除了 Adob​​e 的意见之外,还有什么让计时器比 setTimeout 更好?我同意,Timer 提供了比 setIntervalsetTimer 更多的可能性,但话又说回来,AVM2 字节码提供了比 ActionScript 更多的可能性:D 我认为 setTimeout 是一个有用的功能。如果没有,我会自己写。对我来说,简洁的代码是一种很好的做法,因为这使它易于阅读和理解。因此,虽然我大体上同意,弃用通常需要认真对待,但就 ActionScript 3 而言,我经常觉得这真的只是一个品味问题。
            【解决方案6】:

            问题是,Timer 对象根本不准确,并且会受到帧率波动的影响。阅读http://forums.adobe.com/message/892631。我使用Date 对象创建了自己的计时器(称为RealTimer),它更加准确。我建议也这样做。

            【讨论】:

              【解决方案7】:

              setTimeout 在外部 .as 文件中不起作用。

              【讨论】:

              • 嗨。很高兴在这里见到你 :) 无论如何:你能更详细一点吗? “外部”是什么意思?
              • 外部 .as 文件是指类。有人在这里使用 as3 没有课程吗? PS:我们认识吗?
              • 奇怪。无论是使用 IDE 还是 mxmlc 编译,都非常适合我。 PS:不是个人,而是来自haXe邮件列表。 :)
              • 哦,对不起,错误信息,我自己似乎无法复制它。可能编译器被另一个错误弄糊涂了,给了我这个。仅在 haxe 中进行了 2 年的编程后用于 Flash 项目:P
              • 我只是想在与 Virusescu 交谈后纠正你 :)
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2012-07-26
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多