作家
登录

教你编写Node.js中间件,实现服务端缓存

作者: 来源: 2017-09-07 14:32:03 阅读 我要评论

 { 
  •       res.sendResponse = res.send 
  •       res.send = (body) => { 
  •         mcache.put(key, body, duration * 1000); 
  •         res.sendResponse(body) 
  •       } 
  •       next() 
  •     } 
  •   } 
  •  
  • 缓存的有效时光是10秒。

    最终在断定之外,我们的中心件把控制权交给下一?中心件。

    最终应用和测试如下代码:

    同样,我们应用了 npm 模块:memory-cache,它存在优缺点如下:

    • 读写敏捷而简单,不须要其他依附;
    • 当办事器或者这个过程挂掉落的时刻,缓存中的内容将会全部损掉。
    • memcache 是精华存内容存放在了本身过程的内存中,所以这部分内容是无法在多个 Node.js 过程之间共享的。
    1. app.get('/', cache(10), (req, res) => { 
    2.   setTimeout(() => { 
    3.     res.render('index', { title: 'Hey', message: 'Hello there'date: new Date()}) 
    4.   }, 5000) //setTimeout was used to simulate a slow processing request 
    5. })  

    我应用了 setTimeout 来模仿一?超长(5s)的操作。

    最终 Demo 代码,迎接拜访它的Github地址。

    打开浏览器控制面板,发明在10秒缓存到期以内:

    至于为什么 cache 中心件要那样子写、next() 为什么是中心件把控制权传递,我并不计算展开去讲。有兴趣的读者可以看一下 Express 源码。

    还有几个小问题

    细心看我们的页面,再去领会一下实现代码。也许细心的读者能发明一个问题:刚才的实现我们缓存了全部页面,并将 date: new Date() 传入了 jade 模版 index.jade 里。那么,在射中缓存的前提下,10秒内,页面无法动态刷新来同步,直到10秒缓存到期。

    同时,我们什么时刻可以应用上述中心件,进行办事端缓存呢?当然是静态内容才可以应用。同时,PUT, DELETE 和 POST 操作都不该该进行类似的缓存处理。

    如不雅这些弊病 really matter,在实际开辟中我们可以选择分布式的 cache 办事,比如 Redis。同样你可以在 npm 上找到:express-redis-cache 模块应用。

    在真实的开辟场景中,办事端缓存已经成为 common sense,然则在 Node.js 的世界里,领会个中心件思惟,本身手动编写办事,同样乐趣无穷。

    与实践相结合,我认为真正缓存全部页面(如同 demo 那样)并不是一个推荐的做法(当时实际场景实际分析),同样应用请求 url 作为缓存的 key 也有待推敲。比如,页面中的一些静态内容可能会在其他页面中反复应用到,复竽暌姑就成了问题。



      推荐阅读

      戴尔曹志平:借助云联盟力量,为用户提供端到端解决方案

    【51CTO.com原创稿件】自客岁戴尔将来就绪中国“随便率性云”计谋和将来就绪企业袈淦联盟正式颁布后>>>详细阅读


    本文标题:教你编写Node.js中间件,实现服务端缓存

    地址:http://www.17bianji.com/lsqh/37212.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)