Skip to content
This repository was archived by the owner on Apr 12, 2024. It is now read-only.

Commit 44de0fd

Browse files
committed
perf($interpolate): provide a simplified result for constant expressions
1 parent 7d70dcd commit 44de0fd

File tree

3 files changed

+21
-0
lines changed

3 files changed

+21
-0
lines changed

benchmarks/largetable-bp/main.html

+8
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
<div>interpolation + fnInvocation: <input type="radio" ng-model="benchmarkType" value="interpolationFn"></div>
2020
<div>ngBind + filter: <input type="radio" ng-model="benchmarkType" value="ngBindFilter"></div>
2121
<div>interpolation + filter: <input type="radio" ng-model="benchmarkType" value="interpolationFilter"></div>
22+
<div>ngModel: <input type="radio" ng-model="benchmarkType" value="ngModel"></div>
2223

2324
<ng-switch on="benchmarkType">
2425
<baseline-binding-table ng-switch-when="baselineBinding">
@@ -77,6 +78,13 @@ <h2>interpolation with filter</h2>
7778
<span ng-repeat="column in row">{{column.i | noop}}:{{column.j | noop}}|</span>
7879
</div>
7980
</div>
81+
<div ng-switch-when="ngModel">
82+
<h2>ngModels</h2>
83+
<div ng-repeat="row in data">
84+
<input type="text" ng-model="row.i" name="constName" />
85+
<input type="text" ng-model="row.j" />
86+
</div>
87+
</div>
8088
</ng-switch>
8189
</div>
8290
</div>

src/ng/interpolate.js

+12
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,18 @@ function $InterpolateProvider() {
183183
* - `context`: evaluation context for all expressions embedded in the interpolated text
184184
*/
185185
function $interpolate(text, mustHaveExpression, trustedContext, allOrNothing) {
186+
// Provide a quick exit and simplified result function for text with no interpolation
187+
if (!text.length || text.indexOf(startSymbol) === -1) {
188+
var constantInterp;
189+
if (!mustHaveExpression) {
190+
constantInterp = function constantInterpolationFn() { return text; };
191+
constantInterp.exp = text;
192+
constantInterp.constant = true;
193+
constantInterp.expressions = [];
194+
}
195+
return constantInterp;
196+
}
197+
186198
allOrNothing = !!allOrNothing;
187199
var startIndex,
188200
endIndex,

test/ng/interpolateSpec.js

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ describe('$interpolate', function() {
88

99
expect(interpolateFn.exp).toBe('some text');
1010
expect(interpolateFn.expressions).toEqual([]);
11+
expect(interpolateFn.constant).toEqual(true);
1112

1213
expect(interpolateFn({})).toBe('some text');
1314
}));

0 commit comments

Comments
 (0)