JavaScript的記憶函數真的能夠提高性能嗎?

1 記憶函數是什麼呢?
讓函數記住曾經計算過的參數對應的結果
2 那咱們爲何使用記憶函數呢?
答案是 避免重複計算
3 在工做中如何使用和實現函數記憶 ?
造成閉包,在閉包中維護一個哈希數組(其實就是對象),讓哈希數組幫你記住曾經你作過的計算

請看下面的例子:(計算質數)
先寫兩個函數

第一個數帶記憶功能的:

let isPrime = (function () {
     let hash = {//哈希中存儲相似這樣的結構
        //8: false,
        //7: true
      }
      let isPrime = (n)=> { // 返回內層函數
         if (n <3) {
             return true
          } else if (hash[n] !==undefined) {
              return hash[n]
          } else {
             for (leti = 2; i < Math.sqrt(n);i++) {
                 if (n%i ==0) {
                    return hash[n] =false;
                 }
             }
            return hash[n] =true
         }
     }
    return isPrime
})() //這個函數使用閉包 和 一個對象(實現記憶)


第二個是個普通函數

let isPrime1 = (n)=> {
    if (n <3) {
       return true
     } else {
        for (leti = 2; i < Math.sqrt(n);i++) {
           if (n%i ==0) {
               return false;
           }
       }
      return true
    }
}

而後咱們來見證一下他們的區別吧~~~~

// 先聲明一個空數組 我往裏push 1000000 個 1100 之內的 隨機數

let array = []
for (leti = 0; i < 1000000; i++) {
    array.push(parseInt(Math.random() *1100 ))
}

進入測試階段 ~~~ (利用console.time 和 console.Endtime)看看執行時間.....

// 這個是沒有帶函數記憶的~~

console.time('isPrime1')
for (leti = 0; i < array.length;i++) {
   isPrime1(array[i])
}
console.timeEnd('isPrime1')


// 這個是帶函數記憶的

console.time('isPrime')

for (leti = 0; i < array.length;i++) {
    isPrime(array[i])
}
console.timeEnd('isPrime')

下面就是結果了~~

平常項目中能用到的話,也能夠提高些性能吧~~~^_^
相關文章
相關標籤/搜索