本节书摘来自异步社区《PhoneGap精粹:构建跨平台的移动App》一书中的第1章,第1.4节为容器而设计,作者 【美】John M. Wargo,更多章节内容可以访问云栖社区“异步社区”公众号查看
1.4 为容器而设计
PhoneGap精粹:构建跨平台的移动App
PhoneGap应用程序是一款运行在客户端的原生应用程序容器中的Web应用程序。正因如此,PhoneGap应用程序中的Web应用程序使用的是HTML5应用程序的结构,而不是传统的基于服务端Web应用程序的结构。接下来就让我们看看这个不同的观点。
1.4.1 传统的Web服务器(Web 1.0)方式
对于传统的Web应用程序,Web服务器承载着静态的HTML页面或者动态页面,然后将这些页面返回给客户端(浏览器)。对于动态页面来说,服务器端的语言或脚本语言通常用于(比如从数据库)获取动态内容,还用于将这些内容在发回浏览器之前格式化为HTML。当浏览器发出一个请求时,服务器会去获取相应的页面和内容,然后将这些内容格式化成HTML(或其他类似的,比如XHTML),最后将这些内容发回浏览器显示。
这里我们假定浏览器不需要对内容对任何处理。浏览器只是请求页面,同时为了返回请求的内容服务器会做许多工作。在浏览器上,应用程序可以利用客户端JavaScript代码,让用户和页面上的内容交互,但通常大多数工作会在服务端完成。
1.4.2 Web 2.0方式
随着Web 2.0的出现,Web服务器的负载有了一个下降,取而代之的是在浏览器中运行
JavaScript代码来请求数据和展示数据。Web服务器向Web应用程序发送了一个基于HTML的封装,随页面一起发送过去的JavaScript代码会动态组织页面的内容区域,根据需要显示或隐藏数据内容。
Web 2.0应用程序之所以会成功主要是因为JavaScript中的XMLHTTPRequest(XHR) API。该API让web应用程序可以异步地向服务器发送请求,并当从服务器获取数据后处理这些数据,而不用打断用户的当前操作。许多PhoneGap应用程序都大量使用XHR与远程服务器交互。
该方式可以支持更多有趣的Web应用——看起来更像原生桌面应用的应用程序。虽然Web服务器还是需要用来承载提供给浏览器的页面和内容,但是几乎不会直接操作数据。Google Maps(http://maps.google.com)或Google Gmail(http://mail.google.com)都是很好的Web 2.0的例子。
1.4.3 HTML5方式
移动设备需要一个稍微不同的方式。虽然Web 1.0和2.0在智能机上可以很好地工作,但对Web 1.0的应用来说,在服务器和设备间需要传输大量的数据。对Web 2.0的应用来说,虽然没有这方面的问题,但是需要不断使用网络。Google甚至为了解决这个问题,发明了一项名为Google Gears(http://gears.google.com)的技术,该技术在客户端提供了一个SQL数据库和其他一些功能,用来保证即使无法访问Web服务器,Web应用程序仍然可以正常工作。但后来,他们停止了这个项目,转而投入帮助起草HTML5的标准。
通过HTML5,Web应用程序可以使用一些新的功能,这些功能在移动设备(或受限于网络连接的设备)上可以更高效地运行。通过HTML5,Web应用程序可以使用客户端的数据库去保存应用程序数据。对移动设备来说,这使得无论在有网络还是无网络的情况下,操作都会变得更简单。此外,HTML5还支持使用manifest(声明)文件,列出Web应用程序会用到哪些文件。当加载了Web应用程序的index文件时,浏览器将读取manifest文件,并且接收该文件中列出的所有文件,并下载到客户端设备中。如果移动设备无法连接到网络,只要manifest文件中列出的文件已经保存在了设备上,那么应用程序通过使用本地保存的数据还是可以继续工作的。
虽然我们需要为Web应用程序特地编写程序才能使用这些HTML5的能力,但该Web应用程序可以在浏览器容器(或在PhoneGap应用程序容器)中独立运行。通常,index.html文件只是应用程序中的HTML文件,同时该应用程序的不同“屏幕”1实际上只是根据需要移入移出的不同
Web开发人员必须反复思考利用这些HTML5能力的Web开发方式。HTML5应用程序在移动设备上应该是可以自给自足2的,而不是向web服务器请求各种信息。
运行在PhoneGap应用程序中的web应用程序就是一个HTML5应用程序。
1译者注:指不同的显示界面。
2译者注:指不需要依赖Web服务器也可以独立运行。