记 Object vs Map 性能表现
测试时间
测试结果:
Testing with 100000 entries: Object: Insert time: 42.30ms, Check time: 15.40ms Map: Insert time: 18.00ms, Check time: 6.80ms Set: Insert time: 9.00ms, Check time: 3.30ms Testing with 10000 entries: Object: Insert time: 2.30ms, Check time: 0.90ms Map: Insert time: 0.90ms, Check time: 0.50ms Set: Insert time: 0.80ms, Check time: 0.50ms
测试代码:
const testSize = 10000 // 测试数据量大小 function testObject() { const obj = {} const startTime = performance.now() // 插入数据 for (let i = 0; i < testSize; i++) { obj[`key${i}`] = `value${i}` } const insertTime = performance.now() - startTime // 查找数据 const startTimeCheck = performance.now() for (let i = 0; i < testSize; i++) { const exists = obj.hasOwnProperty(`key${i}`) } const checkTime = performance.now() - startTimeCheck console.log(`Object: Insert time: ${insertTime.toFixed(2)}ms, Check time: ${checkTime.toFixed(2)}ms`) } function testMap() { const map = new Map() const startTime = performance.now() // 插入数据 for (let i = 0; i < testSize; i++) { map.set(`key${i}`, `value${i}`) } const insertTime = performance.now() - startTime // 查找数据 const startTimeCheck = performance.now() for (let i = 0; i < testSize; i++) { const exists = map.has(`key${i}`) } const checkTime = performance.now() - startTimeCheck console.log(`Map: Insert time: ${insertTime.toFixed(2)}ms, Check time: ${checkTime.toFixed(2)}ms`) } function testSet() { const set = new Set() const startTime = performance.now() // 插入数据 for (let i = 0; i < testSize; i++) { set.add(`key${i}`) } const insertTime = performance.now() - startTime // 查找数据 const startTimeCheck = performance.now() for (let i = 0; i < testSize; i++) { const exists = set.has(`key${i}`) } const checkTime = performance.now() - startTimeCheck console.log(`Set: Insert time: ${insertTime.toFixed(2)}ms, Check time: ${checkTime.toFixed(2)}ms`) } function runTests() { console.log(`Testing with ${testSize} entries:`) testObject() testMap() testSet() } runTests()
测试内存
const testSize = 1_000_000 object: 242MB map: 180MB set: 181MB
结论
Map 确实会更好。
