Merge pull request #6 from TauNeutrino/perf-optimize-tags-7950496920454073492
⚡ Optimize tag badge generation with for...of
This commit is contained in:
@@ -358,7 +358,10 @@ export function createDayCard(day) {
|
|||||||
|
|
||||||
let tagsHtml = '';
|
let tagsHtml = '';
|
||||||
if (matchedTags.length > 0) {
|
if (matchedTags.length > 0) {
|
||||||
const badges = matchedTags.map(t => `<span class="tag-badge-small"><span class="material-icons-round" style="font-size:10px;margin-right:2px">star</span>${escapeHtml(t)}</span>`).join('');
|
let badges = '';
|
||||||
|
for (const t of matchedTags) {
|
||||||
|
badges += `<span class="tag-badge-small"><span class="material-icons-round" style="font-size:10px;margin-right:2px">star</span>${escapeHtml(t)}</span>`;
|
||||||
|
}
|
||||||
tagsHtml = `<div class="matched-tags">${badges}</div>`;
|
tagsHtml = `<div class="matched-tags">${badges}</div>`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
52
tests/benchmark_tags.js
Normal file
52
tests/benchmark_tags.js
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
|
||||||
|
const { performance } = require('perf_hooks');
|
||||||
|
|
||||||
|
function escapeHtml(text) {
|
||||||
|
// Simple mock for benchmark purposes
|
||||||
|
return text
|
||||||
|
.replace(/&/g, "&")
|
||||||
|
.replace(/</g, "<")
|
||||||
|
.replace(/>/g, ">")
|
||||||
|
.replace(/"/g, """)
|
||||||
|
.replace(/'/g, "'");
|
||||||
|
}
|
||||||
|
|
||||||
|
function currentImplementation(matchedTags) {
|
||||||
|
const badges = matchedTags.map(t => `<span class="tag-badge-small"><span class="material-icons-round" style="font-size:10px;margin-right:2px">star</span>${escapeHtml(t)}</span>`).join('');
|
||||||
|
return `<div class="matched-tags">${badges}</div>`;
|
||||||
|
}
|
||||||
|
|
||||||
|
function optimizedImplementation(matchedTags) {
|
||||||
|
let badges = '';
|
||||||
|
for (const t of matchedTags) {
|
||||||
|
badges += `<span class="tag-badge-small"><span class="material-icons-round" style="font-size:10px;margin-right:2px">star</span>${escapeHtml(t)}</span>`;
|
||||||
|
}
|
||||||
|
return `<div class="matched-tags">${badges}</div>`;
|
||||||
|
}
|
||||||
|
|
||||||
|
const tagSizes = [0, 1, 5, 10, 50];
|
||||||
|
const iterations = 100000;
|
||||||
|
|
||||||
|
console.log(`Running benchmark with ${iterations} iterations...`);
|
||||||
|
|
||||||
|
for (const size of tagSizes) {
|
||||||
|
const tags = Array.from({ length: size }, (_, i) => `Tag ${i}`);
|
||||||
|
|
||||||
|
console.log(`\nTag count: ${size}`);
|
||||||
|
|
||||||
|
// Baseline
|
||||||
|
const startBaseline = performance.now();
|
||||||
|
for (let i = 0; i < iterations; i++) {
|
||||||
|
currentImplementation(tags);
|
||||||
|
}
|
||||||
|
const endBaseline = performance.now();
|
||||||
|
console.log(`Baseline (map.join): ${(endBaseline - startBaseline).toFixed(4)}ms`);
|
||||||
|
|
||||||
|
// Optimized
|
||||||
|
const startOptimized = performance.now();
|
||||||
|
for (let i = 0; i < iterations; i++) {
|
||||||
|
optimizedImplementation(tags);
|
||||||
|
}
|
||||||
|
const endOptimized = performance.now();
|
||||||
|
console.log(`Optimized (for...of): ${(endOptimized - startOptimized).toFixed(4)}ms`);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user