Native APP与Web APP的技术融合已经逐渐成为一种趋势,使用标准的Web技术来开发应用中的某些功能,不只能够下降开发成本,同时还能够方便的进行功能迭代更新。可是如何保证Web APP的流畅性也一直是业内讨论的热点。InfoQ这次专访了手机淘宝客户端高级技术专家冯森林来谈谈手机淘宝在Web技术方面的一些实践经验,另外做为ArchSummit深圳2014大会《移动互联网,一浪高过一浪》专题的讲师,冯森林将会分享手机淘宝的客户端架构探索之路。前端
InfoQ:淘宝手机客户端是否使用了HTML5技术?能简单介绍下吗?浏览器
冯森林:手机淘宝大量使用了Web技术,但对于HTML5,因为兼容性的要求,咱们相对比较保守,使用到的特性并很少。主要是一些与触屏体验相关的HTML5特性,大部分运用在基础JS库中,业务开发直接使用的场景很少。优势在于能够更好的支持一些优化的体验,充分发挥新技术优点和移动端独有的能力。缺点也很明显,兼容性上须要考虑较多的适配问题。缓存
InfoQ:咱们知道Web页面与原生的页面在性能上仍是有很大差距的,手机淘宝是如何处理Web页面的体验瓶颈的?安全
冯森林:经过使用缓存技术,能够在再次加载页面(及用到的资源)时避免缓慢和不可靠的网络请求,从本地缓存加载基本能够作到即时完成,接近于原生应用的加载体验。为了解决首次加载,咱们在缓存机制的基础上引入了预缓存机制(采用与AppCache一致的协议),提早将须要的页面及资源缓存到本地,即便在用户首次打开时,也至关于打开已经缓存过的页面。网络
InfoQ:在Web页面中不可避免的会调用一些Native的功能,手机淘宝是如何实现的?架构
冯森林:咱们采起了相似于PhoneGap的实现(但更轻量级),在Android和iOS两个平台上分别实现了JsBridge,在JavaScript的命名空间内建立可映射到native对象的代理。并在业界通行的实现基础上,咱们还加入了一些安全加强和保护机制,封堵常见的JS注入漏洞。框架
InfoQ:看来手机淘宝在HTML页面方面作了大量的技术投入,能分享下大家的经验吗?性能
冯森林:其实,不管是缓存仍是网络方面的优化,都是在传统Web开发领域内已经相对成熟的实践。在App内,因为咱们所能掌控的部分大幅度的下移,能影响一部分以往受制于浏览器实现的技术层次,因此能够在这两方面作的更多更深刻。可是兼容Web的既有标准和实践是咱们作这些优化的基本前提,好比使用AppCache协议支持预缓存,这样有助于前端技术和实践的跨平台兼容和复用。优化
InfoQ:淘宝本身实现的WebView 缓存机制模块同时兼容iOS 和 Android吗? 可否具体讲一下大概的实现思路?图片缓存有特殊处理吗?加密
冯森林:是的,在两个平台上,咱们都采用了类似的实现。实现思路上彻底参照标准的HTTP Cache-Control协议,在一些特定的场景下使用ETag。图片与API采用一致的缓存实现,惟服务端的缓存策略配置不一样而已。
InfoQ:手机淘宝开发Web页面时有没有用到过一些开源框架?若是有自研框架,是否考虑开源?
冯森林:手机淘宝中使用到的大部分是前端业界成熟的开源框架,如JQuery、Mustache,也有一些咱们本身构建的框架,如已经开源的Kissy。基本上,除了对接私有设计的框架以外,咱们都优先考虑使用成熟的开源项目,而且将咱们的补充反馈给开源社区。
InfoQ:淘宝对安全性要求很高,请问在Web与Native交互的过程当中,是否进行过一些加密和其它的处理?
冯森林:Web与Native的交互,自己仍是受到OS安全性保护的。不管在Android仍是iOS下,这都是App内部的通讯通道,所以在非越狱/ROOT的设备上不存在已知的安全风险。因为越狱和ROOT在国内环境中的广泛性,因此在安全问题上,咱们总体性的策略是将整个客户端视同安全藩篱较低的终端,从云端通讯及行为分析上去强化安全保护。好比咱们已经在Web容器中加入的『人机识别』模块,可有效识别各类利用Web页面和接口进行的自动『刷XX』行为。