Vue服务端渲染的原理与入门在之前的概念中,更多的渲染工作是在客户端完成的,那为什么现在让服务端来做这个工作呢?服务端渲染和客户端渲染有区别吗?其实服务端渲染的工具有很多,看说明书就可以很快上手。要知道为什么,我们需要先了解服务端渲染的基本概念和原理,为什么会出现服务端渲染,它为我们解决了什么问题,掌握整体的渲染逻辑和思路,这样我们才能用学习工具,轻松了,即使以后工具有变化更新,我们也能驾驭得很好,不会再说“我学不会”了;这个逻辑就是所谓的道、法、术、器的概念;不要只停留在工具的使用上,在一些工具的奇技淫巧中,更多的人应该向着法道的境界成长;什么是SSR?现代的前端项目大部分都是单页应用,也就是我们所说的SPA。整个应用程序只有一页。通过组件,展示不同的页面内容。所有数据通过请求服务端获取后,由客户端进行处理。这是目前前端框架默认的渲染逻辑,我们称之为:客户端渲染(ClientSideRender:简称CSR);加载渲染流程如下:HTML/CSS代码-->加载JavaScript代码-->执行JavaScript代码-->渲染页面数据SPA应用的客户端渲染方式,最大的问题有两个方面:1:白屏时间过长,用户体验不好;2:HTML中没有内容,SEO不友好;出现这个问题的原因是第一次加载时,需要先下载整个SPA脚本程序,浏览器执行代码逻辑后才能获取到页面要显示的数据,而下载的SPA脚本需要很长的等待和执行时间。同时,下载到浏览器的SPA脚本是没有页面数据的,浏览器实际上并没有太多的渲染工作,所以用户看到的是一个没有任何内容的页面。不仅如此,由于页面中没有内容,搜索引擎的爬虫抓取到的也是空白内容,不利于SEO关键词的获取;与传统站点相比,浏览器获取的页面都是静态页面,内容经过服务器处理,有后端编程经验的可能更熟悉,页面结构和内容由服务器处理后返回给客户;全宇宙的第一个动态图,整个过程展示了两个对比,我们会发现传统站点的页面数据是在后台服务器合成的,而SPA应用的页面数据是在浏览器合成的,但是不管是哪一种,最终的渲染展示,还是由浏览器来完成的,大家不要误会,我们这里所说的服务端渲染和客户端渲染,都是指页面结构和数据的工作合成,而不是浏览器显示的工作;那我们可以使用传统网站吗?如何解决SPA的问题,保留SPA的优势?不管是白屏时间长还是SEO不友好,其实都是首屏先返回浏览器的页面结构,然后获取数据再合成导致的问题。然后,首屏的页面结构和数据,只要和传统站点一样,先在服务器端合成,然后返回。同时SPA脚本的加载还是放在了首屏。此时返回的页面是一个完整的内容,既有结构又有数据,这样浏览器在显示数据的同时也能在首页显示数据。加载SPA脚本,搜索引擎的爬虫也可以获得相应的数据,解决SEO问题;为了更好的理解这个逻辑,我画了一个流程图:是的,这就是我们所说的服务端渲染的基本逻辑,服务端渲染也就是SSR(ServerSideRendering);解决了白屏时间长的问题,因为第一次加载时,服务器会先返回渲染后的静态页面,在静态页面再次加载请求SPA脚本;基本原理:首页的内容和数据页面在用户请求之前生成为静态页面,同时添加了SPA的脚本代码。浏览器渲染静态页面后,请求SPA脚本应用,后续页面交互仍由客户端渲染;明白了道理,也就是达到了道法的境界。接下来,让我们深入到技术和设备的应用层面去体验一下;其中,Vue框架和React框架都有对应的相对成熟的SSR解决方案,React对应Next.js框架就是Next.js框架,Vue对应Nuxt.js。当然,如果你对这些不感兴趣,你也可以自己实现一个SSR服务端应用。我以前写过一篇。如果大家有兴趣,想看一下我实现的代码,可以给我留言,作为教程发出去;下面以Vue对应的Nuxt.js为例,详细体验服务端渲染;Nuxt.js应用Nuxt.js是一个基于Vue.js的Nuxt.js,一个通用的应用框架,预置了使用Vue.js开发服务端渲染应用所需的各种配置,并提供了生成相应静态站点的功能适用于基于Vue.js的应用程序。打开Nuxt.js官网:https://www.nuxtjs.cn/,学习指南非常详细,通俗易懂。根据指南,我们可以看到有两种安装方式,一种是使用create-nuxt-app脚手架工具,另一种是手动创建;installscaffoldinginstallation接下来我们会尝试不同的安装方式,首先使用scaffolding进行安装,执行命令:npxcreate-nuxt-appcreact-nuxt然后,命令行中会有很多选项,包括项目名称,开发语言,UI组件库、服务端框架、测试框架、HTTP请求库等,大家可以根据自己的需要进行不同的选择。安装成功后,命令行会给出相应的提示信息。我们可以根据提示信息运行项目。项目有两种运行模式:开发环境和生产环境。在开发环境中,可以直接使用npmrundev。要运行生产环境,需要先构建编译。编译成功后,就可以打开了。项目正在运行;因为项目刚刚初始化,我们还没有写任何内容,所以无论使用哪种操作方式,我们看到的都是下面页面的内容;手动安装不同于脚手架安装,手动安装需要我们创建一个项目,安装需要的扩展和插件,还需要我们自己编写组件代码,然后配置执行命令开始运行。但是,手动创建会考验大家对项目的整体把控力;执行命令:mkdirnuxtnpmcreatefile文件夹后,切换目录:cdnuxtnpm;然后执行命令:npminit-y创建项目并生成package.json文件;使用命令:npminstallnuxt--save安装Nuxt.js框架;在nuxtnpm目录下,创建pages目录和pages/index.vue组件文件,在组件文件中,写入如下代码打招呼: 获取参数,打印:{{$route.params.kk}} 控制台也有输出 Nestedsub-routing-index order->list {{dataObj[0].name}}HiNuxt.js
/div>最后我们需要在package.json文件中配置运行命令的脚本参数:"scripts":{"test":"echo\"Error:notestspecified\"&&exit1","dev":"nuxt","build":"nuxtbuild","start":"nuxtstart","generate":"nuxtgenerate"},配置命令参数后,是一样的如同之前的运行套路:npmrundevstart一个热加载的web服务器(开发模式)npmrunbuild编译项目,使用webpack编译应用,压缩JS和CSS资源(用于发布);npmrunstart在生产模式下启动一个web服务器(项目需要先编译)。项目运行后,我们可以看到刚刚编写的组件的内容;需要注意的是pages目录是必须的。Nuxt.js框架会自动读取该目录下的所有.vue文件,并自动生成对应的路由配置。基本路由基本路由不需要配置。Nuxt.js会根据页面中的文件夹和文件自动生成路由配置。假设页面的目录结构如下:pages/--|user/-----|index.vue-----|one.vue--|index.vue那么,路由自动生成的配置Nuxt.js如下:router:{routes:[{name:'index',path:'/',component:'pages/index.vue'},{name:'user',path:'/user',component:'pages/user/index.vue'},{name:'user-one',path:'/user/one',component:'pages/user/one.vue'}]}同样,在/.nuxt/router.js文件,我们也可以看到相关内容;Nuxt中路由导航的方式一共有三种,一种是常见的a标签跳转,这里太基础了就不说了。另外两个是nuxt-link组件和编程导航。nuxt-link组件用于给页面添加链接跳转到其他页面。目前nuxt-link跳转:
程序化导航跳转:
动态路由-route
嵌套路由
{{v.name}}
