错误显示 - “闪烁延迟任务以使滚动更顺畅”

时间:2016-12-22 13:36:38

标签: angularjs cordova ionic-framework

我正在尝试使用角度来构建离子(1)app。 我不明白为什么我会收到这个警告

“Blink推迟了一项任务,以使滚动更顺畅。您的计时器和网络任务运行时间不应超过50毫秒,以避免这种情况。请参阅https://developers.google.com/web/tools/chrome-devtools/profile/evaluate-performance/railhttps://crbug.com/574343#c40以获取更多信息。”< / p>

使用页面滑块时的其他警告是

“忽略尝试使用cancelable = false取消touchmove事件,例如因为滚动正在进行且无法中断。”

“由于主线程繁忙,'touchstart'输入事件的处理延迟了835毫秒。考虑将事件处理程序标记为”被动“以使页面响应更快”

3 个答案:

答案 0 :(得分:4)

此警告是&#34; normals&#34;。 webview基本上告诉你一些事件被绑定到滚动事件甚至触摸事件,这可能会减慢应用程序的速度。谷歌文档建议例如使用间隔而不是直接在touchmove / drag事件上运行计算或函数,这对于具有webview的移动应用程序来说并不总是可行,具体取决于您尝试完成UX的目的。

此外,如果你使用setInterval,你将不得不使用疯狂的激进时间,如10毫秒,你的滚动/拖动将看起来非常糟糕。 只是忘记这些警告,它们非常通用,很可能是指导方针,但大部分时间都无法避免。

如果您仍想避免警告,这是一个jQuery示例。我们的想法是从事件中捕获任何值,然后在单独的线程上运行计算。

 var int, x, y;

 $('#mydiv').on('touchstart', function(event){
      int = setInterval(work, 20);
 });

 $('#mydiv').on('touchend', function(event){
      clearInterval(int);
 });

 $('#mydiv').on('touchmove', function(event){
      x = event.touches[0].pageX;
      y = event.touches[0].pageY;
 });  

 function work(){
      //how you can do whatever with x y without getting a warning 
 }

答案 1 :(得分:1)

可能不相关,但根据我的经验,基本上你得到这个,因为你的角度/页面仍在密集处理。如果我在导航到新状态后尝试滚动太快,我曾经得到这个警告 - 如果我等了一秒就可以了。我的解决方案是禁用js滚动以释放更多相关功能。查看http://ionicframework.com/docs/api/provider/$ionicConfigProvider/

上的scrolling.jsScrolling(value)

答案 2 :(得分:0)

这些实际上是严重的警告。我在这个警告上花了太长时间。如果有长时间运行的javascript任务,如计时器或网络任务,那么它将被停止,直到你滚动。然后当滚动完成时,这些任务被恢复。所以在执行这些繁重的处理任务时要特别小心。