国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

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

2024-05-06 15:36:49
字體:
來源:轉載
供稿:網友

前言

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 能力:

    隱藏參數arguments可以獲取參數列表 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}            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 大兴区| 永年县| 柳河县| 扶风县| 上饶市| 包头市| 康乐县| 崇明县| 云龙县| 阳朔县| 卢龙县| 吴忠市| 广水市| 宣城市| 昆山市| 延庆县| 芒康县| 平塘县| 太仓市| 常德市| 宁波市| 天水市| 长寿区| 镇巴县| 井冈山市| 张掖市| 宝兴县| 寻甸| 友谊县| 昌乐县| 正阳县| 芦溪县| 延吉市| 改则县| 巩义市| 沐川县| 华阴市| 崇仁县| 建德市| 潢川县| 勐海县|