以前总觉得javascript仅仅是一个浏览器端的脚本语言,完成操作DHTML和css。给网页一些动态性。对于Jquery、Dojo、 MooTool等也听说很久了,但是没有深入的了解。最近看Jquery的代码,发现javascript原来可以写的如此优雅和简介。再假设该最近 Node.js等服务器端javascript的发展,感觉自己对javascript的认识有很大的误区和局限,于是想仔细看看javascript的 前世今生。然后在把webkit的源代码品读一番,作为自己原来小觑javascript的补偿。
一:javascript的出生
计算机领域很多伟大的、庞大的技术,都有一个伟大的人物,现在在国内几乎没有那个公司可以独立的开发出浏览器。在很久之前有个人自己发明了 javascript。1994年的时候网景公司(NetScape)发布了世界上第一个比较出名的浏览器Navigator,这个浏览器仅仅可以浏览网 页,没有任何交互交互效果。当然那时候肯定更没有flash和Sliverlight技术。此时的浏览器估计就是一个有排版功能的记事本的样子。用户在表 单里面填写的任何信息,必须提交到服务器上面,有服务器进行校验然后在把结果返回给客户端,再由客户端提示给用户。这浪费了很大的时间和资源。于是函数式 编程的爱好者 布兰登·艾克(Brendan Eich) 登场了,他负责开发一门新语言,能够嵌入到浏览器里面执行,完成表单校验、html、css操作等功能。他仅用10天时间就完成了javascript的初版。他当时的设计思路大概是:
以下引用自阮一峰的blog
1:借鉴C语言的基本语法
2:借鉴Java的数据类型和内存管理。
3:借鉴Scheme语言,将函数式编程升级为一等公民
4:借鉴Self语言,使用原型(prototype)继承机制
最初叫LiveScript,在跟sun合作之后才改名为javascript。
二:Javascript引擎 javascript的设计之初,主要是嵌入在浏览器里面执行。浏览器主要有二部分构成,主要包括排版引擎和javascript引擎。主要出名的javascript引擎包括:
firefox浏览器
(1)SpiderMonkey
这算是第一款javascript引擎,由javascript的发明人布兰登.艾克在网景公司时用C语言写成。
(2)Rhino
由网景公司的Norris Boyd开发,用java语言实现。
微软IE
Chakra (JScript引擎),中文译名为查克拉,用于Internet Explorer 9的32位版本[1]及Internet Explorer 10。
Opera浏览器
Carakan,由Opera软件公司编写,自Opera10.50版本开始使用。
webkit的 JavaScriptCore
Webkit是一个开源的浏览器引擎,许多浏览器都用Webkit作为引擎,比如苹果的Safari,google的Chrome浏览器,android上的浏览器核心也是Webkit。Webkit包括WebCore的排版引擎和JsCore引擎。
(5)V8
是google的开源项目,是用于Google Chrome的js引擎
为了缩短由垃圾收集造成的停顿,V8 使用stop-the-world, generational, accurate 的垃圾收集器。[5]在执行回收之时会暂时中断程序的执行,而且只处理对象堆栈。还会收集內存内所有对象的指针,可以避免内存溢出的情况。V8汇编器是基于Strongtalk汇编器。
各个浏览器的内核了解,现在主流的的浏览器包括:IE、Firefox、Chrome、Opera、Safari。国产的浏览器主要有360、搜狗、QQ、UCWeb等浏览器、世界之窗等
先总结一下各大浏览器:
Firefox:和网景公司的NetScape有着天生的联系,初期的版本就是采用网景开放的源代码。布局引擎是
再总结一下国产的浏览器:
360浏览器:360安全浏览器是采用IE内核,是有世界之窗和360合作的东东。360极速浏览器是基于Chromium开源项目,同时又集成了IE内核。需要切换引擎。
搜狗浏览器:采用Ie内核和WebKit内核。
QQ浏览器5:采用Webkit的布局引擎和JavaScriptV8引擎,向Chrome靠拢。