mirror of
https://github.com/bigskysoftware/htmx.git
synced 2025-10-02 07:21:05 +00:00

The website used to host every past test suite, copied into the www directory. We no longer need that on the website (and it makes the codebase impossible to search) so I removed all the old tests and the new tests are hosted simply at /test. I also replaced the www.js script with a simpler www.sh one (since we no longer need to do anything besides copying, really), which allowed me to remove a node dependency that was only used in that script.
64 lines
2.1 KiB
JavaScript
64 lines
2.1 KiB
JavaScript
describe("Core htmx perf Tests", function() {
|
|
|
|
var HTMX_HISTORY_CACHE_NAME = "htmx-history-cache";
|
|
|
|
beforeEach(function () {
|
|
this.server = makeServer();
|
|
clearWorkArea();
|
|
localStorage.removeItem(HTMX_HISTORY_CACHE_NAME);
|
|
});
|
|
afterEach(function () {
|
|
this.server.restore();
|
|
clearWorkArea();
|
|
localStorage.removeItem(HTMX_HISTORY_CACHE_NAME);
|
|
});
|
|
|
|
function stringRepeat(str, num) {
|
|
num = Number(num);
|
|
|
|
var result = '';
|
|
while (true) {
|
|
if (num & 1) { // (1)
|
|
result += str;
|
|
}
|
|
num >>>= 1; // (2)
|
|
if (num <= 0) break;
|
|
str += str;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
|
|
it("history implementation should be fast", function(){
|
|
// create an entry with a large content string (256k) and see how fast we can write and read it
|
|
// to local storage as a single entry
|
|
var entry = {url: stringRepeat("x", 32), content:stringRepeat("x", 256*1024)}
|
|
var array = [];
|
|
for (var i = 0; i < 10; i++) {
|
|
array.push(entry);
|
|
}
|
|
var start = performance.now();
|
|
var string = JSON.stringify(array);
|
|
localStorage.setItem(HTMX_HISTORY_CACHE_NAME, string);
|
|
var reReadString = localStorage.getItem(HTMX_HISTORY_CACHE_NAME);
|
|
var finalJson = JSON.parse(reReadString);
|
|
var end = performance.now();
|
|
var timeInMs = end - start;
|
|
chai.assert(timeInMs < 300, "Should take less than 300ms on most platforms");
|
|
})
|
|
|
|
it("history snapshot cleaning should be fast", function(){
|
|
//
|
|
var workArea = getWorkArea();
|
|
var html = "<div class='foo bar'>Yay, really large HTML documents are fun!</div>\n";
|
|
html = stringRepeat(html, 5 * 1024); // ~350K in size, about the size of CNN's body tag :p
|
|
workArea.insertAdjacentHTML("beforeend", html)
|
|
var start = performance.now();
|
|
htmx._("cleanInnerHtmlForHistory")(workArea);
|
|
var end = performance.now();
|
|
var timeInMs = end - start;
|
|
chai.assert(timeInMs < 50, "Should take less than 50ms on most platforms");
|
|
})
|
|
|
|
}) |