写点什么

支付宝、腾讯前端开发工程师谈实战 HTML5

  • 2012-05-10
  • 本文字数:4396 字

    阅读完需:约 14 分钟

如今大热的 HTML5 到底美在哪里?HTML5 到底能为实际的移动开发带来哪些改变?来自支付宝和腾讯的前端开发工程师们有他们自己的看法。

上周,在一场名为“技术风云会”的定期讨论活动中,HTML5 小组杭州联盟的同学、阿里巴巴集团 HTML5 爱好者,以及支付宝浙大校友会的会员集中讨论了 HTML5 对前端开发带来的直接改变。

“一个东西美不美就看解决实际问题的能力有多少”,阿里云云手机服务运营部的前端开发工程师正邪(花名)说,“现在HTML5 这么火,很多人就拿它跟Flash 去做对比,说Flash 多么多么烂,说HTML5 多么多么好。实际上我们创作的内容最后是给用户去看的,如果这个东西用户觉得好,不管用什么技术我觉得都是次要的。”

来自腾讯Q+团队的开发工程师元彦则从性能分析的角度介绍了他眼中的HTML5,“预取一共有两部分:一部分是资源的预取,还有一部分是DNS 的预解析,”元彦说,他分享了来自腾讯Q+ 的多个案例。

另外,支付宝移动产品部前端开发工程师轩与(花名)分享了对于CSS3 中的变形矩阵的理解,“一位日本工程师使用CSS 画了一张图,粗看上去大家或许会以为这是一张图片,可惜不是,我可以很明确地告诉大家它是由DIV 组成的,CSS 通过TRANSFORM 已经可以实现到这样一个程度。”

来自一淘的前端开发工程师玄寂(花名)着重阐述了web app 离线应用的构建,“给大家描述一种情形,当我们在无任何网络的情况下使用wifi 版iPad 用safari 访问页面的时候会有如下提示‘safari cannot open the page because it is not connected to the Internet’。今天讲的主题就是如何解决这种问题,applicationCache,离线缓存”。

支付宝技术部支付开发组的工程师心武(花名)则仔细分析了HTML5 带来的移动开发变革,“‘Hybrid’融合了web 与native 的优点,更能满足企业应用。使用HTML5 作为显示载体的Hybrid App 具有跨平台特性,能轻松展现复杂的排版内容,降低了开发的门槛,提高了整体的效率。”

下面看看这些一线开发者们的HTML5 实战体会分享。

阿里云前端开发工程师正邪(廖健)——HTML5 之美

HTML5 的产生以及它的设计完全是遵循了一些常见的原理。

第一条:发送时保守、接受时开放。作为工程师,发送给浏览器的文档应该尽量的严谨,但是浏览器作为接收方,应该持有一个开放的姿态,而不会因为某个文档有问题,到浏览器窗口里面就不显示了,只是留下一片空白给用户。既然 HTML 存在标签没有正常闭合的可能性,也存在属性丢失的情况,只要文档没有产生二义性,浏览器应该猜测到最终的行为并做出正确处理,在技术层面浏览器有理由这么做。

第二:避免不必要的复杂性。我们在编写的 HTML 的时候,可能会定义一个很长行长的文档类型声明,这个文档类型声明是给浏览器看的,如果能够简化它,在说创作的时候能省下一些时间,而且也不用浪费力气去记那些难记的字符。实际上,省略大多数字符,浏览器也能按照我们期望的那样去运行。 还有 script 标签,我们可能会设置它的 type 为“text/javascript”,实际上也是不必要,如果 type 属性没有被声明,默认就按 JavaScript 处理。类似的东西有很多,在文档里面能省掉的我们就应该大胆地省掉,这样不仅是在创作这个文档的时候,能够给我们带来这些方便,而且在共同维护的时候也能带来一些益处。

第三:网络价值同达到网络用户数量的平方成正比。现在 HTML5 这么火,很多人就拿它跟 Flash 去做对比,说 Flash 多么多么烂,说 HTML5 多么多么好。实际上我们创作的内容最后是给用户去看的,如果这个东西用户觉得好,不管用什么技术我觉得都是次要的。

