作者:哲玲旭辉9 | 来源:互联网 | 2013-06-24 16:02
任何新技术面临的关键问题之一是,要么被采用并且舍弃那些不能接受它的用户;要么错失新的发展机会,最终变成无关紧要的技术。比如,如果你要在网站开发中使用HTML5技术,这就意味着要舍弃那些仍然使用旧版IE的用户。不过开发者也可以通过兼容工作,让用户也能体验到HTML5的价值,同时也可以利用这个机会,让HTML5技术突显出它的重要作用。
然而,并非所有的事情都能如人所愿。HTML5目前还处于发展的初级阶段,部分特性还不能完美的实现。下面列举出了HTML5的一些不足之处。
\
1. IE浏览器
IE浏览器是Web新技术发展道路上的绊脚石。IE6的辉煌时代已经结束,IE7也是这样,即便是IE8,也仍然不能称为一款“现代浏览器”。而IE9对HTML5的支持尚不完全,比如不支持Web Sockets和Web Workers。
由于IE8不支持ECMAScript5,因此开发者必须考虑怎样处理array.IndexOf、array. each、Date.now()、获取和设置属性、处理许多有用的Javascript包。
在IE8和IE9中,用户可以提交跨源请求,但不能使用XMLHttpRequest。
只有IE10可以称得上是“现代浏览器”,但是它不能在任何低于Windows 8的系统环境下运行。那么有多少比例的用户正在使用IE10呢?
2. 离线存储并不安全
当应用程序出现问题时,需要通过日志对它进行调查研究。但是如果应用程序运行好几天也不能发送一个日志,开发者就需要考虑客户端是否出现了问题。
日志记录会使客户端速度变慢、存储量增长,而且如果在发现问题时才进行日志记录就太晚了。而当前的HTML5技术,允许只存储最新的日志信息,使性能影响降到最低,并且当问题再次出现时,用户能够进行恢复。
当然,理想的做法是在后台写入日志来实现某种形式的离线存储(不影响客户端的响应),这样的话,当出现问题甚至是机器突然重启,日志也能恢复。
这个过程可以通过Webworker中的FileSystem API来实现。然而,当前只有Chrome浏览器支持FileSystem API。
用户可以使用localStorage来代替FileSytem API,可惜localStorage是一个同布API,它的大量的数据将会增加加载时间。
更糟糕的是,实际上不能在本地机器上存储未加密的日志,因为它们可能包含机密信息。然而目前的一些简单的日志记录方案看起来非常混乱,性能也不好,由于HTML5中没有针对存储的加密API,开发者还需要自己对这些日志进行加密。
3. 不能很好的支持窗口间共享
有时候你可能想在不同的窗口中共享同一个服务器的连接信息,现在可以使用postMessage来实现,但是你需要有你想发送消息的窗口的句柄。但是如何得知用户当前打开了哪些标签页呢?在Chrome中,不同的标签页使用不同的进程,这种功能对于创建长时间运行的应用程序非常有用。
在Firefox中不支持这一特性,但可以使用SharedWebWorker来代替。
你可以使用onstorage事件来对所有其他窗口进行广播,但问题是,并不是所有的浏览器都能提供进行存储事件的窗口的句柄。
4. Web Workers细节尚未完全实现
通常情况下,当在HTML页面中执行脚本时,页面的状态是不可响应的,直到脚本完成。而Web Workers是运行在后台的Javascript,独立于其他脚本,不会影响页面的性能和操作。
但遗憾的是,Firefox在Workers内部并不支持WebSockets。
无论是Chrome还是Firefox,都不能很好地解决基于代码位置的Worker脚本无法实例化页面本身的问题,因此代码库必须部署在为页面提供服务的同一个web服务器上,并且不能包含在不同层级的页面中,也无法在不更改代码的前提下为脚本文件重命名。尽管规范明确指出,worker脚本应该能够被相关的脚本实例化。
总结
HTML5是美妙的,它让开发者在研究新的、有趣的功能时候更有成就感。但是,当开发者遇到HTML5不能实现的功能或者不能很好支持该技术的浏览器时(特别是用户都在使用旧版IE时),又会充满挫败感。
HTML5正在快速向前发展,并将逐步实现标准化,相信在不久的将来,本文所列出的这些不足之处都将不复存在,届时,用户将有一个完全不同的互联网体验。
英文原文:The Pain of HTML5