热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HTML5特性的探讨

HTML5已经成为2011年度技术社区最热门的词汇之一,逐渐从理论走向实践,并得到了社区的广泛认可,在强大特性的背后,HTML5也面临一些限制,最近引起了社区的讨论。

HTML5已经成为2011年度技术社区最热门的词汇之一,逐渐从理论走向实践,并得到了社区的广泛认可,在强大特性的背后,HTML5也面临一些限制,最近引起了社区的讨论。

InfoWorld网站最近发布了一篇文章《关于HTML5的11个让人难以接受的事实》,作者Peter Wayner指出:尽管HTML5确实有很强大的功能,但它并不能解决所有问题,一些功能是非常强大的,能让Web应用成为原生应用的强有力对手,但是安 全问题、本地数据存储的限制、同步以及“争权夺利”等问题都会让我们降低对它的期望。

对于此篇文章,HTML5研究小组成员秀野堂主在《我这一年所了解的HTML5》一文(以下简称“观点”)中专门对这11个问题分别作了分析和讨论,我们不妨将两篇文章的观点对比一下,对于HTML5技术圈里的开发人员会有所启发。

问题1:安全是一场噩梦

……在Web应用中,当浏览器拥有一个很强大的调试工具的时候,这种控制权比以往更容易被滥用。当在浏览器中集成了一个Javascript的调试器比如 Firebug,任何对Facebook、Google以及其他网站感兴趣的人?都可以插入断点来查看代码。这对于了解网站是如何运行的是非常有利的,但 对于安全问题来说却是一场噩梦。想象有个变量的值是你想要改变的,Firebug或者其他一个浏览器调试器可以让你很容易地将数据改成你想要的任何数据。 你想要通过改变自己的地理位置来捉弄一下你的朋友吗?那么可以修改浏览器中的经度和纬度值,让浏览器“处于”世界上的任何位置。很多配置属性都可以被修 改,浏览器使得这样的修改比在本地应用中更为容易。 对于引发的安全问题,也是有些限制的。一些Javascript工具比如Google Web Toolkit和标准的编译器一样复杂,它们的输出令人费解。但是一些工具比如Javascript Deminifier能解决这个问题。 威胁当然也跟应用性质有关。一个人通过改变浏览器上显示的经纬度来和朋友开玩笑说在环游世界的途中是一回事,而获得其他人的权限又是另外一回事了,这会带 来威胁。一旦涉及到金钱,情况会更糟糕……

观点:

安全问题是全面存在的,不仅仅是断点调试和变量。不过,好像到目前为止,大家都有安全问题,没有谁是绝对安全的。因此,在一些不是很重视安全的项目上,安全问题可以降级。这完全由架构师来思考和决定。

问题2:本地数据存储存在限制

浏览器中隐藏的本地数据库让Web应用更容易在电脑上缓存数据。对任何一个在浏览器中享受这?种台式机体验的人来说,这些数据库可以节省带宽,提升性能。 然而它们肯定比不上本地应用的数据的强大功能。HTML5的数据存储能力毫无疑问是很重要的功能,但是你仍然不能将存储的数据迁移到另外一台机器上,或是 制作副本、备份、用另外一个应用打开。所有这些数据都是隐藏在浏览器之下的。某种程度上说,这是最糟糕的一种情况。因为你要承担存储这些数据库的所有责任 而不能对它有任何控制。 一些最新的浏览器可以让你看到在你的机器上创建了哪些数据库,但这些信息是有限的。Safari甚至可以让你能够删除数据库,但是你不能浏览这些信息或是 将它们迁移到另外一台机器上,这些文件在设计之初就没有让它能够很容易迁移。你同样不能深入到文件中看到底存储了什么。当然,一个程序员可以看懂这些文 件,但前提是他们研究清楚了文件格式并且做一些hacking…..

观点

本地数据存储是有限制的,确实是,但是在不同的浏览器上,限制是不一样的。因此架构师应该以支持最好的浏览器(ios上就是safari,android 上目前就是欧朋最新版)为准,推荐你的用户去使用最好的软件,而不是兼容那些垃圾软件……因此,我的个人建议是:不要让自己的作品去适应当前的、一定会消 失的问题,追求卓越,推荐卓越完全是应有的使命。在移动浏览器端,safari的表现就可能是最好的,存储可能也是最大的。(当然,鉴于行业的剧烈变化, 这一切是会变的)