最后我们要的是将服务推送到用户面前,而不是要说某种技术多么好,可以杀死另一个技术。实际上在这里,它们的协同工作才是符合 HTML5 的设计思想,在这个层面上我觉得 Flash 也是 HTML5 中的一员。 第四,大多数人的意见和可运行的代码。没有 HTML5 规范的时候,浏览器厂商可以各自为阵,可以加入了自己的标准,虽然这些标准不是 W3C 制定的,但是大多人都有这些需求,它们能解决实际问题。所以也刺激 W3C 加入到这些标准的制定中去。

腾讯 Q+团队 开发工程师元彦——从性能分析的角度去介绍 HTML5

关于简洁的标签方式

HTML5 从这个名字大家可以听出,它是从 HTML4 继承过来的。HTML4 里面有严格模式跟过渡模式,HTML5 是支持这种过渡模式的,就是你可以不把一些标签闭合。但是,我并不推荐所有的标签,比方说 BODY 标签的不闭合,这种我们不推荐。但是像最常用的 P 标签,还有列表标签 li 可以。为什么这样说?首先从视觉角度来说,这样的方式更简洁。关键的是:在文档传输过程中,内容会更少。

HTML5 标签属性的声明支持三种方式。一种是单括号、双括号和不加括号。为了减少文档大小,我选择不加双引号的方式或单引号的方式。但是要注意,假设是类属性的声明,因为属性可能包括多个类,多个类的时候则必须用括号括起来。在这方面,给大家看一下谷歌的一个实践。谷歌自己有一个页面完全实践了上面的东西,文档的大小减少了 20%,使 HTML 文档的传输减少了 20%。如果把整个都实践起来,可以达到 5%—20% 之间的减少。这是第一步,缩减 HTML 文档的大小。

关于预取

预取,一共有两部分:一部分是资源的预取,还有一部分是 DNS 的预解析。

资源预加载有几个点需要注意:

一,预加载只是在浏览器空闲的时候才会去拉,但不保证一定会去拉,这是很重要的一点。因为本身浏览器有一个全局的监听器,这是内部的一个接口,当浏览气空闲的时候,它会去执行浏览器空闲的时候应该做事情,但是这个空闲的回调不一定被触发,所以说并不保证一定会执行预加载。

二,Chrome 不支持 HTTPS 资源的预加载,像 Alipay 是 HTTPS 的页面,Chrome 不会去预拉取。

三,一个预拉取的页面虽存在后不可见,实际上它是在正常解析。假如说我预拉取登陆页面,登陆页面有很多资源,比方说有图片,有 CSS 文件,JS 文件。它是从上往下正常的会被解析,解析的过程中,这个页面没有显现,但是它实际上是存在的。在 HTML5 里面,可通过 document.visibilityState 得到当前页面状态,通常页面有两种状态,可见与不可见,但是现在有一个新的状态,叫做预渲染的状态。可以直接通过 document.visibilityState 是否等于 prerender 来判断页面是否在预渲染状态。

支付宝前端开发工程师 轩与 (王炜)——CSS3-Transform:Matrix2D & 3D

一位日本工程师使用 CSS 画了一张图,粗看上去大家或许会以为这是一张图片,可惜不是,我可以很明确地告诉大家它是由 DIV 组成的,可能有人会怀疑这怎么会是由 DIV 组成的,为了证明我不是在忽悠,使用 safari 的调试器,我们可以看到它确实通过了很多的 DIV 的变形来完成的,可以说非常地美轮美奂,但是你却完全看不出来它是由 DIV 画成的。CSS 通过 TRANSFORM 已经可以实现到这样一个程度。

接下来我们一起深入了解一下他背后的东西。

先讲 2D 变形的四种基本方法。

第一个变形方式叫平移(TRANSLATE)。
第二个是伸缩(SCALE)。
第三个叫倾斜(SKEW)。
第四个叫旋转(ROTATE)。

