因为随着JS这门语言的发展,JS的宿主越来越多,有各种各样的浏览器,甚至是常见于服务端的Node.js(基于V8运行)。

2.       Webkit 源代码由三大模块组成:

1). WebCore,

2). WebKit,

3). JavaScriptCore。

WebCore:排版引擎核心,WebCore包含主要以下模块:Loader, Parser(DOM,Render), Layout,Paint。

WebKit:移植层,主要包含: GUI,File System, Thread,Text,图片编解码等与平台相关的函数。

JavaScriptCore:JS虚拟机,相对独立,主要用于操作DOM, DOM是W3C定义的规范,主要用于定义外部可以操作的浏览器内核的接口,而webcore必须实现DOM规范。

https://www.cnblogs.com/feng9exe/p/10300273.html

1Webkit:

1.1 webkit结构分析

Webkit主要包括三个模块:WebCore 渲染引擎、JavaScriptCore 脚本解析引擎和WebKit 外壳。其中,WebCore 渲染引擎模块及JavaScriptCore 脚本解析引擎模块共同完成内核功能,组成了浏览器内核。另外,WebKit 也是整个浏览器引擎工程的名字。

在WebKit 工程中,不同的文件夹就相应的对应了不同的功能模块。其主要的功能模块如:一、WebKit:浏览器外壳模块,它隐藏并选择WebCore 渲染引擎到当前平台。WebKit 实际上相当于一个抽象化的浏览器外壳,它隐藏浏览器渲染引擎WebCore,并向UI 曾提供一些抽象的功能。

二、JavaScriptCore:JavaScript 脚本解析引擎,其中:KJS:JavaScript 内核。JavaScript 内核支持如下内核类:String(字符串)、Math (计算)、Number(数字)、Boolean (布尔型变量)、Date (日期)、Array(数组)、Regular Expression (正则表达式)JavaScriptCore 是可扩展的。API:基本JavaScript 功能,实际就是JavScript 的对外接口函数库。DerviedSource:yacc 自动产生的代码,主要用于Java Script 脚本的解析。WTF:KDE 的C++模板库。

三、WebCore:是整个项目的核心,用来实现渲染引擎,解析Web 页面,生成一个DOM 树和一个render 树,并最终render 这个树。其具体模块如下:1.Page:与外框相关的内容(Frame,Page,History,Focus,Window);2.Loade:加载资源及Cache;3.HTML:DOM HTML 内容及解析;4.DOM: DOM CORE 内容;5.XML:XML 内容及解析;6.Rendering:排版功能;7.CSS:DOM CSS 内容;8.Binding:提供DOM 与JavascriptCore 绑定的功能,并提供对JavascriptCoreAPI 的扩展,实现了Web 的主要类,如:窗口类、文档类、表格类、单元类等。

还包括Bridge:与其它功能绑定的功能,如:DOM,C,JNI,Plugins 等。Editing:所有与编辑相关的功能。DerviedSource:yacc 自动产生的代码,主要是与CSS 模块一起负责对CSS的支持。ForwordHeads:头文件,无实际意义。Plugins:插件功能。Storage:与数据库存储相关的功能。ICU:多语言支持,IBM ICU 库。History:与历史纪录相关功能。Platform:与平台相关的功能,如图形图像、字体、Unicode、IO、输入法、网络等。

图1 Webkit体系结构

图1 表示了WebKit 主要功能模块之间的依赖关系。其中,渲染引擎WebCore 以及JavaScrip t 脚本解析引擎JavaScriptCore 是我们将要移植的WebKit内核。在移植的基础上,我们将开发基于CAR 构架技术和欣浏览器外壳,该外壳其实相当于图中的WebKit 模块,它将隐藏浏览器渲染引擎WebCore 以及JavaScript 脚本解析引擎JavaScriptCore,并向UI 曾提供一些抽象的功能。

https://www.cnblogs.com/feng9exe/p/6676114.html

The JavaScriptCore Framework provides the ability to evaluate JavaScript programs from within Swift, Objective-C, and C-based apps. You can use also use JavaScriptCore to insert custom objects to the JavaScript environment.

JSCore是WebKit默认内嵌的JS引擎,之所以说是默认内嵌,是因为很多基于WebKit分支开发的浏览器引擎都开发了自家的JS引擎,其中最出名的就是Chrome的V8。这些JS引擎的使命都相同,那就是解释执行JS脚本。

jscore 与 node.js  jsbridge