问题3:本地数据可以被操纵

用户可能并不拥有对数据的控制权,但是网站同样也被限制不能处理用户数据。用户换浏览器了?用户换机器了?很多Web开发者对此都无能为力。因为同步问 题,他们不能让用户创建更多数据。Web开发者也需要担心本地数据库的安全。尽管没有工具可以让用户可以很容易修改本地数据并升级权限,但服务器同样也没有能力去阻止用户做到。所有因为运行用户修改Javascript代码的安全漏洞同样会影响数据库。

观点:

本地数据可以被操纵。这是一个老调重弹的问题,即:跨域问题。这已经是大家都很清楚,而且都已经解决的问题了,再说就没有意思了。你可以去下载最新的各种 浏览器,为了跨域问题,整个html5标准中的重要api几乎都翻新了一遍。以致于微软抓着这个问题让webGL、websocket、 webWorker都推迟了出来。

问题4:离线数据对同步是一场噩梦

HTML5的本地数据存储极大提升了离线使用Web应用的能力。唯一的问题是数据同步。 如果一个Web应用连接到网络上,它可以持续地将数据存储到云中去。而当应用离线时,应用中发生的数据就不能存储到云中。如果一个人切换了浏览器或者使用 了不同的机器,就会出现副本,这时同步就会成为一个大问题。更糟糕的是,时钟本身就可能是不同步的,使得检查最新被保存的数据是不现实的。 当然,这对本地应用来说也一直都是一个问题,但是在本地应用中,为同步负责的是人,他可以通过查看文件名并改变日期来进行同步。但是因为HTML5并没有 给用户对隐藏在浏览器之下的数据库的控制权,开发者必须提供用户界面让用户通过这个界面来管理同步问题。 这并非是一个完全棘手的问题。开发人员可以通过使用版本控制系统来处理这个问题,而现今的版本控制系统在处理这些问题上已经变得越发复杂了。

观点:

离线对同步是一场噩梦。这话一点不假,确实,我们在做applicationCache时,都满怀心喜,结果碰了一鼻子的灰。其实,我们还要警告开发者, 在移动设备上,大多数的浏览器,都不能良好的支持,其原因也很简单,因为大多数浏览器厂商都还生活在狭窄宽带的时代。他们的产品设计都不足2M。因此,在 一段时间内,在移动设备上,不用applicationCache比用要妥当。但是在桌面浏览器上,用applicationCache是很好的选择,所 谓的版本控制,可以随意些,用时间戳就是一个不错的选择。

问题5:云端什么都没有向你承诺

为HTML5将数据存储在云端而带来的所有结构性的问题来责备HTML5实际上不是件很公平的事情,但云端是一个必要的部分,因为云省去了安装软件和备份数据的麻烦。由于HTML5本地数据存储的限制,大量Web应用存储仍然要保留在服务器端, 但这可能是灾难性的。就在最近Facebook决定将不再使用一个基于Linux的插件来上传照片,结果,同样被去掉的是通过这个插件上传的照片。这样的 例子比较少见,但是因为各种原因,它们正变得越来越多。你能确保那个免费提供他们的一切HTML5应用的新兴公司在几年后甚至几个月后还存在吗?你只能自 求多福。情况还更糟糕。正如很多Web应用所明确说明的那样,这些数据并不是你的,在大数情形下,你不能诉诸法律来恢复数据。有些更离谱的服务条款甚至说 数据可以“没有任何理由”就被删除。HTML5没有避免这个问题,它的结构实际上是保证了任何由你的浏览器缓存的数据都会存储在云端,这些数据是脱离了你 的控制的。HTML5的炒作说这是它的一个优势特性,但这实际上却很容易造成不利影响。

观点

关于云的问题,这似乎是一个云存储与本地存储的问题,与HTML5的关系不太大。相反,HTML5如果与云服务器供应商结合起来,可以发挥较大的生产力。

问题6:强制升级并非是每个人都想要的

有个故事,或许是杜撰的,说一个人使用Gmail账户和酒吧里认识的人保持着随意的联系。当Google+出现以后,所有的历史记录都出现了,因为 Google+在论坛里自动连上了那些旧的地址。每天,这些旧名字和旧面孔都会出现询问是否要加入到论坛中去。当Web应用公司需要升级的时候,他们会将 所有人一次性升级。尽管这据说是为了让用户不再受升级安装文件之苦,但对于那些不想使用新特性的人来说,这确是一场噩梦。这不像上面是一个关于人们隐私的 问题。新软件可能因为新旧软件包之间的依赖关系而经常崩溃。

