atlas-relax
Version:
A minimal, powerful declarative VDOM and reactive programming framework.
33 lines (30 loc) • 1.07 kB
JavaScript
const { TemplateFactory, doWork } = require("./helpers");
const { diff, Frame } = require("../../");
const { fillCases, runTests, time, frames, RENDER_WORK } = require("./perf-helpers");
// don't wanna doWork during initialization
let init = true;
class PostFlushSubframe extends Frame {
render(temp){
if (RENDER_WORK) init || doWork(RENDER_WORK);
return temp.next;
}
rendered(){
}
cleanup(){
}
}
const factory = new TemplateFactory(PostFlushSubframe);
const cases = fillCases((c, s, cache) => {
for (let i = 0; i < 3; i++) cache.temps.push(factory[c](s));
})
// initialization is over, now we wanna doWork during diffs
init = false;
runTests(cases, (c, s, done) => {
const { temps } = cases[c][s];
let i = -1;
const posTemp1 = temps.pop(), posTemp2 = temps.pop(), posTemp3 = temps.pop();
time("mount w/ lifecycle", () => frames[++i] = diff(posTemp1)), i = -1;
time("update w/ lifecycle", () => diff(++i%2 ? posTemp2 : posTemp3, frames[0])), i = -1;
time("unmount w/ lifecycle", () => diff(null, frames[++i])), i = -1;
done();
})