htmx/test/core/perf.js

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");
})
})