Vue SSR(服务器渲染)探讨v1.0

简介: 什么是srr(服务器渲染)直白的说就是在服务端拿数据进行解析渲染,直接生成html片段返回给前端。具体用法也有很多种比如:传统的服务端模板引擎渲染整个页面服务渲染生成htmll代码块, 前端 AJAX 获取然后js动态添加。

什么是srr(服务器渲染)

直白的说就是在服务端拿数据进行解析渲染,直接生成html片段返回给前端。具体用法也有很多种比如:传统的服务端模板引擎渲染整个页面服务渲染生成htmll代码块, 前端 AJAX 获取然后js动态添加。

为什么要做SSR

  • 首先是seo问题,前端动态渲染的内容是不能被抓取到的,而使用服务端渲染就可以解决这个问题。
  • 其次就是首屏加载过慢这种问题,比如在SPA中,打开首页需要初始加载很多资源,这时考虑在首屏使用服务端渲染,也是一种折中的优化方案。

使用NUTX实现服务器渲染

NUTX的作用就是在 node.js 上进一步封装,然后省去我们搭建服务端环境的步骤,只需要遵循这个库的一些规则就能轻松实现 SSR,类似的工具还有一个叫unvue的。

Nuxt使用步骤

  1. 安装vue脚手架 npm install -g vue-cli
  2. 完成后在需要创建的目录下执行以下命令:
vue init nuxt/koa ssr-demo(项目名称)
cd ssr-demo
npm install
  1. 执行npm run dev
  2. 打开浏览器
    http://localhost:3000
  3. 目录结构
    img_4f505b6d0e9204c94700fd53c78678db.jpe
    image

    6.Nuxt.js 给出了最简单的目录结构

|-- pages
    |-- index.vue
|-- package.json

也就是说,至少需要一个 page 来作为展示页。

  1. 文件的路径建议都采用绝对路径
    例:怎么在 /pages/user/me.vue 引入一个 static 文件夹里的图片
<img src="~static/img/logo.png" alt="Logo"/>
  1. 路由
    Nuxt.js 根据 pages 目录结构去生成 vue-router 配置,也就是说 pages 目录的结构直接影响路由结构
    例1:
|-- pages
    |-- posts
        |-- index.vue
        |-- welcome.vue
    |-- about.vue
    |-- index.vue

会生成

routes: [
  {
    path: '/posts',
    component: '~pages/posts/index.vue'
  }, {
    path: '/posts/welcome',
    component: '~pages/posts/welcome.vue'
  }, {
    path: '/about',
    component: '~pages/about.vue'
  }, {
    path: '/',
    component: '~pages/index.vue'
  }
]

例2:隐藏路由 在文件名前加 _

|-- pages
    |-- _about.vue
    |-- index.vue

会生成

routes: [
  {
    path: '/',
    component: '~pages/index.vue'
  }
]
  1. 配置文件
    目录下的 nuxt.config.js 是我们唯一的配置入口,这里不建议修改 .nuxt 目录,除非特殊需求

默认的给力我们三个配置 ·head·css·loading· 分别是头部设置,全局css,loading进度条

nuxt.config.js 的全部的配置如下,点击查看具体例子

  1. cache
  2. loading
  3. router
  4. css
  5. plugins
  6. head
    另外还提供了 vuex 等配置,感兴趣可以去 github 和官网。

一个具体的例子(仿知乎live)

  1. 在pages下面创建如下文件夹和文件


    img_ed7b999a4b8372860a66fec25e66e9d1.png

    会生成如下路由

[
        {
            path: "/",
            component: _f50ec93a,
            name: "index",
            children: [
                {
                    path: "me",
                    component: _52bc7474,
                    name: "index-me"
                },
                {
                    path: "home",
                    component: _097b5f3b,
                    name: "index-home"
                },
                {
                    path: "course",
                    component: _361a8b77,
                    name: "index-course"
                },
                {
                    path: "hot",
                    component: _111d20a1,
                    name: "index-hot"
                }
            ]
        },
        {
            path: "/account",
            component: _2c407cfe,
            name: "account",
            children: [
                {
                    path: "register",
                    component: _1eaf91c4,
                    name: "account-register"
                },
                {
                    path: "login",
                    component: _4a531fd0,
                    name: "account-login"
                }
            ]
        }
    ]
  1. 异步请求
    asyncData方法用于 fetch 数据,并在服务端渲染页面,返回给浏览器。
本文例子github地址:https://github.com/wotu-courses/ssr-demo

参考文章:
https://segmentfault.com/a/1190000007933349
https://segmentfault.com/a/1190000009842518

目录
相关文章
|
1月前
|
JavaScript 搜索推荐 UED
描述 Vue 的服务器端渲染(SSR)。
描述 Vue 的服务器端渲染(SSR)。
23 3
|
1天前
|
JavaScript 前端开发 UED
Vue工具和生态系统: Vue.js和服务器端渲染(SSR)有关系吗?请解释。
Vue.js是一个渐进式JavaScript框架,常用于开发单页面应用,但其首屏加载较慢影响用户体验和SEO。为解决此问题,Vue.js支持服务器端渲染(SSR),在服务器预生成HTML,加快首屏速度。Vue.js的SSR可手动实现或借助如Nuxt.js的第三方库简化流程。Nuxt.js是基于Vue.js的服务器端渲染框架,整合核心库并提供额外功能,帮助构建高效的应用,改善用户体验。
4 0
|
8天前
|
JavaScript
Vue 路由切换时页面刷新页面重新渲染
在Vue中,路由切换并不自动重新渲染页面,这可能导致传递参数到子组件时出现问题。使用`this.$route.replace(&#39;地址&#39;)`或`this.$route.push({name:&#39;地址&#39;,params:{key:value}})`进行跳转,但子组件不会响应变化。为解决此问题,需监听`$route`对象的变化,如图所示,通过`watch: {$route}`确保页面更新。
|
12天前
|
JavaScript
Vue 静态渲染 v-pre
Vue 静态渲染 v-pre
|
12天前
|
JavaScript
vue多条数据渲染(带图片)
vue多条数据渲染(带图片)
14 1
|
1月前
|
JavaScript
Vue之条件渲染
Vue之条件渲染
|
前端开发 JavaScript 应用服务中间件
jFinal+vue部署到linux服务器
jFinal后端和vue前端的开发框架如何部署到linux服务器
370 1
|
8天前
|
JavaScript 算法 Linux
【vue报错】error:0308010C:digital envelope routines::unsupported
【vue报错】error:0308010C:digital envelope routines::unsupported
34 3
|
2天前
|
Web App开发 JavaScript 开发者
Vue工具和生态系统:什么是Vue DevTools?如何使用它?
Vue Devtools是Vue.js官方的浏览器扩展,用于简化应用调试和优化。可在Chrome和Firefox等浏览器上安装,集成到开发者工具中。安装步骤包括下载源码、npm安装、修改manifest.json并加载编译后的扩展。启用后,开发者能查看Vue组件树,检查属性,并在允许的情况下编辑data,提升开发效率。
5 0
|
2天前
|
JavaScript 测试技术
vue不同环境打包环境变量处理
vue不同环境打包环境变量处理
13 0