关于不同浏览器的内核与引擎--记录一下

2023-11-13

https://www.cnblogs.com/gdutbean/archive/2012/02/21/2362003.html

https://www.cnblogs.com/guanghe/p/11719334.html

js引擎介绍

几种JS 引擎介绍(不同浏览器有不同的引擎)
JS 各种引擎介绍

http://www.oschina.net/project/tag/296/javascript-engine

 

 

不同浏览器有不同的JS引擎:

WebKit , Safari浏览器          ->SquirrelFish Extreme,

Firefox                                    àTraceMonkey引擎

Google Chrome                     àV8引擎,(C++)

Opera                                   -> Carakan

 Mozilla                          ->SpiderMonkey(C语言)

 Mozilla                                  à Rhino( Java)

Mozilla                          ->JaegerMonkey

 

SEE (Simple ECMAScript Engine) C语言开发的轻量级的 ECMAScript (JavaScript) 解析器和实时运行环境

 

 

 

(1)javascript 解析引擎 V8(C++)

 http://www.oschina.net/p/v8

 

V8 是 Google 发布的开源 JavaScript 引擎,采用 C++ 编写,在 Google 的 Chrome 浏览器中被使用。V8 引擎可以独立运行,也可以用来嵌入到 C++ 应用程序中执行。\

 

 

 

(2)javascript 脚本引擎 SpiderMonkey (c语言)

http://www.oschina.net/p/spidermonkey

 

SpiderMonkey是Mozilla项目的一部分,是一个用C语言实现的JavaScript脚本引擎,另外还有一个叫做Rhino的Java版 本。

为了在SpiderMonkey中运行JavaScript代码,应用程序必须有三个要素:JSRuntime,JSContext和全局对象。
运行时环境

JSRuntime,为其中的JavaScript变量、对象、脚本和应用程序中使用的上下文分配空间。每个JSContext和脚本中的每个对象都生活在一个 JSRuntime中。他们不能转移到其他运行时上或在与其它运行时共享。一般来说大多数应用程序只需要一个运行时环境。
上下文

JSContext,就像是一台小机器,它涉及JavaScript代码和对象的很多东西。它可以编译和执行脚本、获取和设置对象属性、调用 JavaScript函数、一种类型转换为另一种JavaScript数据、创建对象,等等。几乎所有JSAPI函数都要一个JSContext*作为其第一个参数,就像<stdio.h>中的大多数函数都需要FILE*一样.
全局对象

全局对象包含所有可以在JavaScript代码中使用的类、函数和变量。

当JavaScript代码要做一些事时,比如window.open("http://www.mozilla.org/"),实际上它是在访问一个全局属性(全局对象的属性),在这里是window。

脚本能看到的全局属性完全由应用程序控制。应用程序首先创建一个对象并加入JavaScript标准类,如Array和Object。然后加入任何程序想加入的自定义的类、函数和变量(象这里的window)。应用程序每次运行js脚本(例如使用JS_EvaluateScript)时提供了该脚本使用的全局对象。至于脚本,它也可以创建自己全局函数和变量。所有的这些函数、类和变量都作为属性存储在全局对象中。

 

 

(3)JS 解析器 rhino(Java)

 

http://www.oschina.net/p/rhino

 

 

Rhino是用纯Java写成的JavaScript的开放源代码实现。它最常被用于嵌入Java应用程序,以便为终端用户提供脚本的能力。

 

 

 

(4)JavaScript 解析引擎 Simple ECMAScript Engine(C语言)

 

http://www.oschina.net/p/SEE

 

 

SEE(Simple ECMAScript Engine) 是一个用C语言开发的轻量级的 ECMAScript (JavaScript) 解析器和实时运行环境。支持ECMAScript Edition 3, JavaScript 1.5 。

 

 

 

(5) JavaScript引擎 SquirrelFish Extreme
 

http://www.oschina.net/p/squirrelfish+extreme

 

几周前 Google Chrome 发布之后,因其创新的 UI 以及出色的 JavaScript 执行效率而备受赞誉。最近,作为 Safari 与 Chrome 浏览器内核的 WebKit 发布了一个新 JavaScript 引擎,SquirrelFish Extreme,经过测试,该引擎的在执行速度上明显超过 Chrome 的 V8。下图是性能的比较

 

(6) JavaScript引擎 Carakan
http://www.oschina.net/p/carakan

 

Opera全新JS引擎Carakan,目前数度是其他已存在JavaScript引擎(基于SunSpider)的2.5倍。其在转化为本地机器代码时专门针对正则表达式做了优化,有意思的是,Chrome浏览器也刚刚宣布了此点。

