因为随着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. 【IPHONE开发-OBJECTC入门学习】文件的操作,读写复制文件

    转自:http://blog.csdn.net/java886o/article/details/9041547 FileTools.h FileTools.m #import "FileT ...

  2. Android Activity之间的数据传递

    1.向目标Activity传递数据: Intent intent=new Intent(this,Main2Activity.class); //可传递多种类型的数据 intent.putExtra( ...

  3. odoo12 如何设置超级用户

    在odoo12的版本中,和之前的版本有点不一样的地方 在odoo12版本之前,每个实例都是使用户名为Administrator的默认用户来创建的. 在数据库中user_id是1. 在代码中,你会发现 ...

  4. flask flask_session,WTForms

    一.Flask_session 本质上,就是是cookie 下的session存储在redis中,方便快速取得session from flask import Flask,session from ...

  5. maven配置阿里云国内仓库

    <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http:/ ...

  6. 配置 application.properties

    # 数据库链接信息mysql.driver=com.mysql.cj.jdbc.Drivermysql.url=jdbc:mysql://localhost:3306/mydemo?character ...

  7. Vue (表单、斗篷、条件、循环指令,分隔符成员、计算属性成员、属性的监听、vue组件、子组件、各个常见的钩子函数)

    表单指令 <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF- ...

  8. LG2045 方格取数加强版 费用流

    问题描述 LG2045 题解 费用流. 套路拆点,把\((i,j)\)拆为两个点,在这两个点之间连边:一条边流量为\(1\),费用为\(a_{i,j}\),另一条边为流量为\(INF\),费用为\(0 ...

  9. 洛谷 P1016 旅行者的预算

    传送门 感觉自己连点生活常识都没有,竟然连油用过之后要减去都不知道,这种贪心模拟题都做不出来--思路在代码里,我菜死了 思路&&代码 //看题解过的..一点都没有成就感 #includ ...

  10. day 29

    Let the dead have the immortality of fame, but the living the immortality of love. 让逝者拥有不朽的荣誉,让生者拥有不 ...