为什么Minified Code不等于原来的?
当我在发布模式下运行我的MVC 4项目时,使用SlickGrid的一个页面无法正确显示(网格非常非常高,网格单元格丢失)。
但是,我不认为这是SlickGrid的问题,而是关于如何将捆绑器(集成到MVC 4中的System.Web.Optimization
)缩小代码。
我抓住了缩小的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}
到原来的
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;
}
如果缩小文件的所有其他元素保持不变,则解决该问题。
该功能用于:
dataView.setFilter(SlickFilter);
为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;
}
请注意多个返回语句。
有了这个额外的见解,我能够确定一个相关的SlickGrid错误:
https://github.com/mleibman/SlickGrid/issues/301
我看到的一个区别是,即使当第一个条件为真时,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
}
编辑 (由OP)
这让我走上了正确的道路,但事实证明,SlickGrid正在“编译”过滤器功能。 有一个已知的问题,编译器有时会失败。 事实上编译是可选的,在这种情况下不是必需的,因为缩减器已经产生了优化的代码。
https://github.com/mleibman/SlickGrid/issues/301
链接地址: http://www.djcxy.com/p/69631.html上一篇: Why is Minified Code not Equivalent to Original?
下一篇: Is it possible to inherit a final class modifying bytecode somehow?