【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

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

评论

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

昇腾AI创新大赛两大赛道怎么选?拿好这篇攻略就够了!

科技热闻

福昕软件亮相2022年全国化工企业数智化转型发展论坛

联营汇聚

PD-Server GRPC 接口图解

TiDB 社区干货传送门

TiKV 源码解读

想成为精英级开发者?请逼自己养成这10个习惯

雨果

程序员 开发者 精英

一加10 Pro拍照如何?随手一拍都是大片

Geek_8a195c

送你的代码上太空,与华为云一起开发"最伟大的作品"

华为云开发者联盟

云计算 代码

什么是主动元数据?为什么Gartner预测它是元数据管理的新方向

雨果

元数据 DaaS数据即服务

【直播回顾】OpenHarmony知识赋能六期第三课—OpenHarmony智能家居项目之控制面板功能实现

OpenHarmony开发者

OpenHarmony

活动预告|Apache Doris x Apache SeaTunnel 联合 Meetup 开启报名!

SelectDB

数据库 数据仓库 数据湖 Doris Seatunnel

让企业数字化砸锅和IT主管背锅的软件供应链安全风险指北

FinClip

IM即时通讯如何让企业远程办公更简单高效?

WorkPlus

腾讯大咖分享 | 腾讯Alluxio(DOP)在金融场景的落地与优化实践

Alluxio

腾讯 OLAP 金融 Alluxio 大数据 开源

【容器篇】Docker怎么限制资源使用

技术小生

Docker 7月月更

盘点波卡生态潜力项目 | 跨链特性促进多赛道繁荣

One Block Community

区块链 科技

波卡创始人 Gavin Wood:波卡治理 v2 会有哪些变化?

One Block Community

区块链 科技

什么?你还不知道Symbol?

是乃德也是Ned

JavaScript 7月月更

TiKV & TiFlash 加速复杂业务查询

TiDB 社区干货传送门

实践案例

剧说职场:资深HR告诉你职场强人都有什么特征

雨果

职场

AI简报-模型集成 SAM 和SWA

AIWeker

深度学习 7月月更

leetcode 605. Can Place Flowers 种花问题 (简单)

okokabcd

数据结构与算法 贪心算法

中国人力资源数字化生态图谱-灵活用工市场

易观分析

人力资源产业

西山居如何用 ONES 打造游戏工业流水线?|ONES 行业实践

万事ONES

知乎高赞:数据中台——风起阿里,成于DaaS

雨果

阿里云 DaaS数据即服务

Linux 环境-TiDB组件进程维度的监控实现

TiDB 社区干货传送门

监控

「开源摘星计划」Harbor高可用集群设计及部署(实操+视频),基于离线安装方式

腾源会

Harbor 腾源会 开源摘星计划

基于eTS高效开发HarmonyOS课程类应用

HarmonyOS开发者

HarmonyOS

埃森哲22年《技术展望》报告:数字化转型将迎来下一个十年

雨果

数字化转型

分布式数据库技术前瞻

TiDB 社区干货传送门

数据库架构选型 数据库架构设计

C# 使用ToolTip控件实现气泡提示

IC00

C# WPF 上位机 7月月更

Spring Cloud之配置管理

Damon

7月月更

家装工业软件的云挑战

三维家

c++ 云原生 webassembly 云计算, 开源工业软件

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