| <!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> |