2

所有 mootools 更多模块都包含在我的应用程序中,但我想删除我不使用的模块。有没有一种快速的方法可以根据 mootools 更多地从脚本开始了解我正在使用哪些模块?

4

2 回答 2

3

恐怕不容易。你可以在你的应用程序运行时监视东西,这样你就可以获得一些使用/覆盖统计信息,但是因为 mootools 是原型,所以更多的 Array/String/Function/Date 等的扩展可能更难以捕捉。

要捕获已实例化的类,请构建一个列表并使用类似的东西:

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

你可以用它来监视say,Array.prototype或者任何类似的东西——但困难在于代码的复杂性更高。很难真正确定它:(

可能更容易连接所有脚本,除了 mootools 之外 - 比类型中已知的类/方法的 grep 更多。

于 2013-11-29T20:26:31.547 回答
0

你压缩文件了吗?

如果您尚未从构建中删除原始注释,则文件顶部应该有一个链接,其中包含包含包的列表和一个链接。例如

// Load this file's selection again by visiting: http://mootools.net/more/065f2f092ece4e3b32bb5214464cf926 

如果您没有链接,但包含其他评论,请搜索文件script:,您应该会得到所有包含包的列表。

于 2013-11-29T12:42:28.450 回答