如何使用Python或Lisp删除无用的JavaScript代码



JavaScript代码如下:

   <script>
    a={name:"abc"};
    b={xyz:"123"};
    this.c='aaa';
    this.cc='bbb';
    d=new Date();
    var e=new Array();
    var f=false;
    this.g=123;
    this.g++;
    document.write(b.xyz+this.cc);
    </script>

以上仅使用了变量b(b={xyz:"123"};)cc(this.cc='bbb';)

有人知道是否有办法用Python或Lisp删除未使用的变量吗?

尝试closure compilerjavascript代码中删除冗余代码和无用空白:我在closure compiler上运行了你的代码(158 bytes),得到了这个(89 bytes):

a={name:"abc"};b={b:"123"};this.a="bbb";d=new Date;document.write(b.b+this.a);

http://closure-compiler.appspot.com

在Common Lisp中,有解析js来解析JavaScript代码。如果您想以交互方式评估JavaScript代码并执行某种动态分析,还可以在此基础上构建CL JavaScript解释器。至于静态分析,还有cl-uglify-js,它也是建立在parse-js之上的——要么它可以消除死代码,要么你可以尝试修改它来做到这一点。。。

TXR:中快速且肮脏的基于文本的破解

script.txr:

@(collect)
@prolog
@(last)
<script>
@(end)
@(collect :vars (code))
@  (block occurs)
@    (cases)
@{decl /(var )?/}@{var /[a-z]+/}=@expr
@      (trailer)
@      (skip)
@      (cases)
@        (skip)@var@(skip)
@        (bind code `@decl@var=@expr`)
@      (or)
</script>
@        (fail occurs)
@      (end)
@    (or)
@code
@    (end)
@  (end)
@(last)
</script>
@(end)
@(collect)
@epilog
@(end)
@(output)
@{prolog "n"}
<script>
@{code "n"}
</script>
@{epilog "n"}
@(end)

测试用例script.html:

verbatim
text
<script>
a={name:"abc"};
b={xyz:"123"};
this.c='aaa';
this.cc='bbb';
d=new Date();
var e=new Array();
var f=false;
this.g=123;
this.g++;
</script>
left
alone

运行:

$ txr script.txr script.html
verbatim
text
<script>
a={name:"abc"};
b={xyz:"123"};
this.c='aaa';
this.cc='bbb';
var e=new Array();
this.g=123;
this.g++;
</script>
left
alone

正如你所看到的,实现了一些冷凝。

然而,代码认为aaa构成了对变量a的使用。由于e出现在var f=false中,所以变量e被保留;但你再也看不到了,因为那一行本身被删除了,因为f没有出现。

如果你想要的不仅仅是愚蠢的基于文本的破解,你必须解析Javascript。(在TXR中也可以以一种清晰而有纪律的基于语法的方式,但对所有语法规则进行编码是乏味的。)

最新更新