Adobe
产品

首选目的地

  • Creative Suite
  • Adobe Marketing Cloud
  • Acrobat
  • Photoshop
  • SiteCatalyst

教育

  • 适用于学生
  • 适用于中小学
  • 适用于高等教育机构

设计和照片

  • Photoshop
  • Illustrator
  • InDesign
  • Lightroom
  • Elements 系列

视频

  • Adobe Premiere
  • After Effects

Web 开发和 HTML5

  • Dreamweaver
  • 游戏 [在新窗口中打开]
  • 移动应用程序

Adobe Marketing Cloud

  • 什么是 Adobe Marketing Cloud?
  • 数字分析
  • Web 体验管理
  • 测试和目标定位

分析

  • SiteCatalyst
  • Adobe Discover
  • Insight

Experience Manager

  • CQ

目标

  • Test&Target
  • Recommendations
  • Search&Promote

媒体优化工具

  • AudienceManager
  • AudienceResearch

文档服务

  • Acrobat
  • SendNow [在新窗口中打开]

出版

  • Digital Publishing Suite

  • 查看所有产品
业务解决方案

按业务需求分

  • 数字分析
  • 数字出版
  • 文档管理
  • 测试和目标定位
  • 视频编缉和服务
  • Web 开发 [在新窗口中打开]
  • Web 体验管理
  • 查看所有业务需求

按行业分

  • 广播
  • 教育
  • 金融服务业
  • 政府部门
  • 出版
  • 零售业
  • 查看所有行业
支持和培训

我需要帮助

  • 产品
  • Adobe Marketing Cloud
  • 论坛 [在新窗口打开]

我想学习

  • 培训和教程
  • 证书 [在新窗口打开]
  • Adobe 开发人员连接
  • Adobe 设计中心
  • Adobe TV [在新窗口打开]
  • Adobe 市场营销中心
  • Adobe Labs [在新窗口中打开]
下载
  • 产品试用
  • Adobe Flash Player
  • Adobe Reader
  • Adobe AIR
  • 查看所有下载
公司
  • Adobe 工作机会
  • 投资者关系
  • 新闻中心
  • 隐私
  • 公司社会责任
  • 客户展示
  • 联系我们
  • 更多公司信息
购买
  • 在线商店
  • 针对学生、教师和职员
  • 批量许可
  • 优惠酬宾
  • 寻找经销商
  • Adobe Marketing Cloud 销售 [在新窗口中打开]
搜索
 
信息 登录
为何登录?登录后可以管理您的帐户,访问试用版下载、产品扩展和社区区域等。
欢迎,
我的 Adobe
我的信息
我的首选项
注销
隐私权 我的 Adobe
Adobe
产品 分类 购买   搜索  
解决方案 公司
帮助 培训
登录 注销 隐私权 我的 Adobe
Date Date
Qty:
Subtotal
Promotions
Estimated Shipping
VAT
Calculated at checkout
Total
Checkout
Adobe 开发者中心 /

使用 PhoneGap 创建应用程序: 经验教训

作者 Greg Avola

Greg Avola
  • gregavola.me

Content

  • 使用 PhoneGap 不就行了吗?
  • 经验教训: 了解原生设计和开发模式
  • 经验教训: 以 DOM 为生
  • 经验教训: 测试和调试
  • 结束语
  • 下一步阅读方向

创建日期

17 September 2012

页面工具

在 LinkedIn 上共享
书签
打印

Tags

要求

必备知识

必备知识

本文假设您之前使用过 PhoneGap,并且拥有 HTML/CSS/JavaScript 的应用知识。


读者也应该拥有移动操作系统的应用知识,比如 Motorola Android 和 Apple iPhone 操作系统。


其他必要产品

  • PhoneGap
    • 下载 / 了解更多信息

用户级别

中级

乍看上去,PhoneGap 提供了一个非常简单的工具,可以帮助 Web 和移动开发人员使用一个代码库迅速让他们的应用程序进入应用程序商店。 在本文中,我将深入介绍如何通过 PhoneGap 来利用一些技巧,帮助您更快地开发和生成更好的应用程序。 在本文中,我会分享在使用 PhoneGap 为 Android 和 iOS 设备开发流行的社交饮酒应用程序,Untappd 时所学习到的经验。

使用 PhoneGap 不就行了吗?

让我们面对现实吧,我们都知道自己为什么要使用 PhoneGap: 这是市场上最好的工具之一,无需学习新的语言,就可以将移动和基于 Web 设计的应用程序传输到原生的应用程序商店。 与 HTML5 函数相比,PhoneGap API 简单且易于使用。 PhoneGap API 使开发变得更简单,但是,功能强大就意味着责任巨大。

