通过修改语法与启动快照的方式优化node项目的启动速度

39 阅读1分钟

思路:
1、通过语法解析将js文本顶部的require与import 优化为一下形式

// 优化前
const path = require('path')
console.log(path.join('a', 'b'))

// 优化后
let path;
function get_path () {
  if (path) {
    return path
  } else {
    path = require('path')
    return path
  }
}
console.log(get_path().join('a', 'b'))

如何使用语法树优化代码可以参考:如何通过babel去操作ast, 并生成对应的代码
2、 将js文件生成为快照,并通过注入快照的方式启动项目

$ echo "globalThis.foo = 'I am from the snapshot'" > snapshot.js

# Run snapshot.js to intialize the application and snapshot the
# state of it into snapshot.blob.
$ node --snapshot-blob snapshot.blob --build-snapshot snapshot.js

$ echo "console.log(globalThis.foo)" > index.js

# Load the generated snapshot and start the application from index.js.
$ node --snapshot-blob snapshot.blob index.js
I am from the snapshot

参考文章: