Toggle navigation
MeasureThat.net
Create a benchmark
Tools
Feedback
FAQ
Register
Log In
Run results for:
min check - 2
Go to the benchmark
Embed
Embed Benchmark Result
Run details:
User agent:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36
Browser:
Chrome 127
Operating system:
Mac OS X 10.15.7
Device Platform:
Desktop
Date tested:
one year ago
Test name
Executions per second
Create light
255235.0 Ops/sec
Directly find
26099.1 Ops/sec
Script Preparation code:
// 假的 entityById 資料 window.entityById = {}; for (let i = 1; i <= 200; i++) { const price = (i * 10).toString(); // 產生 10, 20, 30, ..., 1000 的 price key const amount = Math.floor(Math.random() * 100) + 1; // 隨機產生 1 到 100 的 amount window.entityById[price] = amount; } // 假的 data 資料 window.data = []; for (let i = 0; i < 20; i++) { const price = ((Math.floor(Math.random() * 100) + 1) * 10).toString(); // 隨機選擇 10, 20, 30, ..., 1000 的 price key const amount = Math.floor(Math.random() * 101); // 隨機產生 0 到 100 的 amount window.data.push([price, amount]); }
Tests:
Create light
function getEntityById(state, data) { const entityById = { ...state.entityById } data.forEach(([price, _amount]) => { const amount = Number(_amount) if (amount === 0) { delete entityById[price] } else { entityById[price] = { amount } } }) return entityById } askEntityById = getEntityById(window.entityById, window.data) const minAsks = Math.min(...Object.keys(askEntityById).map(Number))
Directly find
function getMinAsks(state, data) { const sortedAsks = Object.keys(entityById).sort((a, b) => (Number(a) - Number(b) ? 1: -1)) const idFromData = {} data.forEach(([price, _amount]) => { // array deconstructor is slow const amount = Number(_amount) if (amount === 0) { idFromData[price] = false } else { idFromData[price] = true } }) const sortedIdFromData = Object.keys(idFromData).sort((a, b) => (Number(a) - Number(b) ? 1 : -1)) let minAsk let minStateAsk = sortedAsks.shift() let minDataAsk = sortedIdFromData.shift() while (!minAsk && (sortedAsks.length > 0 || sortedIdFromData.length > 0)) { if (!minDataAsk) { if (idFromData[String(minStateAsk)]) { minAsk = Number(minStateAsk) } else { minStateAsk = sortedAsks.shift() } } else if (!minStateAsk) { if (idFromData[String(minDataAsk)]) { minAsk = Number(minDataAsk) } else { minDataAsk = sortedIdFromData.shift() } } else if (Number(minStateAsk) <= Number(minDataAsk)) { if (idFromData[String(minStateAsk)]) { minAsk = Number(minStateAsk) } else { minStateAsk = sortedAsks.shift() } } else if (Number(minStateAsk) > Number(minDataAsk)) { if (idFromData[String(minDataAsk)]) { minAsk = Number(minDataAsk) } else { minDataAsk = sortedIdFromData.shift() } } } return minAsk } const minAsks = getMinAsks(window.entityById, window.data)