观点:

强制升级并非是每个人想要的,这点我是赞同的,但是这也不是技术问题,这是web与native的区别。引用的案例g+不适合在这里讨论,但是我们可以看 到,新浪微博就有较好的新旧版本控制,我就一直用的旧版本,不喜欢新版本,一直用的挺好。这完全取决于技术人员,不是技术和标准本身。

问题7:Web Workers并不会处理优先级

Web Workers是HTML5的一个非常耐人寻味的特性。与其去使用Javascript传统的wait、delay和pause命令,现在Web开发者可以拆分他们的命令并且整合到Web Workers的CPUhogs中。换句话说,HTML5 Web开发者可以让浏览器表现得像操作系统一样。但问题在于,Web Workers并没有复制操作系统的所有特性。尽管它提供了一种方式来讲负载分支并分离,但是却没有方法来管理负载或是设置优先级。API只是让消息传入或者传出Worker对象。这就是它做的一切了,剩下的都交给浏览器了。

观点:

webWorker的问题确实还会有一堆,从标准上看webworker还在进化期,与serverEvent相比,webworker是另一种服务器端 的通信,这种优先级的处理,完全是在开发者来决定的,这没什么问题。webWorker肯定是不成熟的,还需要时间。但是作者所说的问题,可能是看了一眼 标准后作出的臆想,可那已经不是问题了,webworker的根本问题,现在是父子进程的通信和子子进程的通信问题。

问题8:格式不兼容比比皆是

HTML5引入了

标签,第一眼看上去,它们和图像标签一 样好用。只要在其中加入一个URL,浏览器就会引入数据流。然而,如果它真有这么简单的话,为什么我浪费了两个星期来让所有主要的浏览器可以播放基本的音 频文件呢?个别浏览器构建者只实现了部分而不是全部的音频视频格式确实不是HTML5委员会的错。大家都是人,都想要争夺统治权。往往在一个浏览器上工作 正常的文件到了另外一个浏览器上却不能工作了。开发者要如何测试这一点呢?API开发者非常聪明,他们加入了canPlayType函数,但就是这个函数 也不是所有浏览器都支持的。观点:格式不兼容是真实的存在的。这完全是厂商之争和市场之争。不过没有关系,我们是这样看待问题的:目前能够支持好html5的浏览器本来就不多,因此,我们只需要迎合一部分人群即可。而那一部分人群用的设备就是主流……问题9:各浏览器的实现是独立的


HTML5的田园诗般的愿景是一回事,其实现的蹩脚的现实是另一回事。诚然,程序员正在尽他们最大努力来实现架构师的梦想,但就是有一些标签和对象无法正 常工作。例如,有很多理由去喜欢HTML5的地理定位API。它提供了对隐私的一定程度的包含,对精确度也有控制。要是它能一直一贯地工作该有多好——有 的浏览器就会总是超时,这个浏览器还是不太聪明,因为它应该知道台式机上是没有GPS芯片的。最后,人们会去抱怨浏览器没有完全实现HTML5的特性,而不是去责备API本身的结构问题。这一事实凸显了Web开发者在开发基于HTML5的Web应用时所面临的挑战。

观点

这是肯定的。geolocation在不同的浏览器上实现是不一样的。但是,浏览器是可以检测出设备是否支持geolocation的,返回了false就对了。这与html5标准也不是大关系。是设备问题。而摩尔定律和统计是:12个月内,人们平均都换了手机了。

问题10:硬件特质带来新的挑战

抱怨某些浏览器构建者超出了职责要求而提供更好的性能表现似乎也不公平,但这并非是恩将仇报。Microsoft通过将IE和低端硬件驱动整合而提升了 IE浏览器中画布对象(Canvas object)的性能。它甚至做了一些游戏比如pirateslovedaisies.com来显示其性能。?但现在程序员们需要注意这些附加功能是否能 够实现,并且这些代码的运行速度也是无法保证的。例如,pirateslovedaisies.com的游戏设计者设计了一个开关来开启或者关闭IE支持 的特性。但是,有没有一个API来告诉你这些特性是什么呢?没有。最简单的方式是通过浏览器名字来进行测试并估算帧速率。很多游戏开发者都有多年经验来了 解可用硬件的范围,唯一的解决方法就是禁止创新,但这将是Web开发者又要解决的一个新的问题。

