官方宣称Prepack是一个优化JavaScript源代码的工具,实际上它是一个JavaScript的部分求值器(Partial Evaluator),可在编译时执行原本在运行时的计算过程,并通过重写JavaScript代码来提高其执行效率。Prepack用简单的赋值序列来等效替换JavaScript代码包中的全局代码,从而消除了中间计算过程以及对象分配的操作。对于重初始化的代码,Prepack可以有效缓存JavaScript解析的结果,优化效果最佳。
官方提供的Prepack优化示例:
/* Hello World */// Input(function () {
function hello() { return 'hello'; }
function world() { return 'world'; }
global.s = hello() + ' ' + world();
})();// Output(function () {
s = "hello world";
})();
Prepack团队对未来的规划如下:
短期
· 稳定现有功能集,用于预优化(Prepack)React Native代码包
· 集成React Native工具链
· 根据React Native所用模块系统的假设来构建优化
中期
· 进一步优化序列化(Serialization),包括:消除不暴露特性(identity)的对象;消除未使用的导出属性,等等
· 预优化每个函数、基本代码块、语句、表达式
· 与ES6保持完全一致
· 支持广泛的模块系统
· 假设ES6支持某些功能,延迟完成或直接忽略Polyfill应用
· 进一步实现Web和Node.js环境中的兼容性目标
· 深入集成JavaScript虚拟机,改进堆反序列化过程,包括 :暴露“对象懒初始化”的概念 - 以一种JavaScript无感知的方式,在首次使用对象时对其进行初始化;通过专门的字节码提高普通对象创建的编码效率;将代码分为两个阶段:1) 非环境依赖阶段,虚拟机可以安全地捕获并恢复生成的堆;2)环境依赖阶段,通过从环境中获得的值执行所有剩余的计算过程来拼凑具体的堆,等等
· 总结循环和递归
长期 - 利用Prepack作为一个平台
· JavaScript Playground - 通过调整JavaScript引擎体验JavaScript特性,这些引擎由JavaScript所编写,托管在浏览器中;你可以把它想象成一个“Babel虚拟机”,实现了不能被编译的JavaScript新特性
· 捉Bug - 发现异常崩溃、执行问题……
· 效果分析,例如检测模块工厂函数可能的副作用或强制纯净注释
· 类型分析
· 信息流分析
· 调用图推理,允许内联和代码索引
· 自动测试生成,利用符号执行的特性与约束求解器(Constraint Solver)结合来计算执行不同执行路径的输入
· 智能模糊(Smart Fuzzing)
· JavaScript沙盒 - 以不可观察的方式有效地测试JavaScript代码
目前Prepack仍处于早期开发阶段,尚未准备好在生产环境中使用,官方建议仅尝试使用,并欢迎提供反馈以帮助修复错误。
Prepack—JavaScript代码优化工具
发表于:2017-08-08
作者:Prepack
来源:
 相关文章
前端到底是“技术深度”重要还是“技... 悟透一个小窍门,你就能举一反三掌握... 九个用于前端开发的Python 框架:Jav... 2023年需求最大的八种编程语言 让你成为更好的 JavaScript 程序员的十个秘诀 每个JavaScript程序员都应该知道的十...- 周排行
- 月排行
-   智能可穿戴设备的主要测试步骤
-   缓存技术:加速应用,提高用户体验
-   一文搞懂微服务架构演进
-   工程师团队常用的六款AI工具
-   放弃后端,冲测开去了!
-   23种软件设计模式综述
-   分布式系统:常见陷阱和应对复杂性的...
-   智能可穿戴设备的主要测试步骤
-   写代码之前应该做的几件事
-   2024年,五个Java开发者应该关注的编程趋势
-   C++性能优化指南:让你的程序飞起来!
-   一个微服务业务系统的中台构建之路
-   微服务架构:构建高灵活性的分布式系统
-   软件架构五大原则,确保你的项目100%成功