OurJS


OurJS-我们的JS, 我们的技术-IT文摘; 专注JS相关领域;
我们热爱编程, 我们热爱技术;我们是高大上, 有品味的码农;

欢迎您订阅我们的技术周刊


我们会向您分享我们精心收集整理的,最新的行业资讯,技术动态,外文翻译,热点文章;
我们使用第三方邮件列表向您推送,我们不保存您的任何个人资料,注重您的隐私,您可以随时退订,

欢迎分享您的观点,经验,技巧,心得

让我们一起找寻程序员的快乐,探索技术, 发现IT人生的乐趣;


本网站使用缓存技术每次加载仅需很小流量, 可在手机中流畅浏览;
如果您发现任何BUG,请即时告知我们: ourjs(at)ourjs.com

OnceIO(NodeJS)中的服务器端缓存、模板预加载和静态资源文件的缓存和Gzip压缩机制


分享到
分类 JS学习   关键字 Node.JS   发布 ourjs  1478737583719
注意 转载须保留原文链接,译文链接,作者译者等信息。  

OnceIOOnceDoc企业私有内容(网盘)管理系统的底层Web框架,它可以对Web进行分布式存储,在一个扩展包里即可包含前端、后端和数据库定义,只需通过添加/删除目录的方式就可实现功能删减,实现真正的模块化扩展。目前OnceIO已经开源,这里是介绍如何使用的一系列文章。

服务器端缓存

Web 资源在服务器和客户端(浏览器)之间的副本不仅能保存在客户端,也可以保存在服务器端。缓存会根据进来的请求将输出内容的副本保存在服务器内存中;然后,如果下一个请求是相同的 URL,且网页在这段时间内没有更新,服务器就不会再次从硬盘中获取内容,而是直接使用内存中缓存的网页副本,达到节约带宽,减少延迟的作用。

下面我们将介绍一些 OnceIO 中和服务器端缓存有关的函数和属性。

服务器端缓存清空函数 app.clear()

app.clear() 能清除通过清空服务器内存删除服务器端缓存,通常会被设置为只有管理员才有权限调用,示例代码如下:

app.get('/clear', function(req, res) {
  app.clear()
}) 

访问 '/clear' 路径,服务器端缓存将被清空。

静态文件服务器端缓存控制 fileCacheSize

fileCacheSize 是服务器端缓存静态文件的最大尺寸,超过这一尺寸的文件将不会被服务器缓存。fileCacheSize 的值可以在定义应用程序时设置,默认值为 0,即不在服务器端缓存任何静态文件,示例代码如下:

var app = onceio({
  fileCacheSize: 1024 * 1024
})

fileCacheSize 的单位是 Byte,1024 * 1024 代表 1 MB。fileCacheSize 的值建议设为 1~2 MB。如果它的值太大,OnceIO 的内存将被大量占用且压缩过程将会耗费很多时间。

当一个路径第一次被访问时,OnceIO 会自动将响应中体积小于 fileCacheSize 的文件存入内存并用 gzip 将这些文件逐个压缩打包再存一份。当路径再次被访问时,服务器便可直接发送 OnceIO 内存中的文件而无需再次从硬盘中获取,此时是否发送压缩包版本则是根据用户端浏览器是否支持 gzip 决定的。

一般情况下,对于每个资源文件,服务器只需要对硬盘进行一次 I/O,这也是 OnceIO 名称的由来。

fileCacheSize 为 0,即禁用服务器端缓存机制时,一个没有客户端缓存的客户端访问某个被其它用户访问过的路径时浏览器开发者工具中的 Network 栏效果如下:

 Network

其它条件不变,使用服务器内存缓存机制时浏览器 Network 栏效果如下,服务器用内存中的 gzip 压缩包发来响应:

 Network

与浏览器端缓存不同的是,服务器端缓存没有判断缓存文件有效性的功能,因此每次修改后端文件后,开发人员都需重启服务器或使用 app.clear() 清空服务器内存以确保服务器内存中的缓存总是最新的。一般情况下每次发布和布暑新版本的node应用后,重启nodejs进程都是必须的,借助redis等sesion持久化存储机制,这个重启过程可以在几秒之内完成,并且不影响当前登录用户的session会话状态。

服务器端模板文件缓存

templateCache

templateCache 的默认值为 false,即不在服务器端缓存模板文件等动态文件。它的值可以在定义应用程序时设置,示例代码如下:

var app = onceio({
   templateCache: true
})

当 templateCache 为 true 时,模板文件会在服务器内存中被缓存。此时除非重启服务器,否则模板文件将不会被刷新。

模板嵌套和preload