然后进入主题 MATRIX。2DTRANSFORM 用了六个参数组成了 2*3 阶的矩阵,其实标准的是 9 个参数,一共是 3×3 的矩阵,但是由于这块主要是 2D 的,所以实际使用过程中(变化当中)是通过六个参数来表达。

A 是代表了 X 轴的 SCALE,就是我们前面说的 X 轴的伸缩,这个具体的值是代表了在 X 轴上它所伸缩的单位长度。B 对应的 Y 轴上 SKEW,是在 Y 轴上歪斜的角度;C 是 X SKEW,是在 X 轴上倾斜的角度;D 是在 Y SCALE,是在 Y 轴上面的伸缩,E 是 X 轴上的 TRANSLATE,即在在 X 轴上平移。F 对应的是 Y 轴的 TRANSLATE,在 Y 轴上的平移。

通过 TRANSLATE 你可以传 1 和 0,也可以通过 MATRIX 传递把它改成 0 和 1,然后可以得到同样变形的效果。

一淘前端开发工程师玄寂(姜维)——Web app 离线应用的构建

手机淘宝,当初定了两种方案,一种是 localStorage,另外一种是 applicationCache,最后采取的方案是 applicationCache+localStorage。

我们的做法是分离出数据层和基础资源文件层,数据层主要是 ajax 获得的数据,而我们利用的 applicationCache 缓存的是一个框架性的东西,基础 HTML 文档、JS 文件、CSS 文件、图片文件、字库文件 ttf,以及可能需求的一些媒体文件,localStorage 存一些系统信息,关于字库文件,其实这里的字库是一个 icon 集合,我们把大量 icon 集合到一个字库文件,通过对应表来对应相应的 icon,由于字体是矢量的这解决了为不同 iPhone 分辨率的适配问题。当然还减少了 http 请求数。最最重要的是,字库把原有图片体积上足足可以减小 2 分之一。当然这也存在一点点的维护性问题。

这种结合 applicationCache,localStorage 的 OPOA 的方案,看上去似乎高枕无忧,但是在多人协作问题上显现的特别棘手,由于我们在项目中又引入了 backbone(JS 中的 MVC 框架)项目成员沟通成本增大很多。最后我们的方案是先有专人介入 MVC,架设好最核心的应用体系,然后分配到 page 由不同人开发。另外和 pc 端 one page 还有点不一样的地方是我们移动端可能还需求页面与页面间切换的效果,所以大部分时候我们的 view 层可能需要被缓存,这个缓存言下之意就是显示与隐藏,所以在管理 view 上要做好特别的管理,否则很可能会导致内存的溢出。这个问题目前还没有很好的解决方案,但是之后会参考 iOS native 里面有一个 navigator 的对象,它会有一个动态管理的过程。

大家可以到 http://www.slideshare.net/pigcan/applicationcache 查看本次分享的 ppt。

支付宝开发工程师 心武 (杜伟)——HTML5 带来的移动开发变革

如何实现“Hybrid”

“Bridging the gap between the web and the SDK”,这是对于如何实现 Hybrid 的最好描述。在手机 OS 中,Web 页面的载体(如 WebView)是 OS 的一部分,被包含在 SDK 中的。当 Html 页面解析时,WebViewWebBrowser 充当了中间人的作用,它以超出浏览器的界限在 Html 页面中加入额外的操作,这就成为了 web 与 native 建立连接的基础。例如在 Android 中,webview 组件有 addJavascriptInterface(Object,String) 方法,这个接口的作用是将一个 Java 对象提供给 Html 页面的 JS 代码访问。

Hybrid 利器——PhoneGap

PhoneGap 是现下比较流行的 Hybrid 框架,08 年推出,11 年 10 月被 Adobe 收购,随后被捐赠给 Apache 软件基金会,并更名为“Cordova”。PhoneGap 入门并不困难,在官网上可以方便的找到它的使用步骤、支持的 API 以及跨平台应用构建工具。

其实,PhoneGap 自带的 API 意义不是很大,它提供的 Plugin 扩展机制才是解决问题的关键。实际应用开发中,我们需要针对不同平台开发特定的 Plugin 插件,这会丧失一定的跨平台能力,但却可以达到“随心所欲”的地步。


