开发者社区> 行者武松> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Prepack——JavaScript代码优化工具

简介:
+关注继续查看

官方宣称Prepack是一个优化JavaScript源代码的工具,实际上它是一个JavaScript的部分求值器(Partial Evaluator),可在编译时执行原本在运行时的计算过程,并通过重写JavaScript代码来提高其执行效率。Prepack用简单的赋值序列来等效替换JavaScript代码包中的全局代码,从而消除了中间计算过程以及对象分配的操作。对于重初始化的代码,Prepack可以有效缓存JavaScript解析的结果,优化效果最佳。

PrepackJavaScript代码优化工具

官方提供的Prepack优化示例:


  1. /* Hello World */// Input(function () { 
  2.   function hello() { return 'hello'; } 
  3.   function world() { return 'world'; } 
  4.   global.s = hello() + ' ' + world(); 
  5. })();// Output(function () { 
  6.   s = "hello world"
  7. })(); 

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仍处于早期开发阶段,尚未准备好在生产环境中使用,官方建议仅尝试使用,并欢迎提供反馈以帮助修复错误。


作者:佚名

来源:51CTO

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
56个JavaScript 实用工具函数(中)
56个JavaScript 实用工具函数
50 0
56个JavaScript 实用工具函数(上)
56个JavaScript 实用工具函数
28 0
56个JavaScript 实用工具函数(下)
56个JavaScript 实用工具函数
39 0
剑指Offer——二叉搜索树与双向链表(JS实现)
剑指Offer——二叉搜索树与双向链表(JS实现)
41 0
剑指Offer——和为S的两个数字(JS实现)
剑指Offer——和为S的两个数字(JS实现)
50 0
剑指Offer——数组中重复的数字(JS实现)
剑指Offer——数组中重复的数字(JS实现)
48 0
剑指Offer——数组中出现次数超过一半的数字(JS实现)
剑指Offer——数组中出现次数超过一半的数字(JS实现)
69 0
剑指Offer——从上到下打印二叉树(JS实现)
剑指Offer——从上到下打印二叉树(JS实现)
60 0
数据结构基础——链表(JS实现)
数据结构基础——链表(JS实现)
56 0
+关注
行者武松
杀人者,打虎武松也。
17111
文章
2568
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载