JavaScriptCore在浏览器引擎中的位置的更多相关文章

  1. 找到你的位置(JS在页面中的位置)最常用的方式是在页面中head部分放置<script>元素,浏览器解析head部分就会执行这个代码,然后才解析页面的其余部分

    找到你的位置(JS在页面中的位置) 我们可以将JavaScript代码放在html文件中任何位置,但是我们一般放在网页的head或者body部分. 放在<head>部分 最常用的方式是在页 ...

  2. How Javascript works (Javascript工作原理) (二) 引擎,运行时,如何在 V8 引擎中书写最优代码的 5 条小技巧

    个人总结: 一个Javascript引擎由一个标准解释程序,或者即时编译器来实现. 解释器(Interpreter): 解释一行,执行一行. 编译器(Compiler): 全部编译成机器码,统一执行. ...

  3. python之Phantomjs无界面浏览器引擎自动化测试

    文字搬运工,本文主要介绍PhantomJS功能,其中有屏幕快照功能,为后面更新[python接口自动化脚本更新版本],其中新版本中新增自动发送邮件功能正文带图片,使用PhantomJS截取图片后发送邮 ...

  4. IE/Firefox/Chrome等浏览器保存Cookie的位置

    IE/Firefox/Chrome等浏览器保存Cookie的位置 原文  http://smilejay.com/2013/04/browser-cookie-location/   前面写了篇长文( ...

  5. 原生JS获取各种高度宽度、浏览器窗口滚动条的位置、元素的几何尺寸名

    1)关于 pageX, clienX,offsetX,layerX pageX:鼠标在页面上的位置,从页面左上角开始,即是以页面为参考点,不随滑动条移动而变化 clientX:鼠标在页面上可视区域的位 ...

  6. 如何获取浏览器URL中查询字符串的参数

    首先要知道Location这个对象以及这个对象中的一些属性: href:设置或返回完整的url.如本博客首页返回http://www.cnblogs.com/wymninja/ host:设置或返回主 ...

  7. Innodb引擎中Count(*)

    select count(*)是MySQL中用于统计记录行数最常用的方法,count方法可以返回表内精确的行数. 在某些索引下是好事,但是如果表中有主键,count(*)的速度就会很慢,特别在千万记录 ...

  8. python3+selenium框架设计05-配置文件和浏览器引擎类

    python3配置文件的增删改查等操作可以使用内置的ConfigParser模块,可以自行百度学习,也可以看Python3学习笔记27-ConfigParser模块 配置文件一般存放着环境信息,比如u ...

  9. JS获取浏览器URL中查询字符串的参数

    首先要知道Location这个对象以及这个对象中的一些属性: href:设置或返回完整的url.如本博客首页返回http://www.cnblogs.com/wymninja/ host:设置或返回主 ...

随机推荐

  1. Java变量声明和赋值

    Java的8种基础类型变量声明,在得到Java 11支持后会有新的语法糖 基础数据类型一共有8种 整数类型:byte.short.int和long 小数类型:float和double 字符类型:cha ...

  2. 结对编程(-java-实现)

    一 .Github项目地址:https://github.com/mushan520/Four-fundamental-rules-java.git                           ...

  3. element-ui的form表单样式改动

    造成下面样式错乱是下面自带的css样式,原本打算通过样式重写在组件内的style,发现下面相应的元素是出于封装情况的,无论样式重写在组件还是在公共样式均不能很好的解决,因为跳转到该页面时都要刷新一次, ...

  4. Lumen5.7快速实现Captcha图片验证码功能

    公司发送短信注册的接口需要防刷,需要一个图形验证码,不考虑收费产品. Lumen5.7+nginx+mysql 使用了这个作者的扩展包,只讲实现.https://github.com/Youngyez ...

  5. mssql 收缩日志

    --设置简单模式 USE[master] GO ALTER DATABASE mindeemes_spy SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATAB ...

  6. JMETER 用户变量作用域

    在编写JMETER 脚本时,我们会使用到变量,变量的作用域是线程. 我们通过下面的脚本验证一下变量的返回是线程. 1. 我们先定义一个amount的流程变量. 2.线程组使用三个线程 3.在线程组中添 ...

  7. 004-OpenStack-计算服务

    OpenStack-计算服务 [基于此文章的环境]点我快速打开文章 1.控制节点(controller) 1.1 创库授权  nova_api, nova, 和 nova_cell0 mysql CR ...

  8. Linux---基本目录与文件命令

    一.目录 1.显示工作目录命令pwd 2.改变工作目录命令cd 3.创建目录命令mkdir 二.文件 1.创建空文件命令touch 2.显示文件列表ls 3.复制文件或目录命令cp 4.删除文件或目录 ...

  9. XLNet原理探究

    1. 前言 XLNet原文链接是CMU与谷歌大脑提出的全新NLP模型,在20个任务上超过了BERT的表现,并在18个任务上取得了当前最佳效果,包括机器问答.自然语言推断.情感分析和文档排序. 这篇新论 ...

  10. Spring(003)-消费返回list的rest服务

    通过spring提供的RestTemplate就可以访问rest服务.首先需要创建一个RestTemplate,这个需要手动来创建bean @Configuration public class De ...