亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

Node.js 實現簡單的無侵入式緩存框架的方法

2024-05-06 16:53:29
字體:
來源:轉載
供稿:網友

前言

python 的flask.ext.cache 通過注解這樣對方法返回結果進行緩存:

@cache.cached(timeout=300, key_prefix='view_%s', unless=None)def hello(name=None):  print 'view hello called'  return render_template('hello.html', name=name)

這類實現方式對業務邏輯沒有絲毫的侵入性,非常之優雅。

最近在做 Node.js 地項目,然而 js ES 7 之前都不支持注解,目前見到的緩存框架雖然在 API 設計上都很簡潔、很有想法。

可是痛點在于它們都是侵入式的,需要在業務邏輯代碼中插入緩存邏輯,這些方式很不優雅。

正題

今天花點時間研究下js有沒有辦法,以比較優雅地方法實現緩存。

我對緩存框架的訴求:

  • 不對原方法進行更改
  • 能實現對不同參數地緩存
  • 支持緩存時間

我了解到的 js 能力:

  1. 隱藏參數arguments可以獲取參數列表
  2. prototype 可用來重寫覆蓋原方法

可行性?

看了看 prototype 文檔

直覺告訴我看起來可行,以下是官方的說明:

當一個函數被調用時,調用的參數被保留在類似數組 "變量" 的參數中。例如, 在調用 "myFn (a、b、c)"時, 在myFn 的主體內的參數將包含 3個類似數組的元素對應于 (a、b、c)。 使用鉤子修改原型時,只需通過調用該函數的 apply (),將 this 與參數 (調用狀態) 傳遞給當前行為。這種模式可以用于任何原型,如 Node.prototype、 Function.prototype 等.

var current = Object.prototype.valueOf;// 由于我的屬性 "-prop-value"是交叉性的, 并不總是// 在同一個原型鏈上,我想要修改 Object.prototype: Object.prototype.valueOf = function() { if (this.hasOwnProperty('-prop-value')) {  return this['-prop-value']; } else {  // 它看起來不像我的對象之一,因此,讓我們退回到   // 默認行為,通過盡可能地復制當前行為來實現.  // 此apply的行為類似于其他語言中的"super".  // 即使 valueOf() 不帶參數, 其他的鉤子可能會帶有.  return current.apply(this, arguments); }}

從示例不難看出,我可以在某些條件下通過 apply() 方法調用函數原邏輯,某些條件執行我需要的新邏輯。

寫個 demo 測試一下

// 重寫Function的原型方法cacheFunction.prototype.cache = function () {  var _self = this;  return function() { console.log('arguments', arguments); var key = arguments[0];    if (cache.has(key)) {      return cache.get(key)    } else {      return _self.apply(this, arguments)    }  }}

定義 cache,當且僅當 key 為 1 時有值

var cache = {  has: (key) => { if (key === 1) return true else return false  },  get: (key) => {    return "cached value " + key  }}

定義測試方法

function request(key) { return 'value of ' + key}

應用注入

request = request.cache()

執行一下

request(2)"value of 2"request(1)"cached value 1"

看到結果按照預期輸出,完美!

最后實現

項目引用了 memory-cache 作為基礎緩存庫,實現了相關的緩存功能。

simple-cache.jsconst cache = require('memory-cache');Function.prototype.cache = function (cachekey, time) {  var _self = this;  return function() { var key = cachekey(arguments);    var value = cache.get(key);    if (!value) {      value = _self.apply(this, arguments)  cache.put(key, value, time);    }    return value;  }}var simpleCache = { cache: function(f, cacheKey, cacheTime) { return f.cache(cacheKey, cacheTime); }}module.exports = simpleCachesample.jsconst cache = require('simple-cache-z').cache;function cachekey(args) {  return args[0]}function request(key) {  return (new Date()).getTime();}request = cache(request, cachekey, 5000);console.log('request 1 ', request(1));setTimeout(() => {  console.log('request 2 ', request(2));}, 1000)setTimeout(()=> {  console.log('request 1 ', request(1))  console.log('request 1 ', request(1))  console.log('request 1 ', request(1))  console.log('request 2 ', request(2));  console.log('request 2 ', request(2));  console.log('request 2 ', request(2));}, 2000);setTimeout(()=> {  console.log('request 1 ', request(1));  console.log('request 1 ', request(1));  console.log('request 1 ', request(1));  console.log('request 2 ', request(2));  console.log('request 2 ', request(2));  console.log('request 2 ', request(2));}, 10000);

輸出結果

request 1  1563000551142
// 1000 ms
request 2  1563000552150
// 2000 ms
request 1  1563000551142
request 1  1563000551142
request 1  1563000551142
request 2  1563000552150
request 2  1563000552150
request 2  1563000552150
// 10000 ms
request 1  1563000561151
request 1  1563000561151
request 1  1563000561151
request 2  1563000561151
request 2  1563000561151
request 2  1563000561151

大功告成!

今日研究成果

事實證明方案可行,應用到我的項目中對執行效率和代碼可讀性的提升非常明顯。

我已經把框架打成了包,上傳到 npm 倉庫 simple-cache-z ,可通過如下方式引用。

npm install --save simple-cache-z

用法和代碼上傳至 github 倉庫,歡迎提交代碼和 star:

https://github.com/auv1107/simple-cache-nodejs

總結

