在
傻才是王道 里面,我曾经谈过对标准的遵守问题,当时的主要看法是,没有必要去遵守w3c的标准 (我是自由主义者?) 原因是,浏览器本身就没有遵守w3c的标准,作为我们开发遵守了标准,用户却看到了hammered shit一样的页面,当然是没有意义的。或者说,在遵守标准和不遵守都可以达到类似用户体验的情况下,我们不要去遵守标准,因为那将带来额外的开销,正如json面对XML的胜利一样。
在微软IE开发team
最新的一个blog里面,谈到了类似的问题,其实他们也很累,作为一个用户如此众多的产品的开发,其第一条规则就是:“Don’t Break the Web” 没办法,已经开发好的数以十亿计网页,不能说每一个都要因为IE升级了都去重新开发一次。
在IE6的时候已经出现这个问题,所以不得不引入了
DOCTYPE switch开关来解决。
其实开发人员注意到最明显的可能就是IE7了,IE7对box model做了相当程度的更正(注意不是更新),原来IE中错误计算的css width属性现在终于正确了。不过相应的结果就是,无数的网页crash了,如果用户的浏览器升级到了IE7,他们的网站排版就乱掉了。
为什么Firefox, opera, Safari没有这样的问题呢?你不会因为升级Firefox而担心访问不了某个网站吧?原因很简单,微软自己也承认了:
The answer is that developers of many sites had worked around many of the shortcomings or outright errors in IE6, and now expected IE7 to work just like IE6.所以其实最终的问题是微软开发的产品的问题,作为一个市场份额如此大的厂商,它犯下一个错误,就是在迫使无数的开发人员跟它犯错,否则,我们怎么实现需要的那些功能呢?现在微软开始责备开发人员,说我们利用了它的错误,而且期待这些同样的错误在新版本中依然存在(让我想起了Quake雷神之锤里面的横移跳,本来是游戏的bug,后来在新版本中被移除,但由于玩家已经习惯这个bug并发展了相应的有趣的战术而提出抗议,后来ID software不得不把这个bug再重新加了回去)
确实,过度使用那些bug来实现一些特殊效果是不对的。不过对于某些效果来说,我不针对bug开发不行呀,毕竟有些时候我们必须保持页面的正常显示,最典型的例子就是css里面的width了。
IE8的标准符合得很好,已经
完美通过Acid2测试,并且提供了如下的兼容:
- “Quirks mode” remains the same, and compatible with current content.
- “Standards mode” remains the same as IE7, and compatible with current content.
- If you (the page developer) really want the best standards support
IE8 can give, you can get it by inserting a simple <meta>
element. Aaron gives more details on this in his article.
所以我觉得我有必要改变我的观点,对于绝大多数网页来说,遵守标准是必要的,浏览器在变,各种软件在升级,但是标准不变,毕竟重新开发的成本太大(我曾经做了多少网页呀)。我曾经举的例子也对不对的,google没有遵守标准,但是对于google首页这么hot的页面来说,确实没有必要遵守标准,因为可以确保有足够的人力,在浏览器升级发生的时候(甚至多半是之前),对其页面做相应的hack升级,利用各种新的旧的bug和非标准标准的特性。除了有足够的精力升级之外,对于google首页访问量这么大的页面来说,少一个字符,也可以使全球的网络流量每天减少上百亿字符的流量,所以,它的极度优化它的利用各种bug它的不加引号都是有道理的。
如果你认为自己的页面有足够的开发力量,如果你觉得自己网页的重要程度有必要做极端的优化,那么就做吧。否则,还是遵守标准的好,谁愿意把曾经的页面一个个找来重新做一遍。