Cordova iOS 应用程序,从后台模式返回后的页面性能问题

Posted

技术标签:

【中文标题】Cordova iOS 应用程序,从后台模式返回后的页面性能问题【英文标题】:Cordova iOS app, page performance issues after coming back from background mode 【发布时间】:2014-05-26 18:12:59 【问题描述】:

我使用 Cordova 编写了我的 ios SPA,它遵循以下机制

$$.ajax(
    type: 'GET',
    url: 'example.html',
    dataType: 'text',
    cache : true,
    async: true,
    success: function (response) 
         // Attach some handlers to elements.
         // There are bunch of closures here
    ,
    error: function (xhr, type) 
         // Load previous page
    
);

在全球范围内,我正在添加如下委托的事件处理程序

$(document).on('tap', '.element', function()
    // Do some actions
);

应用程序第一次启动时运行流畅,但是当应用程序从后台模式返回到前台时,我可以看到以下问题

    滚动很慢,就像我不给-webkit-overflow-scrolling : touch 即使我没有太多要显示的数据,在模板之间切换也很慢。 在恢复时,我正在获取移动设备的联系人,而让他们的应用程序被阻止,我无法点击任何元素。

这些问题的原因是什么,我知道我有很多问题导致了问题,但无法弄清楚。请帮我解决这个问题。

【问题讨论】:

你有没有想过这个问题?有同样的问题。从后台模式再次打开应用程序后,它运行超慢。多次打开和最小化有时会修复它。 @dubbelj 不,我找不到解决方案。后来我还添加了清除相机临时内存..仍然没有帮助 【参考方案1】:

不确定这是否适用于您,但我的 Cordova 应用程序也有类似的问题。这是一款使用requestAnimationFrame进行更新的游戏。我在 HTML5 游戏开发留言板上找到了this thread,它建议在 Cordova 应用程序进入后台时停止任何更新循环,然后在应用程序回到前台时恢复更新循环。

他们的代码示例(当然,根据你的框架变化):

document.addEventListener("pause", function() 
    game.paused = true;
    game.raf.stop();
, false);

document.addEventListener("resume", function() 
    game.paused = false;
    game.raf.start();
, false);

修复有效:不再减速。 YMMV。

【讨论】:

以上是关于Cordova iOS 应用程序,从后台模式返回后的页面性能问题的主要内容,如果未能解决你的问题,请参考以下文章

Cordova katzer 插件后台模式在 iOS-9 上不起作用

Phonegap / Cordova 在后台 IOS 一段时间后停止音频

Cordova/Phonegap iOS - 应用程序发送到后台后更改了 html5 输入文本类型

iOS:应用程序从后台返回后访问 EAOutputStream 时的 SIGPIPE

iOS - UIToolbar 从后台返回后调整大小

对于 cordova Push Plugin,如何将 iOS 应用从开发模式更改为分发模式