Prepack——JavaScript代码优化工具

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

官方提供的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

时间: 2024-08-07 10:01:05

Prepack——JavaScript代码优化工具的相关文章

JavaScript代码优化新工具UglifyJS

jQuery 1.5 发布的时候 john resig 大神说所用的代码优化程序从Google Closure切换到UglifyJS,新工具的压缩效果非常令人满意. UglifyJS 是一个服务端node.js的压缩程序.我测试了一下压缩率确实比较高. 所以值得写篇文章推荐下. 你也可以尝试一下在线版的Uglifyjs: http://sweet.fengyin.name/ 如果你对 uglifyjs 有兴趣可以按照以下安装方式进行安装. 1. 安装 node.js 环境 2. 进入 https

如何寻找一个好的Javascript单元测试工具

让我们看看Javascript单元测试的现状和测试工具. 1.JsUnit 我们已经在使用它来作为我们的单元测试工具了. 优势: ●可以被ant构建文件调用: ●启动浏览器来运行测试用例: ●Eclipse插件支持: 缺点: ●需要启动浏览器来运行测试用例: ●不支持用js文件来写单元测试代码:它必须嵌入在html文件中: ●它已经好几年没更新了: 注意: ●有一个测试工具叫JsUnit(2): ●"ant"是一个开源构建工具:之所以叫"Ant"因为它很小,但是可以

最好用的JavaScript开发工具和代码编辑器

  Web设计和开发是现今越来越流行的职业方向之一.工欲善其事,必先利其器,如果你想在这个领域出类拔萃,那么你就必须具备一些优秀的技能,例如能操作不同的平台.IDE和其他各种各样的工具. 谈到平台和IDE,现在已经不是以前那个掌握一个IDE就能"一招鲜吃遍天"的时代了.激烈的竞争以及蔓延到现在的集成开发环境.基于IDE是用于 创建和部署应用程序的强大客户端应用程序,下面我们要分享的就是对于很多网页设计师和开发人员而言,最好的JavaScript 开发工具. 若有不同见解,敬请不吝赐教.

分享9个最好用的JavaScript开发工具和代码编辑器

  这篇文章主要介绍了9个最好用的JavaScript开发工具和代码编辑器,需要的朋友可以参考下 Web设计和开发是现今越来越流行的职业方向之一.工欲善其事,必先利其器,如果你想在这个领域出类拔萃,那么你就必须具备一些优秀的技能,例如能操作不同的平台.IDE和其他各种各样的工具. 谈到平台和IDE,现在已经不是以前那个掌握一个IDE就能"一招鲜吃遍天"的时代了.激烈的竞争以及蔓延到现在的集成开发环境.基于IDE是用于创建和部署应用程序的强大客户端应用程序,下面我们要分享的就是对于很多网

JQuery团队打造的javascript单元测试工具QUnit介绍_jquery

什么是单元测试? 单元测试又称为模块测试,是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作.单元测试主要是用来检验程式的内部逻辑,也称为个体测试.结构测试或逻辑驱动测试.通常由撰写程式码的程式设计师负责进行. 通常来说,程式設計師每修改一次程式就會進行最少一次單元測試,在編寫程式的過程中前後很可能要進行多次單元測試,以證實程式達到軟件規格書(en:Specification)要求的工作目標,沒有臭蟲:雖然单元测试不是什么必须的,但也不坏,這牽涉到專案管理的政策決定. -- 维基百科

JavaScript 开发工具webstrom使用指南_javascript技巧

看到网上一篇介绍webstrom的文章,觉得功能确实强大,也知道为什么阿里巴巴的前端传到github上的文件为啥都有一个 .idea 文件,(传说淘宝内部推荐写js用webstrom) 我们可以理解 IDE 就是集成了很多你想要的功能,或者你不想要的功能.换句话说就是装了很多插件的 editor ,所以到目前为止,我还觉得没必要给它装什么插件. 那么接下来开始介绍webstrom的特色功能: WebStorm 是 JetBrains 推出的一款商业的 JavaScript 开发工具 任何一个编辑

打开电邮附件要小心:新JavaScript勒索工具加密文件无解

勒索型恶意软件是比较让人头疼的,因为它们一旦给你的重要文件加密,除了拿钱消灾,基本上就彻底无奈.最近国外安全研究人员就发现了一种新型JavaScript勒索工具RAA,通过电邮附件传播,受害者一旦打开附件,某些文件就会被加密. 根据安全人员的研究,这一恶意软件通过CryptoJS库来加密文件,受害者不慎打开附件后,"潘多拉魔盒"随即开启,但用户当时却看不出有什么异常,只能发现一个貌似无害的受损文件.然而这些表面现象维持不了多久,在用户还蒙在鼓里的时候,附件中的程序开始工作,包括删除Wi

分享9个最好用的JavaScript开发工具和代码编辑器_javascript技巧

Web设计和开发是现今越来越流行的职业方向之一.工欲善其事,必先利其器,如果你想在这个领域出类拔萃,那么你就必须具备一些优秀的技能,例如能操作不同的平台.IDE和其他各种各样的工具. 谈到平台和IDE,现在已经不是以前那个掌握一个IDE就能"一招鲜吃遍天"的时代了.激烈的竞争以及蔓延到现在的集成开发环境.基于IDE是用于创建和部署应用程序的强大客户端应用程序,下面我们要分享的就是对于很多网页设计师和开发人员而言,最好的JavaScript 开发工具. 若有不同见解,敬请不吝赐教. 1)

JavaScript 模块化工具 rollup.js

rollup.js 详细介绍 rollup.js 是下一代的 JavaScript 模块化工具,使用 ES2015 模块编写你的应用或者库,可以高效的绑定他们成为单个文件,在浏览器或者 Node.js 中使用,甚至是一些高级特性的绑定,比如 bindings 和 cycles. rollup.js 类似 Browserify,生产包比 Browserify 小,或者是跟 Webpack 等价,因为 ES2015 模块比 CommonJS 模块高效. 代码示例: AMD: define(funct