Angularjs推迟了日志运行计时器任务

Angularjs deferred log-running timer task(s)

本文关键字:计时器 任务 运行 日志 推迟 Angularjs      更新时间:2023-09-26

构建一个Ionic应用程序时,我突然遇到了一个很难调试的问题,因为浏览器"推迟"了长时间运行的计时器任务,导致我的视图只能在其控制器中执行一次代码(即使显式重新加载了控制器)。

警告是:

推迟了长时间运行的计时器任务以提高滚动的平滑度。请参阅crbug.com/574343。

我追求的:

  • 了解警告及其发生原因
  • 关于如何调试此类警告的任何指导

提前谢谢。

更新我觉得重要的是要注意,虽然我从未收到错误,只是收到警告,这是我出现问题的原因,但我已经回滚到工作版本。

此工作版本仍然会出现警告,但不会影响我的应用程序的运行。

如果你使用$timeout执行任务,你必须停止并销毁它们,否则它们会产生你所说的错误

例如:

var timer = $timeout(
                        function() {
                            console.log( "Timeout executed", Date.now() );
                        },
                        2000
                    );

如果你如上所述启动超时,那么你必须按照以下方式销毁计时器:

                    // When the DOM element is removed from the page,
                    // AngularJS will trigger the $destroy event on
                    // the scope. This gives us a chance to cancel any
                    // pending timer that we may have.
$scope.$on(
                        "$destroy",
                        function( event ) {
                            $timeout.cancel( timer );
                        }
                    );

当函数仅在第一次加载视图时被调用时,我就遇到了这个问题。在控制台中注意到了此警告,但不确定这是否与只调用一次的函数有关。在控制器中,我将函数调用移到"$ionicView.enter"中,每次加载视图时都会调用它。

$scope.$on('$ionicView.enter', function () {
            callMyFunction();
        });

希望这能有所帮助。

听起来你的浏览器中可能有最多的连接。您可能希望将http请求减少为包含10个请求和10个单独http请求的单个请求。

关于你的问题,答案是每个浏览器的最大http请求。

"每个服务器/代理:"

如果我正确地假设了浏览器中的最大并行http连接,这里也回答了这个问题?