diff options
author | mleibman <michael.leibman@gmail.com> | 2011-11-11 23:45:01 -0800 |
---|---|---|
committer | mleibman <michael.leibman@gmail.com> | 2011-11-11 23:45:01 -0800 |
commit | 295fc269e68d20662bc174575d4a95094d1f7c7e (patch) | |
tree | f6398ff3635fad60185613a340ab0499d05b0d10 /slick.dataview.js | |
parent | 904163042df04cfe59fba9a4de4d1a55e7b68b8a (diff) | |
download | SlickGrid-295fc269e68d20662bc174575d4a95094d1f7c7e.zip SlickGrid-295fc269e68d20662bc174575d4a95094d1f7c7e.tar.gz SlickGrid-295fc269e68d20662bc174575d4a95094d1f7c7e.tar.bz2 |
Fixed a performance regression in DataView compiled filter and added function names for easier profiling (only works in webkit; don't know of any other supported variants).
Diffstat (limited to 'slick.dataview.js')
-rw-r--r-- | slick.dataview.js | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/slick.dataview.js b/slick.dataview.js index 955d807..2704203 100644 --- a/slick.dataview.js +++ b/slick.dataview.js @@ -408,14 +408,15 @@ function compileAccumulatorLoop(aggregator) { var accumulatorInfo = getFunctionInfo(aggregator.accumulate); - - return new Function( + var fn = new Function( "_items", "for (var " + accumulatorInfo.params[0] + ", _i=0, _il=_items.length; _i<_il; _i++) {" + accumulatorInfo.params[0] + " = _items[_i]; " + accumulatorInfo.body + "}" ); + fn.displayName = fn.name = "compiledAccumulatorLoop"; + return fn; } function compileFilter() { @@ -443,7 +444,9 @@ tpl = tpl.replace(/\$item\$/gi, filterInfo.params[0]); tpl = tpl.replace(/\$args\$/gi, filterInfo.params[1]); - return new Function("_items,_args", tpl); + var fn = new Function("_items,_args", tpl); + fn.displayName = fn.name = "compiledFilter"; + return fn; } function compileFilterWithCaching() { @@ -451,7 +454,7 @@ var filterBody = filterInfo.body .replace(/return false;/gi, "{ continue _coreloop; }") - .replace(/return true;/gi, "{ _retval[_idx++] = $item$; continue _coreloop; }") + .replace(/return true;/gi, "{ _cache[_i] = true;_retval[_idx++] = $item$; continue _coreloop; }") .replace(/return ([^;]+?);/gi, "{ if ((_cache[_i] = $1)) { _retval[_idx++] = $item$; }; continue _coreloop; }"); @@ -463,7 +466,7 @@ $item$ = _items[_i]; if (_cache[_i]) { _retval[_idx++] = $item$; - continue; + continue _coreloop; } $filter$; } @@ -475,7 +478,9 @@ tpl = tpl.replace(/\$item\$/gi, filterInfo.params[0]); tpl = tpl.replace(/\$args\$/gi, filterInfo.params[1]); - return new Function("_items,_args,_cache", tpl); + var fn = new Function("_items,_args,_cache", tpl); + fn.displayName = fn.name = "compiledFilterWithCaching"; + return fn; } function getFilteredAndPagedItems(items) { |