模板的嵌套情况处理起来有时会比较复杂,模板可能会存在多重嵌套的情况,此时加载完所有模板需要一定的时间,OnceIO使用了一个缓存池来存储这些被嵌套的模板文件。所以用户第一次访问时缓存池为空,被嵌套的网页内容无法在第一次被渲染出来。用户需要第二次刷新才能看到完成了模板文件在缓存中的更新。这是OnceIO模板嵌套的通用代码,支持所有模板引擎。

    <!--#include="/analytics.tmpl"-->

OnceIO 内置了 preload 方法来预加载某一目录下的所有模板文件,预先加载缓存池。对当前目录下的 tmpl 后缀的文件使用 preload 的示例代码如下:

app.preload('.', '.tmpl')

preload 的第一个参数是相对路径,示例中的 '.' 代表web的home 路径,home 是 OnceIO 应用程序的一个属性,它的值可以在定义应用程序时设置,默认值为 './',即当前目录;preload 的第二个参数是文件类型,示例中的 '.tmpl' 代表 tmpl 后缀的动态网页文件。

使用 preload 后,即使服务器没有受到客户端的请求,也会提前加载模板文件,将其缓存在服务器内存中。在templateCache设置为true时,用户访问时服务器将不会再从硬盘读取模板文件,用户即可看到渲染完成的网页。  

 

OnceIO项目: https://github.com/OnceDoc/onceio

原文地址: 点此
社区评论 ( Beta版 )
OnceDoc 您自己的企业内容管理系统——文档、流程、知识库、报表、网盘All In One

访问404页面,寻找丢失儿童
 热门文章 - 分享最多
  1. 阿里任性Hr开除月饼极客:这样冰冷的公司没什么值得我留恋
  2. GitHub2016报告AngularJS流行度下降,JavaScript活跃度为Java两倍
  3. 在 2016 年学 JavaScript 是一种什么样的体验?
  4. 2016年收入最高的5个编程语言,JavaScript最流行,Java和C没在前5
  5. 传言GITHUB正在寻求第二轮融资,或面临估值下降、清算或被微软收购
  6. Java 之父求职被嫌年纪大,硅谷公司现在喜欢“小鲜肉”,不爱“老古董”
  7. NodeJS中的Middleware是什么?在OnceIO中创建和使用中间件
  8. OnceIO(Node.JS)中的模板引擎是什么及MVC设计模式的使用与实现
  9. 用OnceIO(NodeJS)搭建简单的web服务器
  10. OnceIO(Node.JS)中安装、使用和更换doT、EJS、pug等模板引擎
  11. AirJD-简单好用的免费建站工具

 相关阅读 - JS学习
  1. NodeJS中的客户端缓存、浏览器缓存、304缓存和OnceIO的缓存控制
  2. OnceIO(Node.JS)的路由(Routing)、路由方法和路由变量
  3. Node.JS的表单提交及OnceIO中接受GET/POST数据的三种方法
  4. OnceIO(Node.JS)中安装、使用和更换doT、EJS、pug等模板引擎
  5. OnceIO(Node.JS)中的模板引擎是什么及MVC设计模式的使用与实现
  6. NodeJS中的Middleware是什么?在OnceIO中创建和使用中间件
  7. 用OnceIO(NodeJS)搭建简单的web服务器
  8. JavaScript函数式编程(一、二、三)
  9. JavaScript在物联网中的应用
  10. 如何编写 jQuery 插件

 关键字 - Node.JS
  1. 6款基于Node.JS的开源内容管理和静态网站生成系统
  2. 在nodejs中使用Redis缓存和查询数据及Session持久化(Express)
  3. Node.JS中如何判断递归嵌套的所有回调函数已经执行完毕,以读取目录下所有文件为例:计数比Promise方式快将近一倍
  4. Node.js网页抓取:一个最简单的http请求客户端示例(request client)
  5. 为什么你应该抛弃Express的视图渲染引擎
  6. 用纯Node.JS弹出Windows系统消息提示框(MessageBox)
  7. 理解Node.js的事件循环(Event Loop)和线程池
  8. Node.JS中如何快速扫描端口并发现局域网内的Web服务器地址(80)
  9. Express入门教程:一个简单的博客
  10. Node.JS循环递归复制文件夹目录及其子文件夹下的所有文件

 欢迎订阅 - 技术周刊

我们热爱编程, 我们热爱技术; 我们是高端, 大气, 上档次, 有品味, 时刻需要和国际接轨的码农; 欢迎您订阅我们的技术周刊; 您只需要在右上角输入您的邮箱即可; 我们注重您的隐私,您可以随时退订.
加入我们吧! 让我们一起找寻码农的快乐,探索技术, 发现IT人生的乐趣;


 关注我们

我们的微信公众号: ourjs-com
打开微信扫一扫即可关注我们:
IT文摘-程序员(码农)技术周刊

ourjs官方微信号