Skip to content

Instantly share code, notes, and snippets.

@ausi
Created January 10, 2016 19:11
Show Gist options
  • Save ausi/0f30d7568d2f93c04fa3 to your computer and use it in GitHub Desktop.
Save ausi/0f30d7568d2f93c04fa3 to your computer and use it in GitHub Desktop.
Quick performance test for cq-prolyfill
<!doctype html>
<meta charset="utf-8">
<body>
<script>
(function(){
testElementCount(1, function() {
testElementCount(10, function() {
testElementCount(100, function() {
testElementCount(1000, function() {
testElementCount(10000);
});
});
});
});
function testElementCount(count, callback) {
createIframe(function(iframe) {
iframe.style.width = '1024px';
iframe.style.height = '768px';
iframe.contentWindow.cqConfig = {skipObserving: true};
var style = iframe.contentWindow.document.createElement('style');
style.type = 'text/css';
style.innerHTML = 'div { padding-top: 1px; background: red }'
+ 'div:container(width > 500px) { background: green }';
iframe.contentWindow.document.head.appendChild(style);
iframe.contentWindow.document.body.innerHTML = new Array(count + 1).join('<div></div>');
loadScripts(iframe, ['../cq-prolyfill.min.js'], function() {
setTimeout(function() {
var start = iframe.contentWindow.performance.now();
iframe.contentWindow.cqApi.reprocess(function() {
var duration = iframe.contentWindow.performance.now() - start;
console.log(count + ' Init: ' + duration + 'ms');
setTimeout(function() {
start = iframe.contentWindow.performance.now();
iframe.style.width = '320px';
iframe.contentWindow.cqApi.reevaluate(false, function() {
duration = iframe.contentWindow.performance.now() - start;
console.log(count + ' Resize: ' + duration + 'ms');
iframe.parentNode.removeChild(iframe);
callback && callback();
});
}, 2000);
});
}, 2000);
});
});
}
function createIframe(callback) {
var iframe = document.createElement('iframe');
iframe.src = 'about:blank';
iframe.onload = function() {
callback(iframe);
};
document.body.appendChild(iframe);
}
function loadScripts(iframe, scripts, callback) {
scripts = scripts || [];
var loadCount = 0;
function onLoad() {
loadCount++;
if (loadCount === scripts.length) {
callback();
}
}
scripts.forEach(function(scriptUrl) {
script = iframe.contentWindow.document.createElement('script');
script.onload = onLoad;
script.src = scriptUrl;
iframe.contentWindow.document.head.appendChild(script);
});
}
})();
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment