mirror of
https://github.com/zhigang1992/angular.js.git
synced 2026-04-22 10:49:24 +08:00
perf(Scope): change Scope#id to be a simple number
In apps that create lots of scopes (apps with large tables) the uid generation shows up in the profiler and adds a few milliseconds. Using simple counter doesn't have this overhead. I think the initial fear of overflowing and thus using string alphanum sequence is unjustified because even if an app was to create lots of scopes non-stop, you could create about 28.6 million scopes per seconds for 10 years before you would reach a number that can't be accurately represented in JS BREAKING CHANGE: Scope#$id is now of time number rather than string. Since the id is primarily being used for debugging purposes this change should not affect anyone.
This commit is contained in:
@@ -167,7 +167,7 @@ var /** holds major version number for IE or NaN for real browsers */
|
||||
angular = window.angular || (window.angular = {}),
|
||||
angularModule,
|
||||
nodeName_,
|
||||
uid = ['0', '0', '0'];
|
||||
uid = 0;
|
||||
|
||||
/**
|
||||
* IE 11 changed the format of the UserAgent string.
|
||||
@@ -285,33 +285,17 @@ function reverseParams(iteratorFn) {
|
||||
}
|
||||
|
||||
/**
|
||||
* A consistent way of creating unique IDs in angular. The ID is a sequence of alpha numeric
|
||||
* characters such as '012ABC'. The reason why we are not using simply a number counter is that
|
||||
* the number string gets longer over time, and it can also overflow, where as the nextId
|
||||
* will grow much slower, it is a string, and it will never overflow.
|
||||
* A consistent way of creating unique IDs in angular.
|
||||
*
|
||||
* @returns {string} an unique alpha-numeric string
|
||||
* Using simple numbers allows us to generate 28.6 million unique ids per second for 10 years before
|
||||
* we hit number precision issues in JavaScript.
|
||||
*
|
||||
* Math.pow(2,53) / 60 / 60 / 24 / 365 / 10 = 28.6M
|
||||
*
|
||||
* @returns {number} an unique alpha-numeric string
|
||||
*/
|
||||
function nextUid() {
|
||||
var index = uid.length;
|
||||
var digit;
|
||||
|
||||
while(index) {
|
||||
index--;
|
||||
digit = uid[index].charCodeAt(0);
|
||||
if (digit == 57 /*'9'*/) {
|
||||
uid[index] = 'A';
|
||||
return uid.join('');
|
||||
}
|
||||
if (digit == 90 /*'Z'*/) {
|
||||
uid[index] = '0';
|
||||
} else {
|
||||
uid[index] = String.fromCharCode(digit + 1);
|
||||
return uid.join('');
|
||||
}
|
||||
}
|
||||
uid.unshift('0');
|
||||
return uid.join('');
|
||||
return ++uid;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user