-
-
Notifications
You must be signed in to change notification settings - Fork 5.7k
Closed
Labels
outdatedA closed issue/PR that is archived due to age. Recommended to make a new issueA closed issue/PR that is archived due to age. Recommended to make a new issue
Description
I suggest replace current standard library polyfill (es6-shim & es6-symbol) to core.js. Why?
- Current polyfill hasn't
WeakMap
&WeakSet
, but we needWeakMap
for abstract references. core.js add simple weak-collections polyfill with store values on keys, it doesn't leak and suitable on most cases. - core.js add simple module with symbols & methods for abstract references.
- es6-shim replace native
Map
&Set
in all modern browsers. That, given the performance polyfill, not serious. core.js just fix them. - es6-shim
Map
&Set
store data on object chain - lookup time isO(n)
. core.jsMap
&Set
store data on hash - lookup time isO(1)
(but they can't work with frozen objects). Try simple test on nativeMap
, es6-shim and core-js:
var array = [];
for(var i = 0; i < 100000; i++)array.push([{}, {}]);
array = array.concat(array);
console.time('create Map');
var map = new Map(array);
console.timeEnd('create Map');
console.log('Map size: ' + map.size);
// FF34:
// native: 177.46мс
// es6-shim: 462863.9мс
// core.js, fixed native: 155.05мс
// core.js, forced replaced: 2287.16мс
- es6-shim
Map
&Set
doesn't work on IE8-. core.js has fallback for them. - es6-symbol generate string key like
"@@1"
, possible conflicts. core.jsSymbol
generate more complex string key. - es6-symbol symbols are enumerable in
for-in
loop &Object.keys
. core.js define setter inObject.prototype
- symbols are not enumerable. In the next version I will add an option to disable it. - Size: current polyfill
browser-polyfill.js
size is ~54kb. Custom core.js build with all ES6, ES7 modules,setImmediate
(dependence ofPromise
module) size is:
grunt build:es6,es6_collections,es6_iterators,es6_symbol,es6_promise,es7,es7_refs,immediate uglify
File ./custom.min.js created: 49.43 kB → 15.17 kB → 3.97 kB (gzip)
add ~4.5kb regenerator runtime -> ~19-20kb standard library with much greater capacity than the current. Also you can add another modules or use shim
build.
You can try core.js with 6to5 in this simple playground.
Metadata
Metadata
Assignees
Labels
outdatedA closed issue/PR that is archived due to age. Recommended to make a new issueA closed issue/PR that is archived due to age. Recommended to make a new issue