feat(selector): initial version of the selector
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
System.import('benchmarks/compiler/selector_benchmark').then(function (bm) {
|
||||
bm.setup();
|
||||
|
||||
window.benchmarkSteps.push({name: 'CssSelector.parse', fn: bm.runParse});
|
||||
}, console.log.bind(console));
|
||||
|
||||
System.import('benchmarks/compiler/selector_benchmark').then(function (bm) {
|
||||
bm.setup();
|
||||
|
||||
window.benchmarkSteps.push({name: 'SelectorMatcher.addSelectable', fn: bm.runAdd});
|
||||
}, console.log.bind(console));
|
||||
|
||||
System.import('benchmarks/compiler/selector_benchmark').then(function (bm) {
|
||||
bm.setup();
|
||||
|
||||
window.benchmarkSteps.push({name: 'SelectorMatcher.match', fn: bm.runMatch});
|
||||
}, console.log.bind(console));
|
||||
@@ -0,0 +1,11 @@
|
||||
module.exports = function(config) {
|
||||
config.set({
|
||||
scripts: [
|
||||
{src: '/js/traceur-runtime.js'},
|
||||
{src: '/js/es6-module-loader-sans-promises.src.js'},
|
||||
{src: '/js/extension-register.js'},
|
||||
{src: 'register_system.js'},
|
||||
{src: 'benchmark.js'}
|
||||
]
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,10 @@
|
||||
System.paths = {
|
||||
'core/*': '/js/core/lib/*.js',
|
||||
'change_detection/*': '/js/change_detection/lib/*.js',
|
||||
'facade/*': '/js/facade/lib/*.js',
|
||||
'di/*': '/js/di/lib/*.js',
|
||||
'rtts_assert/*': '/js/rtts_assert/lib/*.js',
|
||||
'test_lib/*': '/js/test_lib/lib/*.js',
|
||||
'benchmarks/*': '/js/benchmarks/lib/*.js'
|
||||
};
|
||||
register(System);
|
||||
@@ -0,0 +1,81 @@
|
||||
import {SelectorMatcher, CssSelector} from "core/compiler/selector";
|
||||
import {StringWrapper, Math} from 'facade/lang';
|
||||
import {ListWrapper} from 'facade/collection';
|
||||
|
||||
var fixedMatcher;
|
||||
var fixedSelectorStrings = [];
|
||||
var fixedSelectors = [];
|
||||
|
||||
var COUNT = 1000;
|
||||
|
||||
export function setup() {
|
||||
for (var i=0; i<COUNT; i++) {
|
||||
ListWrapper.push(fixedSelectorStrings, randomSelector());
|
||||
}
|
||||
for (var i=0; i<COUNT; i++) {
|
||||
ListWrapper.push(fixedSelectors, CssSelector.parse(fixedSelectorStrings[i]));
|
||||
}
|
||||
fixedMatcher = new SelectorMatcher();
|
||||
for (var i=0; i<COUNT; i++) {
|
||||
fixedMatcher.addSelectable(fixedSelectors[i], i);
|
||||
}
|
||||
}
|
||||
|
||||
export function runParse() {
|
||||
var result = [];
|
||||
for (var i=0; i<COUNT; i++) {
|
||||
ListWrapper.push(result, CssSelector.parse(fixedSelectorStrings[i]));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
export function runAdd() {
|
||||
// The sum is used to prevent Chrome from optimizing the loop away...
|
||||
var matcher = new SelectorMatcher();
|
||||
var count = 0;
|
||||
for (var i=0; i<COUNT; i++) {
|
||||
count += matcher.addSelectable(fixedSelectors[i], i);
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
export function runMatch() {
|
||||
// The sum is used to prevent Chrome from optimizing the loop away...
|
||||
var count = 0;
|
||||
for (var i=0; i<COUNT; i++) {
|
||||
fixedMatcher.match(fixedSelectors[i], (selected) => {
|
||||
count += selected;
|
||||
});
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
function randomSelector() {
|
||||
var res = randomStr(5);
|
||||
for (var i=0; i<3; i++) {
|
||||
res += '.'+randomStr(5);
|
||||
}
|
||||
for (var i=0; i<3; i++) {
|
||||
res += '['+randomStr(3)+'='+randomStr(6)+']';
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
function randomStr(len){
|
||||
var s = '';
|
||||
while (s.length < len) {
|
||||
s += randomChar();
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
function randomChar(){
|
||||
var n = randomNum(62);
|
||||
if(n<10) return n; //1-10
|
||||
if(n<36) return StringWrapper.fromCharCode(n+55); //A-Z
|
||||
return StringWrapper.fromCharCode(n+61); //a-z
|
||||
}
|
||||
|
||||
function randomNum(max) {
|
||||
return Math.floor(Math.random() * max);
|
||||
}
|
||||
Reference in New Issue
Block a user