观点

……这不用担心啊。windows phone在中国不超过10万台。开发者的力量都集中在移动端,桌面端的进化受微软影响,但是在移动设备中。微软的影响是非常弱的。android和ios两块里,做好一块,就是王了,何必管那么多?

问题11:“争权夺利”一直都存在

有个叫Ian Hickson的人,是HTML5标准的主要起草者,也是最高独裁者(the Supreme Dictator for Life)。我想他们这是在开玩笑,因为这样的头衔实在太不匹配了。标准的编写者只是在提出建议,浏览器公司的编码天才们才是最终做出决定的人。他们可以 选择实现或者不实现某个特性,然后Web开发者就要去测试结果是否稳定。几年以后,标准就会根据与实现程度的匹配情况做出改变。很多Javascript 开发者将兼容性问题都留给了开发代码库的人,比如jQuery。这些层让我们不必去了解不同浏览器之间的差别。但是,这些代码在将来是否足够健壮?只有时 间才会知道。这个议题凸显了这个领域中最根本的问题。我们想要自由、创造性以及因为浏览器间的激烈竞争而产生的丰富特性。创新的脚步非常快,但是因为浏览 器开发者都争相添加新的特性以赢得先机,使得各个浏览器之间有更多的不同。但我们希望能有一个统一的指挥者这样就能获得稳定性。但是,对于争斗,从来都没 有一个理想的解决方式。

观点

一个伟大的事业,总是会有跌跌撞撞的。在项目中,无论我如何大骂HTML5的缺点,都无法阻挡我对HTML5深深的期盼。所谓的技术(争权夺利),我们不 予考虑……移动互联网已经有了很多泡沫,但是前景依然美好,那些正在创业的和已经创业的,请向移动互联网看齐,这个盘子很大,没有谁能一口吃下,快来 吧……在这里,我想说一句:这个世界上从不缺少CEO和老板,只缺少真正能解决问题的人。


