blob: 392ecc32f37fd8ec2d9a9a78cb4740f698c514f7 [file] [edit]
<!DOCTYPE html>
<html>
<head>
<title>Performance test for :where()/:is() class rule indexing</title>
</head>
<body>
<div id="container" style="height: 1px; overflow: hidden;"></div>
<script src="../resources/runner.js"></script>
<script>
var ruleClasses = ['heading-1', 'heading-2', 'heading-3', 'heading-4', 'heading-5', 'heading-6',
'paragraph', 'link', 'quote', 'bold', 'italic', 'mono', 'pre', 'list-ord', 'list-unord',
'list-item', 'tbl', 'image', 'rule', 'def-list'];
var style = document.createElement('style');
var css = '';
for (var i = 0; i < ruleClasses.length; i++)
css += '.prose :where(.' + ruleClasses[i] + '):not(:where([class~="not-prose"], [class~="not-prose"] *)) { margin: ' + (i + 1) + 'px; }\n';
style.textContent = css;
document.head.appendChild(style);
var container = document.getElementById('container');
for (var i = 0; i < 25000; i++) {
var el = document.createElement('div');
el.textContent = 'x';
if (i % 500 === 0)
el.className = 'not-prose';
container.appendChild(el);
}
PerfTestRunner.measureRunsPerSecond({
description: "Style recalculation with :where(.class) rules on a large DOM. Tests that single-argument :where()/:is() rules are indexed by class.",
run: function() {
container.classList.add('prose');
container.offsetHeight;
container.classList.remove('prose');
container.offsetHeight;
}
});
</script>
</body>
</html>