当前位置:  开发笔记 > 编程语言 > 正文

HTML5局部小雨何时转晴

HTML5是什么?为什么很多人如此关注它并押上公司的未来?但为什么Facebook弃HTML5转ObjectiveC。HTML的明天,是晴还是雨,你该不该给它投怀送抱,该如何去判断?我最近对HTML5产生兴趣,就做了一些粗浅的研究,...">

 



HTML5是什么?为什么很多人如此关注它并押上公司的未来?但为什么Facebook弃HTML5转Objective C。HTML的明天,是晴还是雨,你该不该给它投怀送抱,该如何去判断? 

我最近对HTML5产生兴趣,就做了一些粗浅的研究,并和硅谷的两位玩弄HTML5多年的大佬Luke Shepard(原Facebook移动平台研发经理)和Feng Qian(Facebook高级工程师,原Google Chrome的创始团队成员)电话交流,总结于此篇文章。这篇文章不是HTML5的启蒙贴,是对其在业界发展的一个观察和思考吧。 

什么是HTML5? 

HTML5,就像其名字所表示的,它是HTML的第五个版本。它将现在大家在各种浏览器之中所做的很多很炫的插件或者特殊调准都做到了标准之中。这样的好处在于,大家不需要对于特殊的浏览器做特殊的优化,也可以避免了很多由于插件标准不统一带来的困扰。 

比如,我很惊讶的了解到,Adobe的Flash+PDF插件导致的浏览器崩溃,占到所有浏览器崩溃次数的一半以上。 

HTML5的出现和推广,将通过统一的标准大大改观这种混乱的局面。最最主要的原生支持(native support),是这几种: 

  • draw on the fly (随意拖动部件)
  • native video support (原声的视频支持 – bye,flash)
  • geolocation (地址信息的获取)
  • offline access support (不在线的支持,支持local storage)
  • semantics with tags that makes SEO friendly (flash content is not indexable – SEO能理解的tags来帮助搜索引擎的加索引)


但对于HTML5标准实现的程度和节奏完全取决于不同浏览器的自主选择,它想咋的就咋的。html5readiness.com上的这张图很清楚的总结了不同浏览器对于不同功能的实现程度。 




你该不该给HTML5投怀送抱? 

回答这个问题,要分成两步:你在WEB端还是移动端? 

1. 如果是Web端,100%保证晴天;如果是移动端,看下一条 

对于Web端而言,HTML5将是一个完整的操作系统。它在不同的底层系统之上,借助于浏览器的实现,封装了统一标准的API允许开发的程序跨设备(PC or Mac or Smart Phone),跨平台 (Windows,MacOS,iOS,Android,whatsoever)的运行。 

最大的好处,就是一处开发,多处使用。审核新版本的发布也不用看苹果爷爷的脸色。直接在服务器端推送新代码就好了。对于开发人员而言,这对效率的提高,有着致命的诱惑。像”你们是先开发Web,还是移动”之类的问题,将愉快的失去意义。 

对于Web端的开发而言,你可以尽情的享受HTML5这种统一封装带来的好处,唯一要等待的就是浏览器对其支持的完善。但这种完善的到来,无疑是确定的。 

而正是这种好处,让很多创业者如此关注它并押上公司的未来。 

但对于移动端而言,却没有那么简单纯粹。 

2. 如果是移动端,取决于你的产品形态。 

因为你的产品需要的功能可能永远也无法在移动端的浏览器的HTML5实现中被很好的实现。 

App Store上超过50%的应用已经是用HTML5来开发,将来可能90%的应用会是HTML5,而那10%,可能永远也不适合HTML5。 

HTML5的天气预报中,是局部有小雨。 

苦逼的开发者们,你站的地是晴天还是下雨,该如何判断呢? 


先介绍一个工具,动态检测浏览器对HTML支持程度的ringmark.io。如图所示,它将测试你当前的浏览器,将HTML5的规格(spec)当中描述的功能的实现程度会一一测试出来。不同的ring(环)代表了不同的功能等级。已经实现的为绿色,没实现的是灰色。发现灰色很多的朋友,要换浏览器啰。 



回到刚开始的那个问题,Facebook为什么在iOS App的实现上弃HTML5选Object C,就在于Facebook App重度依赖照片,而照片分享,浏览相关的功能极度依赖CSS Overflow Scrolling,这一点,iOS上的浏览器支持极度不给力。而换成Object C的Native Implementation之后,速度快上了2倍之多。 

好,有朋友可能会问,可能在将来浏览器对这些功能的支持会得到改善呢?那时候不就可以了。 

事实是,那一天可能永远也不会到来。 

因为浏览器的编程模型还是90年代流行的单进程单线程 (single process single thread),但原生实现(比如用Object C)的APP可以用多线程。这一点带来的作用是致命的。 

移动端编写APP,可以使用多个线程,第一个线程,被称作主线程(main thread),编程的第一原则是don’t do heavy work on main thread。通常只让它处理UI事件等,其他重度的工作让其他背景线程来做。 

但浏览器只有一个线程,所有的事情都是它干。浏览器编程一上来就破了第一原则。 

在台式机上,浏览器编程还没有太多问题,因为够快;但在移动端,这个弊端很明显。 


我来举个例子,比如你在用浏览器看朋友的照片,你发的评论被发到服务器端,此时你接着用手指往下拉屏;此时,服务器端返回信息,评论发布成功,浏览器中唯一的线程可能停止处理屏幕滚动(scrolling)而来处理服务器的返回信息,由于移动设备的处理器(尤其单进程浏览器只能用上单核,即使是多核手机!)和内存(处于省电原因使用低耗电的DDR1,这一点和现在PC使用的DDR3相差甚远)的不给力,完全可能造成滚动处理的不连续。通常手机的刷新率是60MHZ,即每一帧不超过15ms;如果处理的延时大大超过15ms,那么就会出现跳帧,肉眼就能看出来。 

这是交互操作(比如拉动,滚动等)很多的APP,如果是由HTML5实现,出现拉动的时候停在那里一个很重要的原因。 

所以,如果你的APP是相对静态的,不需要很多对于照片,多点触摸,多向拉动的处理,那完全可以用HTML5来实现;如果不是,比如信息流的展示,游戏等等,还是乖乖的用原生的去实现。 

查看哪种类型的App需要哪些功能,可以进入ringmark.io,点开ring1,点击“See how features apply to each type of app.” 可以看到这个工具对于不同的App的类型做出的总结。比如,对于照片功能比较重的App(Camera App),你会发现他们需要什么样的功能,如果灰色(代表当前浏览器没实现)太多的话,你的App将不适合在这种浏览器中运行。 

HTML5究竟在等什么? 

HTML5实现已经是50%以上的iOS APP的选择。我相信处理能力的提升,将让移动设备的处理不给力带来的体验底下得到改善。而这种处理能力的提高,很大程度上将取决于低耗电高性能CPU/内存的出现,或者电池技术的极大改善。 

在这一天到来之前,有可能10%的APP无法应用HTML5来实现。 


推荐阅读
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文讲述了作者通过点火测试男友的性格和承受能力,以考验婚姻问题。作者故意不安慰男友并再次点火,观察他的反应。这个行为是善意的玩人,旨在了解男友的性格和避免婚姻问题。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
author-avatar
手机用户2502873425
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有