JianghuJS缓存加速
为什么要加速
加快网站的访问速度
:前后端资源加速可以缩短用户访问页面的时间,加快页面的加载速度,提高用户体验,保留用户的访问流量。减少服务器负担
:通过前后端资源加速,可以减少服务器的负担和网络带宽的消耗,避免因为文件过大导致服务器崩溃。提高安全性
:通过前后端资源加速,可以将一些静态资源放到CDN加速节点上,并使用HTTPS协议进行加密传输,进一步提高访问安全性。节省成本和提高可扩展性
:通过前后端资源加速,可以采用CDN网络来加速资源的传输,而CDN网络对于大型应用来说,不仅能够提高访问速度,而且还能够将大量的流量转移到CDN节点,避免造成服务器带宽压力,同时也能够节约服务器成本和提高应用的可扩展性。
主要的加速点
- 前端静态资源
- CDN加速、浏览器缓存
- 网络通道加速
- 网络通道加速是一种增强网络通信效率的技术,主要用于加速网络数据传输的速度和减少网络延迟,以提高用户的访问速度和用户体验
- 后端数据缓存加速
- redis、Memcached、基于服务内存、数据库加速等
前端静态资源缓存加速
方式
前端静态资源缓存加速可以提高页面加载速度、减少服务器负载和带宽消耗,下面介绍几种常见的方式
修改HTTP响应头
:在HTTP响应头部加入Expires和Cache-Control字段告诉浏览器和CDN缓存服务器该资源缓存的过期时间或者缓存策略。当资源在缓存有效期之内,浏览器或CDN缓存服务器就会发起一个304 Not Modified响应来从缓存中取得该资源。版本号文件名
:以文件版本号作为文件名,如果文件内容变化,文件名就变化,这样可以使浏览器重新获取该资源,避免使用过期的资源。例如:
<link href="style.css?version=1.1" rel="stylesheet">
本地缓存
:在用户本地使用localStorage或sessionStorage本地存储静态资源,下次访问时直接从本地缓存读取,加快页面访问速度。预加载
:在页面加载时使用link标记的rel属性为preload的来预加载静态资源,使后续的资源请求能够更快地完成。CDN加速
:借助CDN缓存服务器来加速静态资源的传输,提高页面访问速度,减少带宽消耗
JianghuJs前端加速
有两种方式,分别为通过Egg的框架配置和NPM包egg-static-cache
通过Egg的框架配置
在config/config.default.js中增加配置:
// config.default.js
const path = require('path');
static: {
dynamic: true,
preload: false,
maxAge: 31536000,
buffer: true,
dir: [
{ prefix: `/${appId}/public/`, dir: path.join(appInfo.baseDir, 'app/public') },
{ prefix: `/${appId}/public/`, dir: path.join(eggJianghuDir, 'app/public') },
],
},
其中,maxAge表示静态资源的缓存时间(单位是秒),prefix表示前缀,dir表示静态资源的目录,dynamic表示是否开启缓存,preload表示是否在启动时预加载缓存,maxFiles表示缓存文件的个数上限,buffer表示是否缓存到内存中。
// plugin.js
exports.static = true;
enable表示是否开启缓存
NPM包egg-static-cache
安装egg-static-cache依赖包:
npm install egg-static-cache --save
在config.default.js中增加配置:
// config.default.js
exports.staticCache = {
maxAge: 31536000,
dynamic: true,
prefix: '/public/',
gzip: true,
};
在plugin.js中加入启用egg-static-cache的配置:
// plugin.js
exports.static = true;
exports.staticCache = {
enable: true,
package: 'egg-static-cache',
};
enable表示是否开启缓存,package表示依赖的NPM包名称。
在Router中指定静态资源的访问:
// Router.js
app.router.get('/public/(*)', app.controller.home.resources);
在Controller中实现前端资源缓存:
// Controller.js
const staticCache = require('egg-static-cache');
async resources() {
const { app, ctx } = this;
await staticCache(app, ctx, {
prefix: '/public/'
})
}
后端数据缓存加速
JianghuJs后端加速
JianghuJs框架为减重,避免引入redis等中间件,所以使用缓存表来解决数据的缓存问题,用户可自行拓展使用
使用方式:
用户可使用定时任务或其他方式把数据经过一系列加工处理后存入_cache表,用户可直接获取使用
表设计
CREATE TABLE `_cache` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`userId` varchar(255) NOT NULL COMMENT '用户Id',
`content` longtext COMMENT '缓存数据',
`recordStatus` varchar(255) DEFAULT 'active',
`operation` varchar(255) DEFAULT 'insert' COMMENT '操作; insert, update, jhInsert, jhUpdate, jhDelete jhRestore',
`operationByUserId` varchar(255) DEFAULT NULL COMMENT '操作者userId',
`operationByUser` varchar(255) DEFAULT NULL COMMENT '操作者用户名',
`operationAt` varchar(255) DEFAULT NULL COMMENT '操作时间; E.g: 2021-05-28T10:24:54+08:00 ',
PRIMARY KEY (`id`)
) ENGINE = InnoDB COMMENT = '缓存表';