久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      JavaScript對象迭代方法和性能的比較

      Object.entries


      返回對象所有可枚舉的鍵值對,不會追尋原型鏈上的 key

      let obj = {   key1: 'value1',   key2: 'value2',   key3: 'value3', } Object.entries(obj).forEach(entry => {   let key = entry[0]   let value = entry[1]   // entry 會是這樣 ["key1", "value1"] })

      Object.keys


      返回對象所有可枚舉的鍵

      let obj = {   key1: 'value1',   key2: 'value2',   key3: 'value3', } Object.keys(obj).forEach(key => {   let value = obj[key] })

      Object.values


      返回對象所有可枚舉的值

      let obj = {   key1: 'value1',   key2: 'value2',   key3: 'value3', } Object.values(obj).forEach(value => {   // 只能使用 value })

      for…in loop


      迭代可枚舉屬性,會順著原型鏈找下去

      let obj = {   key1: 'value1',   key2: 'value2',   key3: 'value3', } for (const key in obj) {   let value = obj[key]   if (obj.hasOwnProperty(key)) {     // 本身的   } else {     // 來自原型鏈的   } }

      Object.getOwnPropertyNames


      返回對象所有(包括不可枚舉)的鍵(原文說會找原型鏈是錯的)

      let obj = {   key1: 'value1',   key2: 'value2',   key3: 'value3', } Object.getOwnPropertyNames(obj).forEach(key => {   let value = obj[key] })

      性能比較


      下面的代碼用上面的幾種方法遍歷有 1000000 個屬性的對象,循環(huán) 10 次

      const { PerformanceObserver, performance } = require('perf_hooks')  let objectSize = 1000000 let iterations = 10  console.log(   'Starting performance test with %d object size and %d iterations',   objectSize,   iterations )  let values = {   ENTRIES: 0,   KEYS: 0,   VALUES: 0,   FORIN: 0,   GETOWP: 0, }  const obs = new PerformanceObserver(items => {   let entry = items.getEntries()[0]   console.log(entry.name, entry.duration)   values[entry.name] += entry.duration   performance.clearMarks() }) obs.observe({ entryTypes: ['measure'] })  function generateObject() {   let obj = {}   for (let i = 0; i < objectSize; i++) {     obj['key' + Math.random()] = 'val' + Math.random()   }   return obj }  for (let i = 0; i < iterations; i++) {   let obj = generateObject()    //Object.entries   performance.mark('A')   Object.entries(obj).forEach(entry => {     let key = entry[0]     let value = entry[1]   })   performance.mark('B')   performance.measure('ENTRIES', 'A', 'B')    //Object.Keys   performance.mark('A')   Object.keys(obj).forEach(key => {     let value = obj[key]   })   performance.mark('B')   performance.measure('KEYS', 'A', 'B')    //Object.Values   performance.mark('A')   Object.values(obj).forEach(value => {})   performance.mark('B')   performance.measure('VALUES', 'A', 'B')    //For In   performance.mark('A')   for (const key in obj) {     let value = obj[key]   }   performance.mark('B')   performance.measure('FORIN', 'A', 'B')    //Object.getOwnPropertyNames   performance.mark('A')   Object.getOwnPropertyNames(obj).forEach(key => {     let value = obj[key]   })   performance.mark('B')   performance.measure('GETOWP', 'A', 'B') }  console.log(   Object.entries(values).sort((a, b) => {     return a[1] - b[1]   }) )

      下面的結(jié)果是我自己跑的,順序的是指賦值的時候直接用 index,隨機則是鍵值對都插入隨機數(shù),得到的性能排序是和作者一樣的,也因為 node.js 和 chrome 都是 V8,所以這個應(yīng)該也是代表在瀏覽器上的性能排序。

      // 順序 ;[   ['FORIN', 4677.321499],   ['KEYS', 4812.776572],   ['GETOWP', 8610.906197],   ['VALUES', 9914.674390999999],   ['ENTRIES', 19338.083694], ]  // 隨機 ;[   ['KEYS', 4502.579589],   ['FORIN', 4678.013548000001],   ['GETOWP', 8880.325031999999],   ['VALUES', 10104.106962],   ['ENTRIES', 17089.637588999998], ]

      之前聽說引擎會猜測下一個值讓運行速度更快,看數(shù)據(jù)似乎沒有太大影響。

      也算是一點干貨,快點來原文給作者鼓鼓掌吧

      推薦教程:《JS教程》

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號