在开发不需要数据连接和提供静态信息的简单应用程序时,PhoneGap 解决方案总是会获得成功。 它做了自己应该做的工作: 它使 Web 开发人员可以使用 HTML5、CSS 或 JavaScript 构建原生应用程序。 但是,当您添加更复杂的 CSS3 元素、大量转换和支持的多种设备(比如 iOS 和 Android)时,它就会让您意识到,您必须消除一些步骤以避免压力过大。

通过 PhoneGap 的开发,我学到了很多技巧,可以让 PhoneGap 应用程序良好执行,甚至优于其原生应用程序。 在开发 PhoneGap 应用程序时,有些 Web 开发人员忽略了一个重要的问题: 我们忘记了,我们的应用程序将在 CPU 和内存能力远低于桌面的设备上运行。

经验教训: 了解原生设计和开发模式

当您第一次看到 PhoneGap 网站时,它向您展示的最强大的功能是,能够将一个代码库发布到多达七个不同的应用程序商店。 虽然这是千真万确的,但了解您打算作为原生应用程序支持的这些设备的设计和开发原则,这是很重要的。

首先且最重要的是,PhoneGap 应用程序的操作和感觉必须与用户对原生应用程序(而不是 Web 应用程序)的期望类似。 例如,不需要用户“等待”执行操作,比如好友请求,或“关注”某种东西。 理想情况下,让用户在您的应用程序中执行他们的业务,而不会显示可怕的“正在加载符号”。 Instagram 在这方面做得很棒,尤其是在发布照片方面。 一旦用户选择了筛选器,Instagram 就开始将照片上传到其服务器。 用户仍然必须输入标题、位置和共享选项,但照片有一个良好的开始。 这使得用户的体验快速且简单。 如果用户决定更改自己的选择, Instagram会在稍后删除照片。 使用这种开发模式,可以帮助让应用程序更像原生应用程序,并且让它工作得更快。

在设计方面,要遵循非常重要的布局模式。 例如,让我们来看看一个名为 foursquare 的流行 Android 和 iOS 应用程序。

iOS
iOS
Android
Android

图 1. iPhone 和 Android 上的 foursquare 应用程序界面

尽管从内容的角度而言,这两个界面看起来非常相似,但在导航和操作栏方面,两者有一个关键的区别。 在 iOS 上,导航栏位于界面底部,而在 Android 上,导航栏位于 foursquare 横幅下面。 该设计模式在许多其他应用程序(包括 Twitter)中都很常见。

在这些平台上改变导航栏位置的主要原因是,在 Android 上,物理或软按钮均位于设备底部。 在底部添加导航栏,可能会导致用户误按到物理或软按钮,并打断他们的体验。

虽然这可能看起来是一个小变化,但设备“持有人”的眼睛真正看到了美观。 作为开发人员,您希望自己的应用程序与该平台上的其他应用程序契合,而不希望自己的应用程序看起来像是为另一个平台构建的应用程序的克隆。 了解目标平台的设计原则,有助于您的应用程序吸引该平台的用户。 您不会希望 Android 用户重新学习如何使用您的应用程序,因为它不符合常见的 Android 设计模式。 虽然这可能需要创建多个代码库,但真正需要改变的只有标题和页脚,而不是内部的内容(内容应该始终保持不变)。 这些类型的用户界面调整可以使您的 PhoneGap 应用程序感觉更像原生应用程序,并向用户提供更好的体验。

经验教训: 以 DOM 为生

DOM,也被称为 Document Object Model,在构建 PhoneGap 应用程序时并不是最好的选择。 制作大量丰富的过渡和特效的缺点之一是必须修改 DOM 的次数。 例如,单击一个按钮并希望在页面上出现一个叠加时,您必须修改 DOM 以显示该元素。 在台式机上,这个过程是无缝的,因为浏览器拥有更多的资源可以使用,并且 Javacsript 渲染引擎也更好。 移动浏览器通常缺乏这些资源。

更让人担心的是,通过移动浏览器(Safari for iOS、Browser/Chrome for Android)和通过其原生 Web View 组件(即所谓的 UIWebView for iOS 和 WebView for Android)运行 Web 应用程序之间的差异。 使用 PhoneGap,将这两个对象组合成一个名为 Cordova WebView 的实体。 在 iOS5 中,Apple 引入了一个 JavaScript 渲染系统,名为 Nitro,它使用 JIT (Just-In-Time) 处理来编译 JavaScript。 这有助于浏览器仅在需要时快速地加载 JavaScript,以加快页面加载速度。 其缺点是,在 UIWebView 中运行的任何第三方应用程序(比如 PhoneGap)都不能够使用此功能,因为它已被禁用。 考虑到这一点,您的 Web 应用程序在原生的 Safari for iOS 浏览器中比在 PhoneGap Embedded WebView 中运行得更快。 这将为大量使用 JavaScript 的应用程序带来一个独特的问题。

此外,开始添加更复杂的 CSS3 元素,或隐藏和显示带有复杂 HTML 结构的页面时,您可能会遇到应用程序变得缓慢的情况。 页面过渡可能会导致屏幕闪烁,并且以不连贯的方式加载内容。 这些类型的操作使用户体验下降,使您的应用程序感觉就像是 Web 应用程序,而不是原生应用程序。

虽然有很多解决方案可以克服这些问题,但我发现有一些解决方案可以帮助您最大限度地减少不连贯的加载,并提高性能:

1.     为浏览器实现硬件加速

由于目标 Web 浏览器必须支持 WebKit(特别是在 iOS 上),因此必须指定浏览器,以便对某些元素添加硬件加速。 要做到这一点,您可以使用 CSS 属性translate3d 。 通常情况下,使用该元素来诠释页面上的元素,但是,如果在使用该属性时没有设置任何参数,那么它指定到应该使用浏览器硬件加速开始渲染内容的浏览器。 例如,您的 HTML 结构如下所示:

<div id=”content-area”>        <div id=”page-1” class=”page”>      …    </div>     <div id=”page-2” class=”page”>      …    </div> </div>

您必须将 translate3d属性应用到div.class元素,如下所示:

div.page {        -webkit-transform: translate3d(0,0,0); }

上面的代码触发 CSS 被硬件加速,这使得 iOS 设备上的滚动和过渡更流畅。 在 Android 上,我看到在使用该技术时有一些奇怪的副作用;我不建议在该平台上使用这个属性。 但是,在 Android WebView(尤其是在较大的设备上)进行渲染,显得比在 iOS 上的渲染更好一些。

注意:该代码只在 WebKit 浏览器中工作。 删除 –webkit- 前缀,使它可以在其他浏览器中工作。

2.    渐变与框架阴影不适合开发人员使用

随着 CSS3 的推出,使用渐变和框架阴影让大部分 Web 开发人员可以创建非常好的视觉元素。 但是,这些属性在移动浏览器上造成了很重的负担。 在我的体验中,我已经看到,从项目行中删除渐变可以显著提高性能。 以“新闻提要样式”谨慎地使用这些属性,不要在您的结构中多次应用它们。 对于按钮和其他一次性元素,您仍然可以使用这些样式,但在提要或您需要经常更改 DOM 结构的区域中不要使用它们。

3.    使用模板并预编译它们!

在构建 Untappd 版本 2 时,我们以 JSON 格式从服务器获取数据,希望建立可重用的模板来快速格式化数据,并将它显示给用户。 我们最终使用了 HandlebarsJS,因为它让我们可以将逻辑添加到模板中,并且将 HTML 模板预编译为 JavaScript 优化的版本,以获得更好的性能。 通过编译,与渲染没有经过预编译的页面所花费的时间相比,我们能够将页面渲染性能提高两倍。

4.    最小化 DOM 结构

在构建 HTML 结构时,大部分 Web 开发人员不需要担心达到 HTML 结构中子节点的数量限制。 但是,在使用移动设备时,您会受到分配给 WebView 的最大内存限制。 不管您相信与否,过大的 HTML 结构可能会导致 WebView 崩溃。 为了减少 HTML 占用空间,一种非常好的方式是在主要结构中减少子元素。

例如,如果您的 HTML 结构如下所示:

<ul>         <li>           <a onclick=”doSomething();”>Stuff</a>         </li> </ul>

您总是可以将结构修改如下:

<ul>         <li onclick=”doSomething();i>            Stuff         </li> </ul>

这样可以节省额外的层次,当然,您可以随时将 onclick换成 ontouchend 让您的代码在移动设备上执行得更好。

当然,这并非您可以对 PhoneGap 应用程序进行改进的完整列表,但这些技巧肯定可以帮助您提高应用程序的性能和可用性。

经验教训: 测试和调试

在构建 PhoneGap 应用程序时,最复杂的任务之一是调试和测试。 使用专门针对移动设计的 Web 应用程序,您能够迅速将补丁推送给用户,但是,在将您的应用程序提交给商店时,更新需要经过审批流程,这可能需要一些时间。 因此,您必须在启动应用程序之前对它进行广泛测试。

考虑到这一点,要测试在手机上运行的应用程序可能会非常困难。 在网络上,Web Insepector 和 Firebug 等工具让您可以看到 XHR 请求,并检查 DOM 元素,但是,在手机上进行测试则有一些挑战性。 幸运的是,PhoneGap 提供了一种很好的工具,可以使调试这些恼人的问题轻松许多。

