maaash.jp

what I create

Javascript Linker – Janitorで未使用関数を除去する

batファイルでjavascriptコード圧縮

それより、ライブラリのうち未使用の関数を省くようなの、欲しいな。

と言いましたが、そう思ってる方は他にも多くいらっしゃるようです。

8/30 JS Linker in Dojo
The JS Linker was just committed to the Dojo repository.

Javascript Linkerとは、

The purpose of JavaScript Linker is to process HTML/JavaScript code base to prepare code for deployment by reducing file size, create source code documentation, obfuscate source code to protect intellectual property, and help gather source code metrics for source code analysis & improvements.

JavaScript Linker (JSL) – Alpha 1 : Readme より
JavascriptLinkerは、HTML/JavaScriptのファイルサイズ削減やコードのドキュメント、知的財産を守るためのコード難読化、ソースコード解析のためのメトリクス収集、のためのプリプロセスを行うことを目的とする。

インストールが少しめんどう。
2.0 Requirements
1. JDK 1.5.x installed with JAVA_HOME pointing to that JDK.
2. You will need Apache Ant 1.6.x installed with ANT_HOME set.

お目当ての

Janitor – unused function removal via dependency analysis
Janitor task is used to strip out unused functions from the JavaScript source code. Janitor performs a static code analysis constructing a function call graph for all global functions. Entry points are also calculated from all source files that have imported after processing the Dojo require statements. Every function not reachable from the graph is considered unused and gets removed.

コードの静的解析をして全グローバル関数の呼び出し関係をグラフ化して、呼び出されないものを削除する?
う~ん。

こんな感じで対象のファイルを解析、ファイルサイズ削減する。
“` java -Xms8m -Xmx200m -cp jsl.jar;sisc.jar;bcel.jar org.dojo.jsl.top.Top –verbose –prj jsl.prj –sources ../tests/test_Colorspace.html[/code]

使って見た感じも、期待していたようなコード削減効果は無し。
まだ、タブやコメントを削除してくれるくらい。

javascriptファイル単位で、使っているものを抜き出してくれるので、DojoとかYUIとかのライブラリから使っているjsファイルのみを抜き出す、みたいな用途では使えそう。

期待としては、
例えばprototype.jsをscriptタグで呼び出しているのに$関数しか使って無かったら、prototype.jsのファイルサイズがめっちゃ減って欲しい。

静的解析じゃ厳しいのではないかしら。
全部のイベントをシミュレーションしてDOM構造に影響を与えたところをバックトレースしていく、みたいなアプローチがいいのかな~

Janitor task will be improved incrementally in the later releases.

なので期待して待ちましょう。

Comments