给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2012-05-10 00:008458

评论

发布
暂无评论
发现更多内容

图神经网络之预训练大模型结合:ERNIESage在链接预测任务应用

汀丶人工智能

图神经网络 图学习 11月月更

从零开始读源码,阿里最新JDK源码剖析笔记在架构师社区火了

程序员小毕

Java 程序员 后端 jdk源码 架构师

腾讯云大神亲码“redis深度笔记”,不讲一句废话,全是精华

钟奕礼

Java java程序员 java面试 java编程

元组:轻量级列表

乔乔

11月月更

啃完这35个Java技术栈,冲刺大厂offer

小二,上酒上酒

Java 编程 JVM 技术栈 编程开发

涨薪50%,从小厂逆袭,坐上美团L8技术专家(面经+心得)

钟奕礼

Java Java 面试 java编程 程序员 java

字典:反映对应关系的映射类型

乔乔

11月月更

面向大规模队列,百万并发的多优先级消费系统设计

阿里云CloudImagine

阿里云 队列 消费系统

进军东南亚市场,腾讯云数据库TDSQL助力印尼BNC银行数字化转型

腾讯云数据库

金融行业 tdsql 腾讯云数据库 BNC

列表常用方法(二)

乔乔

11月月更

终于拿到了阿里P8架构师分享的JCF和JUC源码分析与实现笔记java岗

小二,上酒上酒

Java 源码 JUC JCF

阿里P9架构师终于把毕生心血而成的分布式高可用算法笔记开源了

小二,上酒上酒

Java 编程 分布式 算法 编程开发

极致性能!阿里巴巴Java性能优化实录Github首次开源

Java永远的神

JVM 设计模式 多线程 java程序员 Java性能优化

一个三年Java程序员的面试总结!绝对会对你有所帮助

钟奕礼

Java java面试 java编程 程序员 java

列表常用方法(一)

乔乔

11月月更

GitHub标星1.6W+的570页JVM垃圾回收文档,助我boss直聘狂拿offer

小二,上酒上酒

Java JVM 垃圾回收 性能调优

深入浅出学习透析Nginx服务器的基本原理和配置指南「Keepalive性能分析实战篇」

码界西柚

nginx keep-alive 11月日更

小令观点 | 让全球身份更可信:电子护照的前世今生

令牌云数字身份

数字身份 护照 电子护照 全球护照

架构实战营-模块5课后作业

Mr.M

万字长文!对比分析了多款存储方案,KeeWiDB最终选择自己来

腾讯云数据库

nosql 存储 NoSQL 数据库 腾讯云数据库 KeeWiDB

集合:元素之间不允许重复

乔乔

11月月更

极客时间运维进阶训练营第五周作业

好吃不贵

信息论与编码:线性分组码与性能参数

timerring

数据通信 11月月更 线性分组码

先到先得!阿里淘系内传322页Java并发编程核心讲义学习笔记

钟奕礼

Java java程序员 java面试 java编程

824页23种设计模式全解析,搞定设计模式各种难题

小小怪下士

Java 程序员 设计模式

CDH5部署三部曲之一:准备工作

程序员欣宸

大数据 CDH 11月月更

今年Java技术岗面试太难了,收藏93套BATJ等公司面试题集,已看哭

钟奕礼

java面试 java编程 Java‘’ 程序员‘

最近面试Java开发的感受:就以平时项目经验面试,通过估计很难

钟奕礼

Java java面试 java编程 程序员 java

阿里P8架构师强推java程序员人手一套116页JVM吊打面试官专属秘籍

小二,上酒上酒

Java 编程 JVM 开发 计算机

你敢信?清华毕业大佬用了一个坦克大战项目就讲完了23种设计模式

小二,上酒上酒

Java 编程 设计模式 马士兵 编程开发

吃透互联网必问的100道Spring全家桶高频真题,金九银十稳了

小二,上酒上酒

Java spring 编程 springboot SpringCloud

支付宝、腾讯前端开发工程师谈实战HTML5_HTML5_张黎明_InfoQ精选文章