Files
bitvid/benchmarks/kids_scoring_bench.js
google-labs-jules[bot]andPR0M3TH3AN 96dea42692 Optimize object allocation in kids scoring loop
- Replaced array allocation and loop with unrolled scalar comparisons in `kidsScorerStage`.
- Added unit tests and benchmark.
- Measured ~12% performance improvement (282ms -> 249ms for 200k items).

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-08 03:41:50 +00:00

64 lines
1.6 KiB
JavaScript

// benchmarks/kids_scoring_bench.js
import { createKidsScorerStage } from "../js/feedEngine/kidsScoring.js";
import { performance } from "perf_hooks";
async function runBenchmark() {
const itemCount = 200000;
const items = [];
// Create mock items with diverse data to exercise different paths
for (let i = 0; i < itemCount; i++) {
items.push({
video: {
id: `v${i}`,
pubkey: `pubkey${i % 100}`,
duration: 300 + (i % 600), // 5 to 15 minutes
tags: [
["t", "kids"],
["t", "learning"],
["t", i % 2 === 0 ? "preschool" : "science"],
],
viewCount: i * 10,
created_at: Date.now() / 1000 - (i % 10000),
moderation: { trustedCount: i % 5 },
},
metadata: {},
});
}
const context = {
runtime: {
ageGroup: "preschool",
trustedAuthors: ["pubkey1", "pubkey2"],
},
addWhy: () => {}, // Mock addWhy
};
const scorer = createKidsScorerStage();
console.log(`Starting kids scoring benchmark with ${itemCount} items...`);
// Warmup
await scorer([...items.slice(0, 1000)], context);
const iterations = 100;
let totalTime = 0;
for (let i = 0; i < iterations; i++) {
// Reset metadata for each run to be cleaner
items.forEach(item => item.metadata = {});
const start = performance.now();
await scorer(items, context);
const end = performance.now();
totalTime += (end - start);
if (i % 5 === 0) process.stdout.write(".");
}
const avgTime = totalTime / iterations;
console.log(`\nAverage time per run: ${avgTime.toFixed(4)}ms`);
}
runBenchmark().catch(console.error);