跨平台开发工具Cordova的探索与实践

在当今的软件开发领域,掌握Web技术的开发人员比例日益增加。然而,对于原生移动开发技能的掌握,尤其是能够同时处理Web和原生移动开发的开发者,其比例相对较小。市场对于能够同时在多个移动平台上工作的开发者的需求虽然存在,但由于学习时间和专业定位的限制,这样的人才相对稀缺。跨平台工具,如Apache Cordova,正在逐渐增加这样的开发者数量。

跨平台解决方案概览

在Web浏览器和原生移动操作系统之间,可以列举出三大主要工具:UnityXamarin和Cordova。Unity通常用于视频游戏开发,它最接近原生性能,但需要特定的学习曲线。Xamarin基于Mono项目,对于.NET开发者来说成本较低,它帮助将.NET框架的优势扩展到微软以外的平台。Cordova则允许开发者几乎无需学习曲线,使用与移动Web开发相同的技术来实现移动和多平台应用。

Cordova项目最初是Adobe公司推出的PhoneGap项目,Adobe以其多媒体处理软件套件而闻名,如Photoshop、Illustrator、Premiere和After Effects等。PhoneGap在2011年10月被移交给Apache软件基金会,并在2012年10月成为顶级项目。

2014年5月,微软发布了Visual Studio 2013的Update 2,其中包含了一个名为"Multi-Device Hybrid App"的新扩展,它允许通过新的项目类型和依赖项安装程序更好地将ApacheCordova集成到Visual Studio中。随后,随着Visual Studio 2015 Preview的发布,该扩展被重构并更名为"Tools for Apache Cordova",现在可以通过Visual Studio安装程序的一个选项直接获得。

传统的网站无法绕过短信和电子邮件等标准渠道,通过智能手机吸引客户。Cordova为Web开发者提供了一个以前几乎无法接触的新维度:运行应用程序的设备的功能性。通知、地理定位、振动器、相机、存储等功能,对于面向移动的开发来说可能遥不可及,但对于产品的定位却至关重要,使得产品能够以更有效的方式接触到目标客户。

为了让Web技术在原生环境中使用,Cordova在编译过程中将生成一个应用程序,包含两个主要部分:

  • 集成了WebView组件的应用程序,即内置的Web浏览器
  • 一系列用于嵌入Web应用程序文件的资源

将Cordova的API集成到现有Web页面中所需的代码非常少,只需添加一个在编译后仅可用的虚拟JavaScript文件:

<script src="cordova.js"></script>

最后,可以附加一个特定的事件触发器来检测API是否可用并准备使用:

document.addEventListener("deviceready", onDeviceReady, false); function onDeviceReady() { /* INIT */ }

为了促进使用Cordova跨平台开发,Visual Studio在JavaScript和TypeScript类别下添加了一个新的项目类型。除了初始化开发时的基本文件结构外,IDE还添加了两个新的模拟器。

第一个是全新的,是其小弟的竞争对手:Visual Studio的Android模拟器。现在可以直接从Visual Studio运行和调试应用程序,而无需启动Android SDK的模拟器。改进之一是启动时间比其对应物快得多。此外,还可以模拟一些被模拟设备的API,如加速度计或GPS。

第二个是Apache基金会的产品Ripple。它最初是Chrome扩展,旨在在更快的环境中测试和模拟Cordova的API。Visual Studio除了在Google Chrome窗口中打开它(微软的有趣举措)之外,还不仅如此。一旦启动了模拟器,就可以编辑应用程序的源代码,并看到模拟器更新以吸收通常的重置调试时间。

Visual Studio很快将进一步提供将应用程序部署到物理设备的功能,并允许像本地一样简单地进行调试。目前,仍然存在一个问题,即在物理设备上激活调试模式。但该应用程序确实被部署并启动了。这是一个已知问题,所以不应该等待太久就能解决。Android、iOS和Windows Phone现在都在任何级别的Web开发者的视野范围内,但不仅仅是这些。

Cordova极大地方便了Web开发者的工作,并允许他们在不迷失方向的情况下,首次涉足移动开发环境。顺便说一句,可以保留大部分工作习惯,特别是关于响应式设计,这比为每个期望的分辨率定义"布局"要灵活得多。

然而,需要更加关注动画,通常在JavaScript中实现,以兼容更多的Web浏览器。对于原生应用程序来说,这不再是必要的。可以针对特定的OS版本以确保先决条件,这是在客户端可能使用Internet Explorer 6或7时无法做到的。另一方面,CPU和可用RAM的重要性不如在计算机上那么重要。

因此,应该用CSS过渡替换"内联"JavaScript动画(例如Foundation所做的)。此外,最好使用新的CSS3功能来影响GPU,当这在相关时,以避免"回流"现象。当元素尺寸发生变化时,可以观察到这种现象,这可能会在计算这种变化对页面其余部分的影响时暂时减慢浏览器。例如,使用"transform"指令的过渡(通过"translate")而不是"top"和"left"坐标将更加有效。最后,如果在计算机上优化DOM和JavaScript可能被视为不必要,那么在移动设备上就更加重要了。

例如,这个CSS在更多的Web浏览器上工作,但效率低下:

.slide.inactive { transition: all 0.5s ease-out; -webkit-transition: all 0.5s ease-out; opacity: 0; left: -100%; } .slide.active { position: relative; transition: all 0.5s ease-out; -webkit-transition: all 0.5s ease-out; opacity: 1; left: 0; }

相反,这个将不那么兼容,但性能更好,因为它不会触发回流:

.slide.inactive { transition: all 0.5s ease-out; -webkit-transition: all 0.5s ease-out; opacity: 0; transform: translateX(-100%); -webkit-transform: translateX(-100%); } .slide.active { position: relative; transition: all 0.5s ease-out; -webkit-transition: all 0.5s ease-out; opacity: 1; transform: translateX(0); -webkit-transform: translateX(0); }

为了进一步探索,应该尝试专业的前端框架,如Iconic。值得注意的是他们的一个口号:

性能痴迷
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485