速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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

评论

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

java开发培训任务调度框架Quartz的用法

@零度

JAVA开发

关于延期举办第六届世界智能大会的通知

InfoQ 天津

大咖说*菜鸟|物流行业重大战略机遇期已悄然到来

大咖说

互联网 物流 降本增效 菜鸟 实体经济

烫烫屯屯锟斤拷��

博文视点Broadview

Wallys/Network_Card/QCA9880/ 2x2 2.4G/5G FCC/CE

wallys-wifi6

802.11AX QCN9880

盘点使用最广泛的14个最佳Scrum工具(功能与报价)

爱吃小舅的鱼

王莉:将开发文档英文化和本地化,我们努力让OpenHarmony走向全球

OpenHarmony开发者

开发文档 OpenHarmony OpenHarmony 3.1 Release

AI简报-视频超分BasicVSR

AIWeker

人工智能 深度学习 视频超分 5月月更 AI简报

存储系统如何适配 Hadoop?

焱融科技

hadoop 存储 文件存储

国产CPU产业链的逻辑架构

Finovy Cloud

gpu 云服务器

HttpRunner v4.0 正式发布:一文了解 v4.0 的前世、今生与未来

debugtalk

性能测试 HTTP 接口测试 测试工具 开源软件

玩转集群配置中心,一文带你了解 Taier 控制台

袋鼠云数栈

敏捷实践 | 做优先级排序时使用最多的三个模型

LigaAI

敏捷开发 优先级

从“预见”到“遇见” | SAE 引领应用步入 Serverless 全托管新时代

阿里巴巴云原生

阿里云 Serverless 云原生 SAE

【直播预告】如何写好技术文章?开源技术写作入门与实践

TiDB 社区干货传送门

推荐书籍-《持续行动-从想到到做到》

消失的子弹

书籍推荐

leetcode 75. Sort Colors 颜色分类

okokabcd

LeetCode 排序

数字化时代,企业知识管理软件怎么选

小炮

企业知识管理

百问百答第39期:如何区分docker容器中的进程名称?

博睿数据

智能运维 Bonree Server 博睿数据

IOS技术分享| iOS快速生成开发文档(一)

anyRTC开发者

ios objective-c 音视频 移动开发 appledoc

Wallys/ Network_Card/2x 2 5G /High power Radio card

wallys-wifi6

QCA9882 802.11AX

集成底座内外网访问配置说明

agileai

k8s 集成底座 企业服务总线 身份管理平台 主数据平台

记一个 Harvester SNAT 案例

Rancher

Kubernetes k8s rancher Harvester

龙蜥社区第八次运营委员会会议顺利召开

OpenAnolis小助手

开源 生态 龙蜥社区 理事单位 运营委员会

web前端培训js 私有属性的 6 种实现方式

@零度

web前端开发

大数据培训数仓指标体系搭建

@零度

大数据开发

云原生技术应用情况报告重磅发布

行云创新

云计算 云原生 开发 报告 行业

阿里云首家通过《可信云·云成本优化工具能力要求》评估,云原生企业 IT 成本治理方案助力企业 FinOps 落地

阿里巴巴云原生

阿里云 云原生 工具

签约喜报 | 美秧集签约旺链科技,一物一码防伪溯源驱动品牌新增长

旺链科技

区块链 产业区块链 大米溯源

Python:什么是callable?

Ken

Python Callable

JVM进阶(十八)——初识Class文件

No Silver Bullet

JVM class文件 5月月更

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