编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

使用 Nuxt.js实现SSR服务器端渲染之页面渲染流程详解

wxchong 2024-08-01 03:27:34 开源技术 7 ℃ 0 评论

Nuxt.js对于网页的SEO是及其有帮助的,它在服务端将页面渲染好以后在展示在前端。如果想要使用好Nunxt那么就必须搞明白那些方法是在服务器端就开始运行的,哪些是在客户端运行的,简单点说,就是哪些是在服务器上跑的,哪些是在前端浏览器上跑的。

先看下官方给出的流程图

首先是IncomingRequest 就是从客户端发起请求,直白点说就是你打开了网页,那么网页就要向服务器发起请求了

然后就开始执行nuxtServerInit 可以理解为服务初始化,很多人不知道nuxtServerInit用在哪里使用其实他是在strore文件夹下的 vuex文件actions中进行数据、状态初始化的,比如:

export const state = () => ({
	datas:{},
})

export const getters = {
	getInitData(state,post){ 
		return state.datas
	}
}

export const mutations = {
	setInitData(state, gets) {
		state.datas = gets
	}
}

export const actions = {
//数据初始化方法
	 async nuxtServerInit(vuexContent, context) { 
 let datas = await context.$axios.get'/ap/xxxx') ; 
 	vuexContent.commit("setInitData", datas.list)
 }
 }

然后就是middleware 中间件的执行,如果你需要的话,就在middleware文件夹下编写代码,中间件会在页面显示之前调用。

nuxt的middleware经常用来处理页面加载前的一些逻辑,比如判断一下访问你页面的家伙有没有登录啊,有没有观看权限什么的,都在这里处理比较合适。

然后就到了validate验证阶段,当然如果你写过的话,验证一下路由格式是不是匹配啊什么的,如果不匹配就跳转到提示页面去。

终于到了asyncData&fetch 这两个货就是在页面展示之前从服务器端获取数据用的,他不是在客户端执行的,也就是说这两个方法不在在网页上执行的,所以他们不会有跨域的问题,也不可能访问到window

拿到数据后当然是要去渲染到页面上了render数据到.vue页面上然后我们就看到页面了。注意一下画红框的部分,nuxt-link是nuxt的页面路由,比如我们从/index 页面上写一个

<nuxt-link to="/about">about</nuxt-link>

那么我们就会跳转到about页面,同时asyncData方法就会执行,获取数据

但是如果我们已经在about页面了。然后在about页面上添加以下代码它的作用只是给about路由传参

<nuxt-link to="/about?id=1">about</nuxt-link>

那么你觉的asyncData方法还会执行吗?

no,它不会在执行了,那个货很懒,他只在首次加载的时候执行一次。

欢迎交流指正

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表