すべての mootools more モジュールがアプリに含まれていますが、使用していないモジュールを削除したいと思います。mootools に依存するスクリプトから始めて、使用しているモジュールをすばやく知る方法はありますか?
2 に答える
簡単な方法ではありません。アプリの実行中に何かをスパイして、使用状況/カバレッジの統計を取得できますが、mootools はプロトタイプであるため、より多くの配列/文字列/関数/日付などの拡張機能をキャッチするのはより複雑になる可能性があります。
インスタンス化されたクラスをキャッチするには、リストを作成し、次のようなものを使用します。
Object.monitor = function(obj, match){
var keys = (function(obj){
// include from prototype also, any function.
var keys = [], key;
for (key in obj) typeof obj[key] === 'function' && keys.push(key);
return keys;
}(obj)),
log = function(what, method){
// more use goes red in console.
console.log(obj, method, what);
},
counters = {};
keys.forEach(function(key){
var orig = obj[key];
Object.defineProperty(obj, key, {
get: function(){
key in counters || (counters[key] = 0);
counters[key]++;
key.test(match) && log(counters[key], key);
return orig;
}
});
});
};
var protos = [Fx.Reveal, Fx.Slide, Request.JSONP]; // etc etc - stuff you are unsure of.
protos.forEach(function(klass){
Object.monitor(klass.prototype, /\$constructor/);
});
new Request.JSONP({});
これらのアイテムのいずれかがインスタンス化または拡張されるとすぐに、コンストラクターが参照され、それを示すログが取得されます。http://jsfiddle.net/dimitar/8nCe6/ - これはインスタンス化されますRequest.JSONP()
。
Object.monitor
特定のインスタンスで呼び出されるメソッドをスパイするために を書きましたが、同じ原則が適用されます。コンソールの書式設定は、FireBug と WebInspector でのみ適切に機能します。ネイティブの FF コンソールはシンプルにする必要があります。
http://fragged.org/spy-on-any-method-on-an-object-and-profile-number-of-times-called_1661.html
それを使用して、たとえば、またはそのようなものをスパイすることもできますArray.prototype
が、問題はコードの複雑さです。本当にそれを突き止めるのは難しい:(
mootools を除くすべてのスクリプトを連結する方がおそらく簡単です。タイプから既知のクラス/メソッドを grep するよりも簡単です。
ファイルを圧縮しましたか?
ビルドから元のコメントを削除していない場合は、ファイルの上部に、含まれているパッケージのリストとリンクを含むリンクがあるはずです。例えば
// Load this file's selection again by visiting: http://mootools.net/more/065f2f092ece4e3b32bb5214464cf926
リンクがなくても他のコメントが含まれている場合は、ファイルを検索してscript:
、含まれているすべてのパッケージのリストを取得する必要があります。