立即领取|华润集团、宁德核电、东风岚图等 20+ 标杆企业数字化人才培养实践案例 了解详情
写点什么

支付宝、腾讯前端开发工程师谈实战 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:008179

评论

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

13分钟彻底搞懂分布式系统服务注册与发现原理,写给互联网大厂员工的真心话

Java 程序员 后端

2020-2021京东Java面试真题解析,在线面试指南

Java 程序员 后端

2021Java精选面试实战总结整理,讲的太透彻了

Java 程序员 后端

2021Java进阶者的新篇章,Java全栈知识体系

Java 程序员 后端

Activity重启引起的重复发送消息Bug分析

轻口味

android 10月月更

2021Java高级面试题,极客时间vip年卡,看懂这些帮你轻松解决就业问题

Java 程序员 后端

在阿里云ECS服务器上部署OpenVPN

wong

Centos 7 OpenVPN ECS

2021Java者未来的出路在哪里,kafka从入门到精通

Java 程序员 后端

2021Java高级面试题总结,kafka面试常见问题

Java 程序员 后端

做一名真正的软件工程师

百度开发者中心

程序员 最佳实践 分享 工程师

上云,能打破低代码“内卷”吗?

海比研究院

低代码

2021Java开发面试解答,数据库mysql教程视频教程,90%的人看完都说好

Java 程序员 后端

2021Java面试笔试总结,jdk使用教程,Java高级工程师必备知识

Java 程序员 后端

15个经典面试问题及回答思路,Java面试你必须要知道的那些知识

Java 程序员 后端

12年高级工程师的“飞升之路”,Java知识点总结合集

Java 程序员 后端

2020-2021蚂蚁金服Java面试真题解析,2021最新Java面试真题解析

Java 程序员 后端

10年阿里开发架构师经验分享:rabbitmq教程go,Java零基础入门pdf

Java 程序员 后端

2021Java开发学习路线,两年Java开发经验

Java 程序员 后端

2021Java开发现状分析,看完这一篇你就懂了

Java 程序员 后端

2021Java精选面试实战总结整理,架构师必备

Java 程序员 后端

2021Java网络编程总结篇,百度技术三面四面,最全Java知识总结

Java 程序员 后端

实时即未来!Flink Forward Asia 2021 议程正式上线!

Apache Flink

大数据 flink

月经逆行、体能差、雌激素影响心态……女性进入太空,要经历哪些科技伪命题?

脑极体

2021Java常见面试题,牛客网中级项目异步队列,Java高级面试题及答案整理

Java 程序员 后端

2021Java面试心得,shiro框架视频尚硅谷,最新Java开发进阶

Java 程序员 后端

2021Java高级面试题汇总解答,Java开发新手入门教程

Java 程序员 后端

万物智联与烟火人间,一场跨越20年的双向奔赴

脑极体

12道Java高级面试题:开课吧数据分析百度云,大厂Java开发面试解答

Java 程序员 后端

2021Java常见笔试题,牛客网java编程题送信,字节Java面试题

Java 程序员 后端

2021Java高级进阶学习资料,字节跳动Java高级工程师

Java 程序员 后端

1200页文档笔记,Java+JVM+MySQL+数据结构与算法

Java 程序员 后端

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