認識我的人都知道我的記憶力絕對是垃圾。任何缺少 Monty Python 對白和 90 年代另類搖滾樂隊曲目列表的內容,我都無法接受。 然而,對我們來說幸運的是,電腦在記住事物方面的能力要強得多。
概念
我們今天討論的技術稱為記憶化。讓我們從討論純函數開始。純函數背後的想法是,無論你給它什麼輸入,它總是會給出相同的輸出。現在考慮一下您是否有一個進程密集型功能或需要大量開銷的功能。如果您已經知道在提供一組特定參數時運行該函數的結果,為什麼要利用您的資源再次運行它。記憶化允許我們使用該函數的參數作為鍵來儲存該函數先前執行的結果。以下程式碼片段示範了記憶函數的樣子:
處決
const memoize = {}; const getResult = async (n1, n2) => { const key = `${n1}_${n2}`; if (!memoize[key]) { memoize[key] = await resourceIntensiveFunction(n1, n2); } return memoize[key]; };
讓我們來看看程式碼。我們從一個名為 memoize 的物件開始,它將儲存我們的參數和結果作為鍵值集。接下來我們有一個名為 getResult 的函數,它有兩個參數:n1 和 n2。為了簡單起見,我們假設順序很重要。我們將使用兩個參數的串聯來建立一個變數鍵。
現在我們需要檢查 memoize 物件是否包含該鍵的值。我們檢查,如果沒有,我們別無選擇,只能運行資源密集型功能。如果我們運行該函數,我們還必須將結果儲存在記憶物件中以供將來執行。這樣,下次針對這些相同的參數執行此函數時,它將在物件中找到結果並跳過資源密集型函數。
記住之前執行過的查詢
先前未執行查詢時進行記憶
好處
這在許多場景中都很有用。例如,如果您有一系列需要大量時間和資源的長計算,那麼這就是值得進行的最佳化。如果您有需要高網路吞吐量或大量臨時磁碟空間的東西,它也可能很有價值。對於任何這些場景,優點有兩個:它消除了運行先前已執行的函數的需要,並且為需要計算的函數釋放了資源,因為它們不會與已映射的函數競爭資源.
挑戰
在某些情況下這可能不是正確的方法,所以不要總是使用這種範例。如果您的函數不是純函數並且它會根據外部因素而變化,那麼您不想使用這種方法,因為它總是會為您提供第一次運行時的值,而不考慮其他變數。如果應用程式很少使用同一組參數來運行該函數,您也不想使用它。在這種情況下,您將擁有越來越大的很少被使用的資料結構。
這就是記憶的全部。這是一個非常簡單的模式,名字聽起來很嚇人。它有很多應用程序,希望這能讓您更好地了解幕後發生的事情。現在,請原諒,我必須去記住今晚我要做什麼。
原始碼可在 GitHub 上取得
以上是感謝您的記憶的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript字符串替換方法詳解及常見問題解答 本文將探討兩種在JavaScript中替換字符串字符的方法:在JavaScript代碼內部替換和在網頁HTML內部替換。 在JavaScript代碼內部替換字符串 最直接的方法是使用replace()方法: str = str.replace("find","replace"); 該方法僅替換第一個匹配項。要替換所有匹配項,需使用正則表達式並添加全局標誌g: str = str.replace(/fi

簡單JavaScript函數用於檢查日期是否有效。 function isValidDate(s) { var bits = s.split('/'); var d = new Date(bits[2] '/' bits[1] '/' bits[0]); return !!(d && (d.getMonth() 1) == bits[1] && d.getDate() == Number(bits[0])); } //測試 var

本文探討如何使用 jQuery 獲取和設置 DOM 元素的內邊距和外邊距值,特別是元素外邊距和內邊距的具體位置。雖然可以使用 CSS 設置元素的內邊距和外邊距,但獲取準確的值可能會比較棘手。 // 設定 $("div.header").css("margin","10px"); $("div.header").css("padding","10px"); 你可能會認為這段代碼很

本文探討了十個特殊的jQuery選項卡和手風琴。 選項卡和手風琴之間的關鍵區別在於其內容面板的顯示和隱藏方式。讓我們深入研究這十個示例。 相關文章:10個jQuery選項卡插件

發現十個傑出的jQuery插件,以提升您的網站的活力和視覺吸引力!這個精選的收藏品提供了不同的功能,從圖像動畫到交互式畫廊。讓我們探索這些強大的工具:相關文章:1

HTTP-Console是一個節點模塊,可為您提供用於執行HTTP命令的命令行接口。不管您是否針對Web服務器,Web Serv

本教程向您展示瞭如何將自定義的Google搜索API集成到您的博客或網站中,提供了比標準WordPress主題搜索功能更精緻的搜索體驗。 令人驚訝的是簡單!您將能夠將搜索限制為Y

當div內容超出容器元素區域時,以下jQuery代碼片段可用於添加滾動條。 (無演示,請直接複製到Firebug中) //D = document //W = window //$ = jQuery var contentArea = $(this), wintop = contentArea.scrollTop(), docheight = $(D).height(), winheight = $(W).height(), divheight = $('#c


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

禪工作室 13.0.1
強大的PHP整合開發環境

SublimeText3漢化版
中文版,非常好用

SublimeText3 Linux新版
SublimeText3 Linux最新版

記事本++7.3.1
好用且免費的程式碼編輯器

Dreamweaver CS6
視覺化網頁開發工具