UglifyJS有个超赞的JavaScript解析器

本文介绍了JavaScript压缩器UglifyJS,其内置的JavaScript解析器性能优于Narcissus。解析器将JavaScript代码转化为AST,适合多种用途。UglifyJS基于CommonJS,但在浏览器中需要进行作用域调整才能使用。性能测试显示,UglifyJS在多数浏览器中的解析速度更快,作者计划将其用于Jscex项目替代Narcissus。
摘要由CSDN通过智能技术生成

我一直在为Jscex寻找好用的JavaScript解析器,之前我用的是Narcissus,也写过相关文章。不过可惜的是,Narcissus使用了SpiderMonkey的扩展,因此它并不是用ECMAScript 3实现的,无法在IE 8等浏览器中使用。目前Jscex使用的是NarrativeJS中旧版的Narcissus,但是我并不喜欢它输出的AST结构,使用中也发现高级功能里的一些bug,有些食之无味弃之可惜的感觉,而改写新版Narcissus又必须大动干戈。最近我接触到了UglifyJS,发现它的解析器相当不错,性能也比Narcissus高出许多,在此介绍给大家。

UglifyJS是个JavaScript压缩器,效果和Google Closure Compiler相比有过之而无不及。对于现代化的JavaScript压缩器来说,简单的去除空白和压缩局部变量是远远不够的,同时需要理解代码的语义,将其替换成提及更小的形式(Uglify的说明页上有许多描述)。这显然需要一个JavaScript解析器。UglifyJS基于NodeJS开发,不过可以在各种支持CommonJS模块系统的JavaScript引擎/平台上运行。如果没有CommonJS,也只需将exports相关的代码去掉即可。

JavaScript解析器的作用自然是将JavaScript代码分解成AST,然后根据AST便可以做到许多有趣的事情。相同的AST可以在内存中有不同的表现形式,例如之前提到我不太喜欢Jscex目前使用的旧版Narcissus,一个重要的原因便是它的AST结构不够友好(最新的Narcissus倒不错)。此外,虽然它提供了一些高级功能,例如标注了每个元素在源代码中的位置,这样使用者就可以直接根据getSource方法获得它对应的源代码——只可惜经试验这个功能有bug,这迫使我还得遍历完整的AST。

UglifyJS的JavaScript分词器和解析器存放在源代码的parse-js.js文件中,移植于parse-js项目,后者是一个用Common Lisp实现的类库。现在您应该可以猜到它输出的AST是什么表现形式了吧。没错,就是个“表”,用JavaScript来表示,就是个数组套数组。我写了点简单的代码对其进行格式化输出,您可以在这里简单尝试一下UglifyJS的解析器。这个输出虽然简单,但对于Jscex来说也已经完全够用了。

使用

打开parse-js.js文件,您会看到这样一些代码:

 
  1. /*-
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值