以上所述是小編給大家介紹的Node.js 實現簡單的無侵入式緩存框架的方法,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人高清激情视频在线观看| 国产精品夜色7777狼人| 午夜精品福利在线观看| 亚洲一区二区三区香蕉| 久久在线免费观看视频| 97色在线视频| 欧美大全免费观看电视剧大泉洋| 精品久久久久久国产91| 中文字幕日韩av| 亚洲欧洲午夜一线一品| 国产精品自拍视频| 精品国产乱码久久久久久虫虫漫画| 国产精品自拍视频| 久久大大胆人体| 日本韩国在线不卡| 国产在线播放91| 国产拍精品一二三| 欧美黑人国产人伦爽爽爽| 日韩精品视频观看| 久久电影一区二区| 欧美视频在线免费| 国产亚洲激情视频在线| 久久精品国亚洲| 日韩av在线天堂网| 深夜福利亚洲导航| 久久久久久成人精品| 深夜福利亚洲导航| 狠狠爱在线视频一区| 成人欧美一区二区三区在线| 成人久久久久爱| 91在线观看免费高清完整版在线观看| 91网站在线看| 98精品国产自产在线观看| 96精品视频在线| 国产一区二区三区久久精品| 亚洲free性xxxx护士白浆| 欧美高清不卡在线| 久热精品视频在线免费观看| 国产精品96久久久久久| 国产精品视频久久| 91在线网站视频| 国产精品一区二区女厕厕| 97精品国产97久久久久久免费| 青青久久av北条麻妃海外网| 最近2019年好看中文字幕视频| 国语自产精品视频在免费| 亚洲精品xxxx| 欧美放荡办公室videos4k| 成人啪啪免费看| 成人国产精品久久久| 亚洲色图日韩av| 国产精品第3页| 大伊人狠狠躁夜夜躁av一区| 国产亚洲欧洲高清| 成人免费在线视频网站| 欧美老少配视频| 久久亚洲成人精品| 日本韩国欧美精品大片卡二| 欧美日本在线视频中文字字幕| 欧洲日本亚洲国产区| 不卡av电影院| 亚洲综合国产精品| 爱福利视频一区| 91国内揄拍国内精品对白| 午夜精品99久久免费| 日本a级片电影一区二区| 日韩av电影中文字幕| 91午夜理伦私人影院| 97视频网站入口| 欧美在线观看网址综合| 久久国产精品亚洲| 91九色国产视频| 麻豆一区二区在线观看| 国产一区二区三区中文| 欧美成人免费一级人片100| 亚洲片国产一区一级在线观看| 欧美精品在线极品| 亚洲一区第一页| 欧美性20hd另类| 一个色综合导航| 欧美精品www在线观看| 欧美性极品少妇精品网站| 欧美另类99xxxxx| 亚洲在线视频福利| 欧美刺激性大交免费视频| 国产色婷婷国产综合在线理论片a| 亚洲在线免费看| 在线精品91av| 国产在线视频2019最新视频| 国产精品美乳一区二区免费| 久久免费精品日本久久中文字幕| 亚洲欧美综合精品久久成人| 国产精品一区av| 午夜精品久久久久久99热| 欧美激情欧美狂野欧美精品| 2019中文字幕在线观看| 亚洲精品福利免费在线观看| 欧美成人午夜视频| 日本一区二区不卡| 伊人成人开心激情综合网| 欧美人成在线视频| 日韩免费在线电影| 欧美黑人巨大精品一区二区| 日日狠狠久久偷偷四色综合免费| 国产欧美一区二区三区四区| 亚洲另类xxxx| 国产91色在线免费| 日韩免费在线免费观看| 亚洲性无码av在线| 国产精品99蜜臀久久不卡二区| 国产色综合天天综合网| 自拍偷拍亚洲一区| 国产精品96久久久久久| 久久99精品久久久久久青青91| 国语自产精品视频在免费| 国产主播在线一区| 国产一区二区三区精品久久久| 日韩视频免费在线观看| 欧美成人精品一区二区三区| 日韩在线观看免费av| 欧美高清一级大片| 一区二区成人精品| 国产91色在线播放| 国产精品成人播放| 欧美尺度大的性做爰视频| 久久久女女女女999久久| 欧美亚洲午夜视频在线观看| 亚洲电影在线看| 欧美一区二区色| 色偷偷91综合久久噜噜| 国产高清视频一区三区| 亚洲男子天堂网| 精品国产乱码久久久久久虫虫漫画| 欧美国产精品va在线观看| 日韩免费看的电影电视剧大全| 91中文在线观看| 主播福利视频一区| 国产噜噜噜噜久久久久久久久| 欧美性开放视频| 国产精品欧美日韩一区二区| 亚洲免费视频网站| 日韩av中文字幕在线播放| 欧美另类在线观看| 国产精品7m视频| 国产精品人成电影在线观看| 精品日本美女福利在线观看| 国产精品一区二区久久久久| 国产成人涩涩涩视频在线观看| 成人欧美一区二区三区在线| 一区二区三区视频免费在线观看| 日本精品一区二区三区在线| 清纯唯美日韩制服另类| 欧美国产视频一区二区| 国产视频在线一区二区| 久久激情五月丁香伊人| 欧美黑人一级爽快片淫片高清| 久久天天躁日日躁| 在线播放日韩欧美| 7777免费精品视频| 亚洲成人久久电影| 国产精品91久久久久久| 成人伊人精品色xxxx视频| 正在播放欧美视频| 精品国偷自产在线视频|