diff --git a/benchmark.ts b/benchmark.ts deleted file mode 100644 index 589c571..0000000 --- a/benchmark.ts +++ /dev/null @@ -1,98 +0,0 @@ -class MockClassList { - classes: Set = new Set(); - add(cls: string) { this.classes.add(cls); } - remove(cls: string) { this.classes.delete(cls); } -} - -class MockHTMLElement { - classList = new MockClassList(); - dataset: any = {}; -} - -const N = 10000; -const ITEM_COUNT = 100; - -function benchmarkOld() { - const cachedItems = Array.from({ length: ITEM_COUNT }, (_, i) => ({ - el: new MockHTMLElement(), - top: i * 10, - bottom: i * 10 + 9 - })); - cachedItems.forEach((item, i) => item.el.dataset.docId = String(i)); - - const data = { docs: Array.from({ length: ITEM_COUNT }, (_, i) => ({ id: String(i), pinned: false })) }; - const doc = { pinned: false }; - const el = cachedItems[0].el; - - const start = performance.now(); - for (let i = 0; i < N; i++) { - const clientY = (i % ITEM_COUNT) * 10 + 5; // simulate moving through all items - - let over: MockHTMLElement | undefined; - for (const item of cachedItems) { - item.el.classList.remove("drag-over"); - if (!over && item.el !== el) { - if (clientY >= item.top && clientY <= item.bottom) { - over = item.el; - } - } - } - if (over) { - const overDoc = data.docs.find((d) => d.id === over.dataset.docId); - if (overDoc && !!overDoc.pinned === !!doc.pinned) over.classList.add("drag-over"); - } - } - return performance.now() - start; -} - -function benchmarkNew() { - const cachedItems = Array.from({ length: ITEM_COUNT }, (_, i) => ({ - el: new MockHTMLElement(), - top: i * 10, - bottom: i * 10 + 9 - })); - cachedItems.forEach((item, i) => item.el.dataset.docId = String(i)); - - const data = { docs: Array.from({ length: ITEM_COUNT }, (_, i) => ({ id: String(i), pinned: false })) }; - const doc = { pinned: false }; - const el = cachedItems[0].el; - let prevOver: MockHTMLElement | undefined; - - const start = performance.now(); - for (let i = 0; i < N; i++) { - const clientY = (i % ITEM_COUNT) * 10 + 5; // simulate moving through all items - - let over: MockHTMLElement | undefined; - for (const item of cachedItems) { - if (!over && item.el !== el) { - if (clientY >= item.top && clientY <= item.bottom) { - over = item.el; - } - } - } - - let newOver: MockHTMLElement | undefined; - if (over) { - const overDoc = data.docs.find((d) => d.id === over.dataset.docId); - if (overDoc && !!overDoc.pinned === !!doc.pinned) { - newOver = over; - } - } - - if (prevOver && prevOver !== newOver) { - prevOver.classList.remove("drag-over"); - } - if (newOver && prevOver !== newOver) { - newOver.classList.add("drag-over"); - } - prevOver = newOver; - } - return performance.now() - start; -} - -const oldTime = benchmarkOld(); -const newTime = benchmarkNew(); - -console.log(`Old Time: ${oldTime.toFixed(2)} ms`); -console.log(`New Time: ${newTime.toFixed(2)} ms`); -console.log(`Improvement: ${((oldTime - newTime) / oldTime * 100).toFixed(2)}%`);