有关您的 javascript 函数编译(上)

作者 : 开心源码 本文共1385个字,预计阅读时间需要4分钟 发布时间: 2022-05-12 共162人阅读

懒编译您 javascript

marja 的 parsing javascript better lazy than eager

解析什么是解析

  1. 解析 javascript code 为 AST 和 Scope 作用域
    今天我们之关心这部分内容
  2. 生成字节码, 这个字节码用于解释器
  3. 优化编译为机器码在 电脑上执行

我们通常认为 javascript 是一门解释性还是编译的语言呢

sum(1,2)function sum(a,b){    return a + b;}
function foo(){    let a = 0;    if(a == 0){        let b = "bar";        return a;    }}

从上面代码运行没有问题来看 javascript 应该属于编译语言。

准备用 mac 的 keynote 画树形结构图,感觉连线有点吃力放弃了。

  1. 第一层是 foo 函数对应节点 FunctionIterial
let a = 0;
  1. 当我们 公告创立一个变量同时就生成一个变量的代理商。 而后就是我们的赋值语句。分别是变量代理商和
if(a == 0){    let b = "bar";    return a;}
  1. 看一下我们的 条件语句
    由于没有 else 只有 if 所以就走 then。

作用域分析

# 为什么我们需要关注解析

由于我们parsing

不同的浏览器对lazy定义也不同,因为 javascript 本身并没有 spec 来定义lazy

#### V8 有两种有两种解析模式

  • eager parser 进行完全的解析, 构建 AST、 构建作用域, 检查语法错误。
  • lazy preParser 构建 scope(作用域)而不构建 AST,

lazy 和 eager

let a = 0;//IIFE (immediately invoked function express)(function() eager() { // stuff })();function lazy(){ //stuff }lazy();
  1. 通过()()包裹函数是立即执行函数
  2. 即便 lazy 在最顶层被定义,lazy 也是 懒函数,只有在调用才会执行。
!function eager2(){ // stuff },function eager3(){ // stuff }

在函数前面增加 ! 表示这个函数是立即执行函数, 后面通过逗号间隔的也同样是立即执行函数。

也有少量特殊的情况

let f1 = function lazy() { // stuff }let f2 = function lazy(){ // stuff }()

f1 变量接受 lazy 函数作为值,作为懒函数来解决
f2 接受这个函数执行的结果作为 f2,首先我们看 lazy 应该是懒函数,但是他被立即执行了。

那么 懒函数跟我们有关系吗?

由于不是所有加载 javascript 都会被执行的,所以我们需要赖 加载来提高效率。

  • 假如一个 eager 立即编译函数 没有被 调用, 这就是一种白费。
  • 假如 一个懒函数被 执行了,当然也是一种资源的白费,由于我们将这个函数编译了两次,第一次 编译可能需要 0.5 ,第二次又进行 了编译,所以一共 1.5 时间。

强制 函数为立即编译模式

    (function a(){})

Optimize.js 将那些将会在引用中(上面的情况) 进行包裹让他变成立即编译函数

ctxt 分配,赖函数我们需要分配 ctxt

let f = (function outer(){    let a = 20;    function inner(){ return 1 }    return inner;})();console.log(f());

我们看一看上面的代码的 f 接收一个立即 编译函数的返回值,返回值是一个懒函数,

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 有关您的 javascript 函数编译(上)

发表回复