推荐阅读
  • 当前,众多初创企业对全栈工程师的需求日益增长,但市场中却存在大量所谓的“伪全栈工程师”,尤其是那些仅掌握了Node.js技能的前端开发人员。本文旨在深入探讨全栈工程师在现代技术生态中的真实角色与价值,澄清对这一角色的误解,并强调真正的全栈工程师应具备全面的技术栈和综合解决问题的能力。 ... [详细]
  • 全面解析:Hadoop技术栈中的Linux操作系统概览
    全面解析:Hadoop技术栈中的Linux操作系统概览 ... [详细]
  • 题目描述:小K不幸被LL邪教洗脑,洗脑程度之深使他决定彻底脱离这个邪教。在最终离开前,他计划再进行一次亚瑟王游戏。作为最后一战,他希望这次游戏能够尽善尽美。众所周知,亚瑟王游戏的结果很大程度上取决于运气,但通过合理的策略和算法优化,可以提高获胜的概率。本文将详细解析洛谷P3239 [HNOI2015] 亚瑟王问题,并提供具体的算法实现方法,帮助读者更好地理解和应用相关技术。 ... [详细]
  • 在使用关系型数据库时,通常需要通过用户名和密码进行身份验证才能访问数据。然而,MongoDB默认情况下并不强制要求这种身份验证机制,使得用户无需凭据即可访问并执行各种操作。虽然这一设计简化了初学者的上手过程,但也带来了显著的安全风险。为了提升MongoDB的连接安全性,本文将探讨多种策略与实践,包括启用身份验证、配置网络访问控制、加密通信以及定期审计安全设置,以确保数据库的安全性和数据的完整性。 ... [详细]
  • SQLmap自动化注入工具命令详解(第28-29天 实战演练)
    SQL注入工具如SQLMap等在网络安全测试中广泛应用。SQLMap是一款开源的自动化SQL注入工具,支持12种不同的数据库,具体支持的数据库类型可在其插件目录中查看。作为当前最强大的注入工具之一,SQLMap在实际应用中具有极高的效率和准确性。 ... [详细]
  • 在编程中,`SyntaxError: unterminated string literal` 错误通常出现在使用 jQuery 或其他 JavaScript 库时,表示某个字符串字面量未正确闭合。这种错误通常是由于代码中的引号不匹配或缺失导致的,例如在字符串中意外地包含了未转义的引号字符。解决此问题的方法是仔细检查相关代码段,确保所有字符串都已正确闭合,并且引号已适当转义。此外,使用现代代码编辑器或 IDE 的语法高亮功能可以帮助快速定位此类问题。 ... [详细]
  • EasyUI作为一种高效的前端框架,显著简化了JavaScript代码的编写,提升了开发效率。在构建窗口应用程序时,首先需要引入EasyUI所需的JS文件和CSS样式表。由于EasyUI依赖于jQuery,因此还需确保正确加载jQuery库。通过这种方式,开发者能够快速实现界面组件的动态交互与美观布局,为用户提供更加流畅的使用体验。 ... [详细]
  • 为了在Fragment中直接调用Activity的方法,可以通过定义一个接口并让Activity实现该接口来实现。具体步骤包括:首先在Fragment中声明一个接口,并在Activity中实现该接口。接着,在Fragment中通过类型转换检查Activity是否实现了该接口,如果实现了则调用相应的方法。这种方法不仅提高了代码的解耦性,还增强了模块间的通信效率。此外,还可以通过ViewModel或LiveData等现代Android架构组件进一步优化这一过程,以实现更加高效和可靠的通信机制。 ... [详细]
  • 尽管许多人认为跑步是一项简单的运动,但实际上它涉及诸多专业知识。不正确的跑步方式不仅会降低锻炼效果,还可能引发伤害。例如,穿着不合脚或过于陈旧的跑鞋,会导致足部支撑不足,增加受伤风险。此外,跑步姿势不当、热身不足、过度训练等问题也同样值得关注。本文将详细介绍七大常见跑步误区,并提供专业的改进建议,帮助跑者避免这些问题,提高运动效率和安全性。 ... [详细]
  • 本文深入探讨了 iOS 开发中 `int`、`NSInteger`、`NSUInteger` 和 `NSNumber` 的应用与区别。首先,我们将详细介绍 `NSNumber` 类型,该类用于封装基本数据类型,如整数、浮点数等,使其能够在 Objective-C 的集合类中使用。通过分析这些类型的特性和应用场景,帮助开发者更好地理解和选择合适的数据类型,提高代码的健壮性和可维护性。苹果官方文档提供了更多详细信息,可供进一步参考。 ... [详细]
  • 本文深入解析了 Apache 配置文件 `httpd.conf` 和 `.htaccess` 的优化方法,探讨了如何通过合理配置提升服务器性能和安全性。文章详细介绍了这两个文件的关键参数及其作用,并提供了实际应用中的最佳实践,帮助读者更好地理解和运用 Apache 配置。 ... [详细]
  • Django框架下的对象关系映射(ORM)详解
    在Django框架中,对象关系映射(ORM)技术是解决面向对象编程与关系型数据库之间不兼容问题的关键工具。通过将数据库表结构映射到Python类,ORM使得开发者能够以面向对象的方式操作数据库,从而简化了数据访问和管理的复杂性。这种技术不仅提高了代码的可读性和可维护性,还增强了应用程序的灵活性和扩展性。 ... [详细]
  • 构建顶级PHP博客系统:实践与洞见
    构建顶级PHP博客系统不仅需要扎实的技术基础,还需深入理解实际应用需求。本文以Zend Studio为开发环境,MySQL作为数据存储,Apache服务器为运行平台,结合jQuery脚本语言,详细阐述了从环境搭建到功能实现的全过程,分享了开发PHP博客管理系统的宝贵经验和实用技巧。 ... [详细]
  • 软件开发史上最具影响力的十位编程大师(附图解)
    在软件开发领域,有十位编程大师对行业发展产生了深远影响。本文基于国外知名社区的一项评选,通过图文并茂的形式,详细介绍了这十位杰出人物,包括游戏开发先驱John Carmack等,为读者呈现了他们卓越的技术贡献与创新精神。 ... [详细]
  • Joomla!软件介绍【Joomla!概括介绍】国外相当知名的内容管理系统。【Joomla!基本介绍】Joomla!是一套在国外相当知名的内容管理系统(ContentManagem ... [详细]
author-avatar
意淫图
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有