为什么缩小代码不等于原始代码?

Eri*_* J. 7 javascript minify slickgrid

当我在发布模式下运行我的MVC 4项目时,一个使用SlickGrid的页面无法正确显示(网格非常非常高,网格单元格缺失).

但是,我不认为这是SlickGrid的问题,而是捆绑器(System.Web.Optimization集成到MVC 4中)如何缩小代码.

我抓住了缩小的JavaScript并开始一次在一个区域中反转缩小,直到问题得到解决.我发现改变了(原谅滚动,我想完全按照原样留下缩小的版本)

function SlickFilter(n,t){var i=n.option,r=t.searchString;return n.pctSortKey.key<t.percentCompleteThreshold||r!=""&&i.indexOf(r)==-1&&i!="Unweighted Response"&&i!="Median"&&i!="Average"?!1:!0}
Run Code Online (Sandbox Code Playgroud)

原来的

function SlickFilter(item, args) {
    if (item.pctSortKey.key < args.percentCompleteThreshold) {
        return false;
    }

    if (args.searchString != "" && item.option.indexOf(args.searchString) == -1 && item.option != "Unweighted Response" && item.option != "Median" && item.option != "Average") {
        return false;
    }

    return true;
}
Run Code Online (Sandbox Code Playgroud)

如果缩小文件的所有其他元素都未更改,则解决此问题.

该功能使用如下:

dataView.setFilter(SlickFilter);
Run Code Online (Sandbox Code Playgroud)

为SlickGrid提供回调函数以过滤掉某些结果.

原始和缩小的功能如何不等同?

UPDATE

SlickGrid正在"编译"我提供的过滤功能.编译步骤失败了缩小版本.编译的缩小代码如下所示:

function anonymous(_items,_args) {
var _retval = [], _idx = 0; var n,  t = _args; _coreloop: for (var _i = 0, _il = _items.length; _i < _il; _i++) { n = _items[_i]; 
    //debugger;
    var i = n.option,
        r = t.searchString;

    return 
    n.pctSortKey.key < t.percentCompleteThreshold 
    || 
    r !="" 
        && i.indexOf(r)==-1 
        && i != "Unweighted Response" 
        && i != "Median"
        && i != "Average"
? !1
: !0
; } return _retval; 
}
Run Code Online (Sandbox Code Playgroud)

注意多个return语句.

通过这种额外的洞察力,我能够识别出相关的SlickGrid错误:

https://github.com/mleibman/SlickGrid/issues/301

tel*_*elb 4

我看到的一个区别是,即使第一个条件为 true,item.option 和 args.searchString 也会被评估,而它们本来不会出现在原始代码中。

您是否尝试过单步执行代码来查看这些值是什么以及它如何对它们起作用?

这是未损坏的缩小代码,可以帮助其他人做同样的事情,或者如果您想尝试并逐步了解它。

function SlickFilter(n,t) {
var i = n.option,
    r = t.searchString;

return 
        n.pctSortKey.key < t.percentCompleteThreshold 
        || 
        r !="" 
            && i.indexOf(r)==-1 
            && i != "Unweighted Response" 
            && i != "Median"
            && i != "Average"
    ? !1
    : !0
}
Run Code Online (Sandbox Code Playgroud)

编辑(由OP)

这让我走上了正确的道路,但事实证明 SlickGrid 正在“编译”过滤器函数。有一个已知问题,编译器有时会失败。事实上,编译是可选的,在这种情况下不是必需的,因为压缩器已经生成了优化的代码。

https://github.com/mleibman/SlickGrid/issues/301