JavaScript >> Javascript 文檔 >  >> JavaScript

定時記憶

某些操作在計算上是昂貴的,但由於它們的結果可能會隨著時間或外部影響而改變,它們不適合典型的記憶——例如 getElementsByClassName .這是我為幫助解決這些情況而製作的一個 JavaScript 定時記憶裝飾器/高階函數,它接受一個以毫秒為單位的可選過期參數。

function memoize (functor, expiration) {
	var memo = {};
	return function () {
		var key = Array.prototype.join.call(arguments, "§");
		if (key in memo)
			return memo[key];
		if (expiration)
			setTimeout(function () {delete memo[key];}, expiration);
		return memo[key] = functor.apply(this, arguments);
	};
}

這種方法允許您將任何函數轉換為記憶函數。請注意,為每組參數記住返回值。但是,由於技術限制,它僅在參數是數組或標量值時才可靠,但您可以輕鬆使用例如一個 toJSON 方法而不是 join 將對象序列化為緩存鍵的一部分(需要額外的開銷)。

你可以像這樣使用上面的代碼:

// Make a function which memoizes for 1000 milliseconds at a time
var fn = memoize(function () {
	Array(500000).join("."); // slow
	return true;
}, 1000);

…或者省略過期參數以永久記憶。

這裡還有幾篇關於 JavaScript 記憶的文章:

  • Oliver Steele 的單行 JavaScript 記憶
  • Keith Gaughan 在 JavaScript 中的記憶

Tutorial JavaScript 教程
  1. 關於 Node.js 中的異步迭代器

  2. 使用 vue/cli 創建項目時修復 Node-sass 錯誤

  3. WebGL - 從渲染緩衝區讀取像素數據

  4. JavaScript 參考:對象

  5. 用 Jest 測試你的 React 應用

  6. 如何轉換此代碼以便函數可以使用變量?

  7. npm 未在 package.json 中運行腳本

  1. URL 正則表達式驗證 JavaScript |示例代碼

  2. 在矽谷初創公司領導開發者關係

  3. 在 Vue 3 中使用 Suspense 實現異步

  4. 我正在尋找用於反應應用程序的拖放頁面構建器資源

  5. 測試(和計時)字符串反轉函數

  6. Hapi:使用預路由功能來獲得樂趣和利潤

  7. Gitprefix - 自動格式化提交消息

  1. Google Cloud Run 上的通用/同構 Web 應用

  2. 使用 React 顯示 MapBox 地圖。 🗺️

  3. 🚀#2 做了一個開源 Markdown 編輯器✨(PWA+Electron+Angular+Indexed DB)🎉。

  4. 使用回溯算法解決數獨