Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

规范就如泡面,图案仅供参考

  泡面的包装袋上画的图案往往都是让人看着流口水的,但泡面实际上是什么样的东西大家都清楚。包装袋上的图案是“仅供参考”的,这和我们平时参考的规范文档一样的性质。包装的很华丽,逻辑看似非常严谨,但这不能吃,只能看的有什么用呢?
  ECMAScript中对各做操作定义了算法,但是那仅在逻辑层面上的东西。它不考虑性能,也不考虑实现的难度。所以很多引擎在实现上并没有使用规范给定的东西,而是自己实现。比如一个典型的问题,ECMAScript中给定的Array.prototype.shift方法,它的时间复杂度为O(n),这不是很蛋疼吗?为什么非要那么实现不可?如果是链表或是连续存储,O(1)的时间复杂度就可以搞定。当然,这对于hash表方式存储为主导的JavaScript来说实现起来有点难度,但也不是什么无法实现的东西。或者退一步说,就算必须使用O(n)的时间复杂度去实现,那至少也考虑下数组的稠密性吧?
<script>
var a=new Array(1E6),t=new Date;
a.shift();
console.log(new Date-t);
</script>

  这个测试是在一个巨大的空数组上执行shift操作,Chrome和IE都没有从ES提供的算法上按部就班,都是自己实现的。只有Firefox是完全遵循规范,即使不存在任何元素它也把整个数组遍历了一遍,所以它慢。而且不仅是shift,几乎所有方法在Firefox上都是最慢的。
  规范制定的初衷当然是好的,但如果符合规范会造成不良后果,我们就应该摒弃它。没有永远的规范,如果一个规范带来的是反效果,它就很有可能在将来被更先进的规范取代掉。规范的价值就和泡面的包装袋一样,我们可以参考它。包装袋上画着老坛酸菜那么里面就不会是鲜虾鱼板,这就已经为我们指导了方向。但千万不要以为包装袋上画着什么最终我们就能得到什么。
网名:
3.80.55.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^