【Nuxtjs】431- 简述Nuxt.js

2024-01-10 04:10
文章标签 js 简述 nuxt nuxtjs 431

本文主要是介绍【Nuxtjs】431- 简述Nuxt.js,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者 | 孔令涛

Nuxt.js 是一个基于 Vue.js 的通用应用框架,一个用于Vue.js 开发SSR应用的一站式解决方案。它的优点是将原来几个配置文件要完成的内容,都整合在了一个nuxt.config.js,封装与扩展性完美的契合。

简单说nuxtjs项目,它其实就是一个vue的项目融合一个node.js server项目,这里node服务有两个作用,第一点是代替浏览器的工作,笼统理解就是在created时的请求数据和页面渲染,第二点是当作静态文件服务器,把渲染好的页面返回给用户。

ssr服务做缓存的意义

在上图中,我们可以看到一个简单的ssr服务渲染流程,在这里笔者把与前端渲染不同之处标红,一个是初始化的数据。第二个是获取数据后服务器对于页面的渲染。

图中如果未使用缓存,就会导致每一个用户的对页面的请求,都使用服务去渲染一次,这对于服务器简直是灾难。特别是渲染所依赖的node.js服务,不论是express还是koa又或者是像nuxt的封装,都绕不开渲染时对于服务器cpu产生压力。反之,使用缓存,用内存空间换取cpu的使用率这是划算的,且属于node.js的长项。

缓存的使用思路

nuxt缓存有三种,从小到大就是接口缓存、组件缓存、页面缓存,下面我们找具体的场景来聊一下。

1.接口缓存,我们来看下下面这张图。

 这转转有书的首页,你所能看到的都是从接口获取的数据渲染的,往往首页的数据的在一段时间内是不会变动的,也许是1小时、也许是几天,我们每次都去服务端取数据,完全没必要,所有接口做缓存,在这种场景非常有必要。即便是页面数据经常变动,通过一次请求,使用缓存,代替用户的n次请求对于api服务器来说会有很不错的收益。

2.组件缓存

没找到特别贴合的页面,这里就画图了,如上图,你的组件会在多个服务端渲染的页面中出现,使用组件缓存是非常不错的选择。

再说一个极端都例子,例如一个页面中是如上图中的A、B组件的结构,A组件是长时间不会怎么变且大量使用,B组件需要展示用户头像和用户的名字,每个B组件渲染出来都不一样,且这个页面还要放在服务端渲染,那么这样的场景使用组件渲染是合适的。

上面这个极端的例子,千万不要被误导,因为B组件没有可复用的地方,完全可以放在客户端去渲染。

3.页面缓存 页面缓存的场景就是一个页面长的一样的部分,大量被用户请求,那么就可以做页面缓存,例如上面的首页,在一段时间内,用户看到的内容是不会变的。

这三种缓存是包含关系,也就触发了大级别的缓存,就不会触发小级别的缓存,简单来说就是一个请求找到页面缓存,肯定不需要再去请求接口了。

最后笔者选定是接口缓存与页面缓存搭配使用,理由是我可以把那些类似于根据用户不同而不同的推荐组件放到客户端去获取数据并渲染,也就是公共部分用服务端渲染,差异部分用客户端渲染。这是对于我们现在的业务是最好的选择。

缓存的实践

笔者在里并没有使用常规的lru-cache这个包做缓存,而是把接口与页面的缓存都做在里redis里。先说怎么做,下面的思考部分我们再来聊笔者的理由。

下面是实现,先来说说接口缓存:1.如何接口获取的数据存入redis 在nuxt.config.js中,我们在modules配置中加入@nuxtjs/axios,这是nuxtjs自带的,然后编写一个叫axios.server.js的文件,加入plugins配置中,这里的重点是文件命中一定要加server的标示,这样nuxt在加载这个插件的时候只会把它加载到服务端去。

代码如上图,比较好理解就是onResponse监听一下接口返回的数据存入redis,这是存缓存的部分。

axios获取缓存的代码如下。

注意点:这个一定要加上服务端的判断,虽然打包的时候asyncData里的代码不会被打包到客户端,但是在打包和开发的时候不加上服务端的判断,会报一些无法引包的错误。这里可以对axios进行封装,但一定要注意服务端和客户端。

2.页面缓存存入redis 这里就比较简单了,在nuxt.config.js中,serverMiddleware配置里加入一个中间件,代码如下。

在上面的中间件中你需要自己处理下哪些是你需要缓存的,包括html、js、css。

问题

聊聊笔者为什么想用redis代替lru-catch的方案,理由是使用redis,使我会担心内存膨胀太快带来的问题,而且多台负载的ssr服务可以共同使用一个缓存,我们甚至可以通过操作redis主动的去管理缓存,对于很多页面、接口需要做缓存来说,这样做是很不错的。

这样一来,我们的ssr服务通过做缓存解决里cpu使用率的问题,然后又通过使用redis解决了本地内存膨胀的问题,ssr服务变的更专心于io。

还有个问题就是缓存的生存时间,例如我们设置了一个很长的缓存的生存时间,接口的数据都变了,可是我们还在使用缓存,当然你可以选择一个合适长短的过去时间,可以从redis里面把缓存删掉,这也是我们用redis存储缓存的好处。

还有就是要注意缓存级别的问题,大级别的缓存会覆盖小级别的缓存,例如客户端一直在走页面的缓存,那么接口缓存怎么刷新也没用,这就需要我们做一些缓存的关联管理。思路如下图。

原创系列推荐

1. JavaScript 重温系列(22篇全)

2. ECMAScript 重温系列(10篇全)

3. JavaScript设计模式 重温系列(9篇全)

4. 正则 / 框架 / 算法等 重温系列(16篇全)

5. Webpack4 入门(上)|| Webpack4 入门(下)

6. MobX 入门(上) ||  MobX 入门(下)

7. 59篇原创系列汇总

回复“加群”与大佬们一起交流学习~

点这,与大家一起分享本文吧~

这篇关于【Nuxtjs】431- 简述Nuxt.js的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/589509

相关文章

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

Node.js net模块的使用示例

《Node.jsnet模块的使用示例》本文主要介绍了Node.jsnet模块的使用示例,net模块支持TCP通信,处理TCP连接和数据传输,具有一定的参考价值,感兴趣的可以了解一下... 目录简介引入 net 模块核心概念TCP (传输控制协议)Socket服务器TCP 服务器创建基本服务器服务器配置选项服

mac安装nvm(node.js)多版本管理实践步骤

《mac安装nvm(node.js)多版本管理实践步骤》:本文主要介绍mac安装nvm(node.js)多版本管理的相关资料,NVM是一个用于管理多个Node.js版本的命令行工具,它允许开发者在... 目录NVM功能简介MAC安装实践一、下载nvm二、安装nvm三、安装node.js总结NVM功能简介N

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

JS 实现复制到剪贴板的几种方式小结

《JS实现复制到剪贴板的几种方式小结》本文主要介绍了JS实现复制到剪贴板的几种方式小结,包括ClipboardAPI和document.execCommand这两种方法,具有一定的参考价值,感兴趣的... 目录一、Clipboard API相关属性方法二、document.execCommand优点:缺点:

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

使用Vue.js报错:ReferenceError: “Vue is not defined“ 的原因与解决方案

《使用Vue.js报错:ReferenceError:“Vueisnotdefined“的原因与解决方案》在前端开发中,ReferenceError:Vueisnotdefined是一个常见... 目录一、错误描述二、错误成因分析三、解决方案1. 检查 vue.js 的引入方式2. 验证 npm 安装3.

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)