| <!DOCTYPE html> | |
| <html> | |
| <body> | |
| <input id="input"> | |
| <ul id="list"><li><span></span></li></ul> | |
| <div id="console"></div> | |
| <script> | |
| if (window.testRunner) | |
| testRunner.dumpAsText(); | |
| var listElement = document.getElementById('list'); | |
| var templateElement = list.firstChild; | |
| var inputElement = document.getElementById('input'); | |
| function test(numberOfElements, focusInput) | |
| { | |
| if (focusInput) | |
| inputElement.focus(); | |
| var startTime = performance.now(); | |
| for (var i = 0; i < numberOfElements; i++) { | |
| var clone = templateElement.cloneNode(true); | |
| clone.childNodes[0].textContent = i; | |
| listElement.appendChild(clone); | |
| } | |
| var endTime = performance.now(); | |
| if (focusInput) | |
| inputElement.blur(); | |
| const originalItem = listElement.firstChild; | |
| listElement.textContent = ''; | |
| listElement.appendChild(originalItem); | |
| return endTime - startTime; | |
| } | |
| function log(str) | |
| { | |
| var element = document.createElement('div'); | |
| element.appendChild(document.createTextNode(str)); | |
| document.getElementById('console').appendChild(element); | |
| } | |
| const start = performance.now(); | |
| let factor = 0; | |
| while (test(1000 * factor, false) < 5) | |
| factor++; | |
| var timeWithoutFocus = test(1000 * factor, false); | |
| var timeWithFocus = test(1000 * factor, true); | |
| if (Math.abs(timeWithFocus - timeWithoutFocus) <= timeWithoutFocus) { | |
| log('PASS. Cloning elements takes roughly as long with as without focus.'); | |
| } else { | |
| log('FAIL. Cloning 1000 elements with focus took ' + timeWithFocus + 'ms, without took ' + timeWithoutFocus + 'ms.'); | |
| } | |
| </script> | |
| </body> | |
| </html> |