小侃js------聊天记录摘要(感谢@民工屌丝)

1 篇文章 0 订阅
google的工程师团队认为,JavaScript随着时间的推移,其在“开放式Web”中的分布式应用程序方面已经无法胜任功能上的核心角色。比起结构化更彻底、面向对象特性更明确的C#及Java,JavaScript工作起来总会带来一些无法清除的累赘因素。而与诸如Python、Ruby以及D之类更为智能化的动态语言相比,JavaScript又显得比较啰嗦,无法迅速切入主题。

google的开发v8引擎的团队对js发出如下评价:“JavaScript 语言与生具来的残疾是无法通过进化改善的。”

他们非常认真严肃的指出了JS的最致命的问题:最大的瓶颈源于 JavaScript 是非主流语言的本质。

JavaScript 是基于原型(Prototype-based)的编程语言,而现在最主流的对象编程语言都是基于类(Class-based)的。两者根本的区别在于,迥异的视角产生的不同方法论。

在chrome的JS V8引擎以及Mozilla出品的TraceMonkey这些最新一代JavaScript引擎中,大部分的工作负载都是在将那些由js不理想的指令所带来的“垃圾代码”转化为少些混乱、多些严谨的有序代码。其实本质上是在解释层对JS代码进行模块化封装(就算你用原生JS也会被翻译处理成类框架方法)

基于类的语言逻辑来自分类学(Taxonomy),自上而下进行实现。程序员先要理清楚各种类之间的关系,定义好各种类,才能写出类下面的实例(可用对象)。而基于原型的语言逻辑来自认知论,举一反三进行实现,更符合人类正常认知的模式。程序员先关注几个个例的具体行为,之后再分类使用。不恰当比喻说明,如果让基于类的语言写出一个男人,要先找到人类。然后创建一个男人子类,子类具有人类一切属性且有男性性征。之后在男人子类创建出具体的男人甲。而基于原型的语言,可以先观察女人和公猿,然后删删减减拼拼凑凑得到一个男人的原型,之后按照原形创建一个男人乙。


可以看出,基于类的编程主要方法是继承,男人子类继承了人类所有属性,男人甲拥有男人子类所有属性并赋了值,比如身高 175 体重 300 斤。而原型编程主要方法是克隆,男人原型克隆了女人的智商和皮肤属性,公猿的性腺和嗓音属性等等其它不细说了,请自行脑补。

计算机科学史上,先出现的是基于类的语言,后来才有基于原型的语言。前者在对象编程领域一直是主流,大学里教的主要是这个,多数研究也集中在这个领域。而原型编程,虽说由于 JavaScript 的存在使用的很多,但和基于类的编程相比还是非主流状态。这就导致了一些相对劣势。

由于缺乏对类的支持,而很多开发人员又习惯基于类编程。很多 JavaScript 库模拟了自己的类对象,便于开发人员调用。看上去现在两全齐美了,其实没有。关键问题是,性能。比如大家都很熟悉的各种开源的JavaScript框架类。

拜 Google 所赐,JavaScript 拥有目前世界上最有技术含量最复杂的脚本引擎,速度和其它脚本语言相比无以匹敌。Google 对 JavaScript 的最主要提速来自 JIT(Just-in-time) 编译,把 JavaScript 预编译成机器码,在执行时直接调用机器码提升效率。事实上,JavaScript 引擎相当复杂,且提速越来越难。这也跟 JavaScript 非主流原型编程有关。

基于类的语言,同类实例的数据结构和方法都相同,男人甲乙丙丁都有身高体重胸围,无非是数值区别。这种情况下,脚本引擎只需要优化该类一次,生成本地码,之后反复套用,自然会有效率性能提升。

而原型语言不同,没有类的概念。传统原型语言引擎的经典方法是给出一个大字典(HashMap),每次调用具体数值都去查字典,如此操作费时费力。可如果引擎按照类语言进行预编译,又不知道编译出来的本地码后面是否被频繁调用。有时甚至得不偿失,花在预编译上的时间还未必比查字典少。Google 的 V8 引擎则另辟蹊径,分析发现 90% 的JavaScript object 是有规律可循的。于是他们总结规律,人为地生成隐藏类,对隐藏类进行优化编译。当扫描的符合条件 JavaScript 代码时,自动调用事先编译好的机器码执行。

现在你知道原型语言 JavaScript 为开发者和引擎造成了多大的拧巴。这种复杂性带来的维护成本上升,开发门槛提高。Netscape的开发团队 在90年代拍拍脑门,花了约2个工作周的时间,给人类制造了一个科技发展史上最大的麻烦。如果JavaScript要是用了主流类语言,就不会有后来日子里的这么多麻烦。

总所周知,在后来的日子里,微软、Mozilla、苹果、谷歌等IT巨头,都对JavaScript进行了更多的改进,不断升级JavaScript的版本和功能。但是大家都以自家浏览器为出发点进行对JavaScript的改造工程。其结果是使得全世界的JavaScript工程师们陷入更大的不断纠正和修整JavaScript代码在各个浏览器里的兼容性和性能问题。

WEB世界非常需要一个统一的,能在所有现代浏览器和各种平台上统一使用的,有着丰富的内置功能、完整的资料库、庞大的开发生态环境的,基于类的结构化的Web编程语言。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值