DOM 和 XHR 检查程序 Weinre,是一个可用于对 PhoneGap 应用程序进行远程调试的工具。 使用 Weinre,您可以看到 XHR 请求,检查 DOM,并执行 JavaScript 分析,以查看何时在应用程序的什么位置出现了重复流程。 为了开始使用 Weinre,只需添加一行简单的 JavaScript 代码到您的 index.html 文件,如下所示:

<script src="http://debug.phonegap.com/target/target-script-min.js#anonymous"></script>

要确保将默认的哈希值(在本例中是 #anonymous)修改为唯一和秘密的某个值,使其他人无法访问该页面,这是非常重要的。 如果您不这样做,可能有未经授权的用户通过 Web 控制台访问您的代码。

一旦您完成了该操作,请浏览到 PhoneGap Debug page。 遵循所列出的步骤,确保包括您之前在文本框中使用的唯一哈希值。 一旦您完成了这步操作,现在就可以使用 Web Inspector 和 XHR 工具,更好地了解 PhoneGap 应用程序到底发生了什么事。 这可以帮助您更快、更高效地解决问题。

结束语

我所讨论的一些挑战可能使构建 PhoneGap 应用程序看起来有些艰巨,但我希望我的经验能帮助您避免一些困难。 事实上,如果遵循设计和开发模式,并使用一些 DOM 性能技巧,很多人甚至不会注意到您使用了 PhoneGap;但很多人会认为它们使用的是原生应用程序,而这正是该平台的目标之一。 当然,专注于构建出色的应用程序,而不是构建出色的 iOS 或 Android 应用程序,这始终是最重要的一点。

下一步阅读方向

为了获得有关 PhoneGap 的更多信息,以及 HTML5 性能技巧,请查看下面的链接:

  • HTML5 Rocks
  • A Cost of a Reflow
  • You Shall Not Flicker!

More Like This

  • 构建通过 Database.com 提供技术支持的 PhoneGap 应用程序
  • 结合使用 Parse.com 和 PhoneGap – 第 2 部分:电话的反击

产品

  • Creative Suite
  • Adobe Marketing Cloud
  • Acrobat
  • Photoshop
  • Digital Publishing Suite
  • Elements 系列
  • SiteCatalyst

下载

  • 产品试用
  • Adobe Reader
  • Adobe Flash Player
  • Adobe AIR

支持和培训

  • 产品帮助
  • 论坛

购买

  • 在线商店
  • 针对学生、教师和职员
  • 批量许可
  • 优惠酬宾
  • 寻找经销商

公司

  • 新闻中心
  • 合作伙伴计划
  • 公司社会责任
  • 工作机会
  • 投资者关系
  • 事件
  • 法律
  • 安全性
  • 联系 Adobe
选择您的地区 中国(更改)
选择您的地区 关闭

North America

Europe, Middle East and Africa

Asia Pacific

  • Canada - English
  • Canada - Français
  • Latinoamérica
  • México
  • United States

South America

  • Brasil
  • Africa - English
  • Österreich - Deutsch
  • Belgium - English
  • Belgique - Français
  • België - Nederlands
  • България
  • Hrvatska
  • Česká republika
  • Danmark
  • Eastern Europe - English
  • Eesti
  • Suomi
  • France
  • Deutschland
  • Magyarország
  • Ireland
  • Israel - English
  • ישראל - עברית
  • Italia
  • Latvija
  • Lietuva
  • Luxembourg - Deutsch
  • Luxembourg - English
  • Luxembourg - Français
  • الشرق الأوسط وشمال أفريقيا - اللغة العربية
  • Middle East and North Africa - English
  • Moyen-Orient et Afrique du Nord - Français
  • Nederland
  • Norge
  • Polska
  • Portugal
  • România
  • Россия
  • Srbija
  • Slovensko
  • Slovenija
  • España
  • Sverige
  • Schweiz - Deutsch
  • Suisse - Français
  • Svizzera - Italiano
  • Türkiye
  • Україна
  • United Kingdom
  • Australia
  • 中国
  • 中國香港特別行政區
  • Hong Kong S.A.R. of China
  • India - English
  • 日本
  • 한국
  • New Zealand
  • 台灣

Southeast Asia

  • Includes Indonesia, Malaysia, Philippines, Singapore, Thailand, and Vietnam - English

Copyright © 2013 Adobe Systems Software Ireland Ltd. All rights reserved.

使用条款 | 隐私权 | Cookies

京 ICP 备 10217899 号 京公网安备 110105010404