Carakan引擎的三个显著新特性:

1.基于寄存器的字节码:之前的引擎“ECMAScript”使用的是基于堆栈字节码指令集,这种基于对堆栈存取的方法对于生成字节码是比较简单的。

在新的引擎里,我们采用了基于寄存器的字节码指令集,这种方式采用了固定大小的寄存器,每次操作都可以访问任意的寄存器,更少的指令被执行并且不会拷贝大量的数据。

2.本地代码生成:我们将整个或部分“ECMAScript”引擎编译到本地代码中以达到更快的执行速度。

3.自动对象分类:在新的引擎中每个对象都是被封装成类以存取不同的数据,这些类的划分是与原型保持一致的。

每个浏览器的JS引擎都不一样吗?

现在每个浏览器基本上都有自己的JS引擎(非浏览器引擎)了,如Firefox浏览器的TraceMonkey引擎,Google Chrome浏览器的V8引擎,Safari浏览器有SquirrelFish Extreme,目前又增加了Opera的Carakan。

 

 

(7) 新一代JavaScript引擎 TraceMonkey
http://www.oschina.net/p/tracemonkey

 

TraceMonkey是套开放源代码、以C++语言所编写的新一代JavaScript引擎,于2008年8月23日正式发布。目前为Mozilla的Firefox网页浏览器3.5、3.6版本所使用。

TraceMonkey采用了尔湾加州大学团队Andreas Gal、Michael Bebenita、Mason Chang和Gregor Wagner所贡献的“Tracing”技术,Andreas Gal目前为TraceMonkey的项目领导人、以及Mozilla和Adobe所合作的Tamarin计划所开发的“Nanojit”技术。

 

 

(8) JavaScript引擎 JaegerMonkey
http://www.oschina.net/p/jaegermonkey

 

Mozilla预计将在9月1日发布JaegerMonkey引 擎,因此JaegerMonkey将被整合到Firefox 4.0。

V8基准测试显示,JaegerMonkey引擎积分为6829 ms,TraceMonkey引擎积分为6841 ms。Sunspider测试显示,JaegerMonkey引擎仍然要落后于TraceMonkey引擎——754 ms vs. 718 ms,而且JaegerMonkey引擎运行速度仍然落后于Webkit浏览器,Chrome和Safari的积分都要低于400 ms,Chrome浏览器的积分甚至逼近300 ms。Opera的积分也低于300s。

JaegerMonkey引擎在今年初发布是,其目标是突破Sunspider测试的500 ms大关。当然,这已经无法满足一般用户的需求了,毕竟连IE9开发版积分都已经低于500 ms。Mozilla还表示,JaegerMonkey引擎的目标是要超越竞争浏览器,这就意味着Mozilla的目标是300ms以下。

Mozilla称,JaegerMonkey是重新编写的,过去8周的时间JaegerMonkey已经有很大的改进。在下面6周的时 间,Mozilla将完善JaegerMonkey引擎,为9月1日顺利发布做好充分地准备。

Mozilla宣传,JaegerMonkey引擎的运行速度是竞争浏览器10多倍。

 

 

(9) Web浏览器引擎 WebKit
http://www.oschina.net/p/webkit

 

WebKit是开源的Web浏览器引擎,苹果的Safari、谷歌的Chrome浏览器都是基于这个框架来开发的。WebKit 还支持移动设备和手机,包括iPhone和Android手机都是使用WebKit做为浏览器的核心。

 

(10)WebKitGTK+

http://www.oschina.net/p/webkitgtk

WebKitGTK+是可移植渲染引擎WebKit在GTK+平台下的接口。

浏览器内核与JS引擎

一、主要概念

1,浏览器内核

  最初内核的概念包括渲染引擎与JS引擎,目前习惯直接称渲染引擎为内核,JS引擎独立。

最初:

因此以前称,chrome浏览器使用Chromium内核,blink渲染引擎,V8JS引擎。

目前:

因此现在称,chrome浏览器使用blink内核,V8JS引擎。

2,渲染引擎

  Rendering Engine,一般习惯将之称为“浏览器内核”,主要功能是解析HTML/CSS进行渲染页面,渲染引擎决定了浏览器如何显示网页的内容以及页面的格式信息。

3,JS引擎

  专门处理JavaScript脚本的虚拟机、解释器,用来解释执行js代码。在早期内核也是包含js引擎的,而现在js引擎越来独立了,可以把它单独提出来。

二、主要浏览器内核

Chrome     webkit->blink

Firefox     Gecko

Safari    webkit

Opera     Presto->blink

IE -> Edge    trident->EdgeHTML

备注:最近消息说微软要把edge浏览器引擎换成Chromium内核,看来trident与EdgeHTML算是结束了。

三、主要JS引擎

Chrome     V8

Firefox    SpiderMonkey(1.0-3.0)/ TraceMonkey(3.5-3.6)/ JaegerMonkey(4.0-)

Safari     Nitro(4-)

Opera Linear A(4.0-6.1)/ Linear B(7.0-9.2)/ Futhark(9.5-10.2)/ Carakan(10.5-)

IE -> Edge    JScript(IE3.0-IE8.0 / Chakra(IE9+之后)

备注:SpiderMonkey是第一款JS引擎,JavaScript之父Brendan Eich在网景的时候写的,从某种意义上来说,火狐才是正统。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于不同浏览器的内核与引擎--记录一下 的相关文章

  • 组播技术

    1 概述 1 1 产生背景 传统的IP通信有两种方式 一种是在源主机与目的主机之间点对点的通信 即单播 另一种是在源主机与同一网段中所有其它主机之间点对多点的通信 即广播 如果要将信息发送给多个主机而非所有主机 若采用广播方式实现 不仅会将
  • C语言和mfc按格式读取文件数据

    fscanf 函数的功能是从文件中按格式读取一个或多个数据 例如文件中有一行数据 22 3 34 hello 则使用 fscanf fp d f s a f str 可一次读取整型 浮点 字符串三个数据 此函数位于C标准库头文件
  • logback 自定义指定日志文件存储目录

    1 正常使用 定义一个logback xml配置文件即可
  • Echarts图表中pie类型tooltip中formatter函数传递的参数从哪里来?

    最近参与一个项目遇到一个问题 这个tooltip提示框信息怎么配 找了好久最终配置成功 分享到这里大家共享一下 能节省不少时间 首先可以看一下系统介绍的文章 里面知识点比较多 也有注释 讲的很全 推荐大家看一下 Echart自定义Toolt
  • PreScan笔记(1)——入坑之简单介绍和Demo

    文章目录 PreScan 小白入坑 1 PreScan简单介绍 2 First Demo 简单介绍实验的基本四步 具体流程 与MATLAB连接过程中的问题 参考 PreScan 小白入坑 本人最近才接触PreScan 最近也略微熟悉了GUI
  • 有关cocos2d创建c++项目,并把win32项目打包成apk文件

    首先进入cocos2d资源包文件夹例如 cd D Cocos Cocos2d x cocos2d x 3 10 再输入cocos new try项目名 p org cocos2dx 包名 l cpp d codes 创建cocos2d 3

随机推荐

  • Java_多重循环执行流程(Java基础第一座山)

    一 介绍 1 将一个循环放在另一个循环体内 就形成了嵌套循环 其中 for while do while均可以作为外层循环和内层循环 建议一般使用两层 最多不要超过三层 否则 代码的可读性很差 2 实际上 嵌套循环就是把内层循环当成外层循环
  • leetcode分类刷题:滑动窗口(四、两个序列+窗口不定长类型)

    1 同样是给定两个序列 判断短序列在长序列中最短的覆盖连续子序列 那么此时的滑窗长度就大于等于短序列长度了 变为不定长的了 2 本文总结的题型短序列同样为滑动窗口 哈希表 matchKeys标记 覆盖的键数量 这里的覆盖含义恰好为上篇总结中
  • Qgis二次开发包下载及配置

    实习已经一个多月了 这周的任务需要用到qgis 所以首先需要编译并配置好这个库 自己尝试编译这个库 但是感觉很复杂 中间出的问题没能解决也就放弃了 还得找时间再试试 后来在网上找到了另外一个教程 其中提到可以利用Osgoe4W下载qgis二
  • 车牌识别-模板匹配-BP神经网络-卷积神经网络[深度学习]

    文章来源 http blog csdn net fighting dreamer article details 56285738 1 车牌识别的步骤 车牌定位 车牌分割 字符识别 正如上面所讲 车牌识别主要分为3个部分 其中第一部分车牌定
  • 微信小程序(十一)在wxml中使用自定义函数

    背景 我们有时候需要在wxml中使用一些运算 包括但不限于四则运算 三目运算等 我们如果想要使用自定义的一些方法 就需要使用wxs来实现了 下面代码简单介绍了列表中倒计时的实现方法 以及使用wxs把时间戳转换为年月日时分秒的方法 详见代码
  • uni-app 全局变量的几种实现方式

    公用模块 定义一个专用的模块 用来组织和管理这些全局的变量 在需要的页面引入 示例如下 在 uni app 项目根目录下创建 common 目录 然后在 common 目录下新建 helper js 用于定义公用的方法 复制代码const
  • 【ONNX】pytorch模型导出成ONNX格式:支持多参数与动态输入

    pytorch格式的模型在部署之前一般需要做格式转换 本文介绍了如何将pytorch格式的模型导出到ONNX格式的模型 ONNX Open Neural Network Exchange 格式是一种常用的开源神经网络格式 被较多推理引擎支持
  • 老司机都在用的浏览器,体积小功能齐全,直呼内行

    现在市面上的浏览器简直是多不胜数 虽然数量多 但是好用的并不多 尤其是某些大厂的浏览器 无用的功能越来越多 越来越臃肿 体积也越来越大 使用体验还不好 有时候甚至不如一些小众浏览器 今天给大家安利2款老司机都在用的手机浏览器 体积非常小 但
  • 刷脸支付对商家来说有着巨大的应用价值

    科技发展永不停止 一步一步改善着我们的生活 回顾支付方式的变化 从最初的以物易物到货币再到移动支付 一步步的发展都越来越便捷 而刷脸支付相比于扫码支付 省去了手机这个中间媒介 用人脸作为支付凭证 大大提升了付款效率 在现如今的科技下 可以毫
  • STM32F407移植FATFS文件系统(版本 R0.09b)支持长文件名和中文名称

    FatFs文件系统 默认是不支持长文件名和中文名称的 要想支持长文件名和中文名称 需要打开ffconf h文件进行配置 一 支持长文件名 FatFs文件系统 默认是不支持长文件名的 要想支持长文件名 需要打开ffconf h文件进行配置 找
  • linux下的vsftpd的db_load命令

    db load是linux下创建虚拟账户 选项 T允许应用程序能够将文本文件转译载入进数据库 由于我们之后是将虚拟用户的信息以文件方式存储在文件里的 为了让Vsftpd这个应用程序能够通过文本来载入用户数据 必须要使用这个选项 指定了选项
  • 第十六篇

    Ln Linux ln 英文全拼 link files 命令是一个非常重要命令 它的功能是为某一个文件在另外一个位置建立一个同步的链接 当我们需要在不同的目录 用到相同的文件时 我们不需要在每一个需要的目录下都放一个必须相同的文件 我们只要
  • 【无人机】采用最基本的自由空间路损模型并且不考虑小尺度衰落(多径多普勒)固定翼无人机轨迹规划(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 文献结果 2 2 Matlab代码复现结果 3 参考文献 4 Matlab代码及文章
  • SQLServer帐号管理

    1 用户的创建 如图所示 右击 登录名 选中新建登录名 2 如何创建数据库用户 在数据库的下面 创建用户名 同时通过 浏览 按钮 关联想要授权的登录账号 3 给用户分配权限 注意 此处是给需要分配权限的数据库中的用户 进行安全对象的管理 例
  • 联想笔记本Ideapad300S-14ISK安装固态硬盘和win10

    1 拆机 把背面的螺丝钉拧开 拿个卡找个缝插进去转一圈就打开了 2 内存 先把电源排线拔掉 排线旁边有标识 和 内存条外面盖着一个金属壳 把四周的小固定扣压下去就能打开 内存条型号DDR3L 买了个DDR4才发现插不进去 3 固态硬盘 把机
  • visio使用技巧

    出处 blog作者 卡纳瓦罗 里面的东西主要是看了吕贤聪的 visio2003视频教程 后总结的一些技巧 还有平时应用visio时的一些心得 1 鼠标按住尺规的边缘往外拉 会拉出一条绘图辅助线 帮助绘图 精确定位 按del键就会消失 而且选
  • 多线程与同步代码块详解

    线程是程序执行的一条路径 一个进程中可以包含多条线程 多线程并发执行可以提高程序的效率 可以同时完成多项工作 多线程并发执行的实质就是CPU在做着高速的切换 多线程的应用场景 红蜘蛛同时共享屏幕给多个电脑 迅雷开启多条线程一起下载 QQ同时
  • 微芯I/O控制器瞄准工业与嵌入式运算应用

    微芯科技 Microchip Technology 日前发布SCH322X系列I O控制器新品 该系列产品基于工业及嵌入式开发工程师的需求而开发 功能丰富且具高灵活性 新一代I O控制器系列拥有尺寸更小的包装和更长的产品生命周期 可运用于更
  • caj转pdf

    https caj2pdf cn
  • 关于不同浏览器的内核与引擎--记录一下

    https www cnblogs com gdutbean archive 2012 02 21 2362003 html https www cnblogs com guanghe p 11719334 html js引擎介绍 几种JS