首页 > 编程知识 正文

v8 源码分析,android嵌入自己的v8引擎

时间:2023-05-05 08:12:34 阅读:175634 作者:3082

文章目录识别JS引擎V8引擎原理V8引擎架构V8引擎的解析图

了解JS引擎为什么需要JS引擎? 1.`高级编程语言包括`转换为最终机器指令执行2 .我们平时写的js,即使交给`浏览器或Node '执行,最后也需要CPU执行3 .但是CPU只能识别自己的指令集JS引擎需要将JS代码翻译为CPU指令并执行的典型JS引擎是5.spidermonkey:Brendareick开发的第一个JS引擎。 也就是说JS作者6. Chakra :微软开发的IE浏览器7. JavaScriptCore:WebKit中的JS引擎,苹果公司开发了8. V8:Google开发的强大的JS引擎,Chrome 。

浏览器内核与JS引擎的关系

以WebKit为例,由两部分组成的第一部分webcore :负责html分析、呈现布局等相关工作的第二部分JavaScriptCore :分析执行JS代码

用小程序编写的JS代码由JSCore执行

V8引擎原理V8是用C编写的谷歌开源、高性能的JavaScript和WebAssembly引擎,实现了Chrome和Node.js等ECMAScript和WebAssembly,在win7及更高版本中使用在使用MAC OS 10.12和x64、IA-32、ARM或MIPS处理器的Linux系统上运行V8可以独立运行,也可以在任何c程序上运行工作流程图:

流程图分析:

parse:解析js代码,包括词法和语法分析,const name='lisi '; //词法分析:拆分js代码(const,name,=,' lisi ';) tokens=(type:(keyword ),value: const,) (type: ) identifier ),value: ) name,) . /语法分析对应的asasssas

const name='lisi '; 对应的JSON结构{ 'type': 'Program ',' start':' end': 20, ' body ' : [ { ' type ' : ' variabledeclarrary ] ' declarations ' : [ { ' type ' : ' variable declarator ',' ' id':{'type} 'end': 10,' name': 'name' } ' ',' init': { 'type': 'Literal ',' start ' ' end':113} '}}、' kind': 'const' } ]、' sourceType': 'module'} 扩展: babel将ts代码转换为js代码的过程ts==ast树==ast树==geneer es6传输es5ES6==AST树==es5http://www.Sina.com/:ast树要先转换成字节码吗? 答:代码的执行环境不是一定的。 不同的环境有不同的CPU体系结构,他们执行的机械指令也不一样。 ignition不知道应该转换成什么样的机械指令的代码。 bytecode字节码他是跨平台的v8引擎将字节码转换成相应的汇编代码,然后再转换成相应平台(window,Linux )的CPU指令) 0101 ) 333333333333333333306 提升ignition中运行次数多的代码性能的V8引擎架构V8引擎本身的源代码非常复杂,大约有超过100w行的C代码,通过了解他的架构,了解他如何对JS运行

ignition

此模块将JS代码转换为AST (抽象语法树)。 因为解析器不直接识别JS代码,所以这是一个Parse的V8官方文档,如果没有调用函数,它不会转换为AST。 https://V8.dev/blog/scanner 3358 www.Sina.com /

我是解析器。 将AST树转换为字节码。 如果只调用一次函数,ignition将分析运行ByteCode字节码ignition的V8官方文档https://V8.dev/blog/ignition-interpreter 3358 www

是编译器。 可以将ByteCode字节码编译为可由CPU直接执行的机器码。 当一个函数被多次调用时,它被标记为热点函数,经过涡轮风扇转换为优化的机器码。 要提高代码的执行性能,如果在后续函数的执行过程中类型发生变化(后续执行将变为字符串类型),当以前优化的机器代码无法正常处理运算时,它会反向转换为字节码TurboFan的V8官方文档。 https://V8.dev/blog/turbo fan-JIT V8发动机的解析图公式:

解析Blink (内核) HTML,在解析中遇到JS时下载并通过引流管传递给V8引擎的Stream )流)获取源代码并进行编码转换的Scanner )扫描仪) :进行词法分析时,会出现很多tone 由于直接分析所有代码会影响网页的运行效率,所以V8引擎实现了延迟分析方案。 他的作用是预解析不需要的函数,暂时只解析需要的内容,例如函数名,但函数的全量分析只有在调用函数时才能进行。 例如,一旦我们在fun函数中定义了fn函数,fn函数就预解析function fun () fn ) )/) ) ) 652

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。