【问题标题】:Fine-tuning HTML5 Phonegap app微调 HTML5 Phonegap 应用程序
【发布时间】:2012-09-05 09:49:56
【问题描述】:

已经成功构建了一个 HTML5 应用程序。以下库已用于此目的:

  • jquery.mobile-1.1.1.min.js
  • jquery.mobile-1.1.1.min
  • lawnchair.js

一切都很好用Phonegap包裹它cordova-2.0.0

但是已经注意到应用程序很慢。

我的应用程序实际上执行 ajax 请求获取 Json 并加载 UI(主要是 listviews

是否有任何性能改进技术可以让我的应用程序运行得更快?

还有什么工具可以测试吗?

目标平台:AndroidiOS

编辑

注意到的一件事是应用程序的缓存大小在每次 clickpage 转换时都会增加(达到 MB 的时间).. 虽然禁用了 ajax 缓存.. 我需要处理其他事情吗?

【问题讨论】:

  • 您为哪个移动平台创建了 Cordova 版本?因为性能还取决于浏览器的渲染速度。与大多数 Android 浏览器相比,Safari 的渲染速度稍快。
  • @AzizShaikh:主要针对 Android>2.2 和 iOS ..缓存有什么关系吗?我可以看到每次 ajax 调用后缓存都会增加?
  • @Aziz Shaikh:“略”是轻描淡写。在 Chrome for Android 之前,我们可以谈论 Html5 Canvas 的 1/10 性能比。
  • 写了一些技巧来充分利用您在 webview 应用程序中获得的信息:stackoverflow.com/questions/13904315/…。希望对您有所帮助。

标签: performance html cordova jquery-mobile


【解决方案1】:

您可以通过以下方式提高应用程序的速度:
1.使用您项目中包含的 js 的缩小版本。
2.避免使用更大尺寸的图像。使用与 Web 兼容的 PNG 文件调整它们 优化图像 使用 CSS 精灵表

   .icon {
      width: 14px; height: 14px;
      background-image: url("glyphicons-halflings.png");
    }
    .icon-glass {
      background-position: 0 0;
    }
    .icon-music {
      background-position: -24px 0;
    }
    .icon-search {
      background-position: -48px 0;
    }

使用正确的图片尺寸(不要在 HTML 中缩放图片) 在可扩展的分布式系统(即 S3)上托管映像 避免图像出现 404

<img src="{{pic}}" onerror='this.src="nopic.jpg"'/>


3. 避免使用过多的 CSS.Limit Shadows and Gradients 链接 box-shadow,border-radius,gradients,text-align 尝试禁用一些减慢它的 CSS(Simon MacDonald 的想法)。在您的 jquery mobile .css 文件中,将其添加到底部:

* {
text-shadow: none !important;
-webkit-box-shadow: none !important;
-webkit-border-radius:0 !important;
-webkit-border-top-left-radius:0 !important;
-webkit-border-bottom-left-radius:0 !important;
-webkit-border-bottom-right-radius:0 !important;
-webkit-border-top-right-radius:0 !important;
}


4. 使用 CSS 过渡 + 硬件加速 使用原生滚动
5. 如果您使用任何 Live url 来获取 JS,最好下载它们并在本地使用。
6. FastClick FastClick 是一个简单易用的- 使用库,用于消除移动浏览器上物理点击和点击事件触发之间的 300 毫秒延迟。(jjsquared 的想法)

7. 使用 Slpash 屏幕。
8. 仅在必要时避免使用框架。尝试做出响应式设计。
9. 不要在服务器上生成 UI。在客户端用 JavaScript 创建 UI
10. 尽量减少回流

  • 减少 DOM 元素的数量。
  • 在“离线”之前尽量减少对 DOM 更新元素的访问 重新插入 DOM。
  • 避免在 JavaScript 中调整布局

$("#header a.back").on("click", clickHandler);
$("#header a.back").css("color", "white");
$("#header a.back").css("text-decoration", "none");
$("#header a.back").attr("href", "#");

快速

var $backButton = $("#header a.back");
$backButton.on("click", clickHandler);
$backButton.css("color", "white");
$backButton.css("text-decoration", "none");
$backButton.attr("href", "#");


11. 避免网络访问 不要制作依赖网络的应用程序来获取内容

$.ajax({url: "services/states"}).done(function(data) {
    states = data;
});

使用缓存静态数据本地存储、数据库和文件

$.ajax({url: "slow/feed"}).done(function(data) {

});

快速

dataAdapter.getItems().done(function(data) {

});


12. 不要等待数据显示 UI

// Display view
displayView();

// Get data
$.ajax({url: "product/101"}).done(function(product) {
    // Update view
});

【讨论】:

    【解决方案2】:

    如果你想让它在 Android 上更高效,你应该禁用一些 CSS:

    https://stackoverflow.com/a/12081339/41679

    【讨论】:

    • +1 感谢您的提示。它确实提高了性能,但注意到cache 应用程序的大小在每次点击和页面转换时都会增加(以 MB 为单位的时间) .. 虽然禁用了 ajax 缓存.. 我需要处理其他事情吗?
    • 抱歉,我尽量避免使用 JQM。
    • 谢谢,请列出除 JQM 以外的替代方案。我的应用程序非常简单,动画不多。仅用于处理在线数据的商业目的。
    • 好吧,您可以使用自己的 CSS 或使用 Dojo Mobile。 Sencha、Kendo UI、XUI、jqTouch、Zepto.js 等
    • 感谢您提供的信息,但我认为我们目前无法使用其他框架更改应用程序。肯定会为我的其他 rprojects 采纳你的建议.. 但是任何关于为什么缓存增长如此之多的提示,这至少会让我暂时解决问题。
    【解决方案3】:

    有一种称为预取的机制​​,它会在您点击页面之前加载页面。所以重定向更快。但是您正在使用更多传输。

    它是这样使用的:

    <a href="prefetchThisPage.html" data-prefetch> ... </a>
    

    检查这个网站: http://jquerymobile.com/test/docs/pages/page-cache.html

    【讨论】:

    • 感谢您的提示...我基本上是动态加载列表视图,甚至使用 mobile.changePage 加载页面和内容。data-prefetch 对我的情况有帮助吗?
    【解决方案4】:

    要提高点击性能并避免移动浏览器原生内置的 300 毫秒浏览器延迟,您应该使用 FastClick 等库。这将大大减少 mobile.changePage 调用之间的延迟。

    https://github.com/ftlabs/fastclick

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多