7、服务端渲染 ---kkb

单页应用的问题:前端

一、首屏渲染等待时间长:必须得等js加载完毕,而且执行完毕,才能渲染出首屏vue

二、seo不友好:爬虫只能拿到一个div,认为页面是空的,不利于seo(公司的宣传页会比较在意seo)npm

 

SSR后端

为了解决这两个问题,出现了SSR解决方案,后端渲染出完整的首屏dom结构返回,前端拿到的内容带上首屏,后续的页面操做,再用单页的路由跳转和渲染,称之为服务端渲染(server side render)服务器

 

弊端:架构

一、学习难度较高app

二、第三方库有时候会有问题框架

三、增长服务器压力dom

 

nuxt.js异步

Nuxt.js 是一个基于 Vue.js 的通用应用框架

经过对客户端/服务器基础架构的抽象组织,Nuxt.js 主要关注的是应用的 UI渲染

 

结论:

  • nuxt不单单用于服务端渲染,也可用于 spa 应用开发
  • 利用 nuxt 提供的基础项目结构、路由生成、中间件、插件等特性可大幅度提升开发效率
  • nuxt 可用于网站静态化

 

nuxt.js 特性

  • 基于 Vue.js
  • 自动代码分层
  • 服务端渲染
  • 强大的路由功能,支持异步数据
  • 静态文件服务
  • ES6/ES7语法支持
  • 打包和压缩JS和CSS
  • HTML头部标签管理
  • 本地开发支持热加载
  • 集成ESLint
  • 支持各类样式预处理器:SASS、LESS、Stylus
  • 支持HTTP/2 推送

 

nuxt渲染流程:

 

 

nuxt安装

npx create-nuxt-app <项目名>

选择服务器:Koa

运行项目:npm run dev

 

路由

pages目录中全部 *.vue 文件自动生成应用的路由配置,新建:

pages/admin.vue  商品管理页

pages/login.vue    登陆页

若是想查看路由内容,能够去:  .nuxt/router.js  文件中查看

 

导航

添加路由导航:layouts/default.vue

<div>
  <nav>
    <!-- 别名:n-link,NLink,NuxtLink -->
    <nuxt-link to="/">首页</nuxt-link>
    <nuxt-link to="/admin" no-prefetch>管理</nuxt-link>
    <nuxt-link to="/cart">购物车</nuxt-link>
  </nav>
  <!-- 页面内容占位符 -->
  <nuxt />
</div>

路由默认采用预加载页面的方式,若是想使用懒加载的话,能够加上 no-prefetch

 

动态路由

如下划线做为前缀的 .vue 文件或目录,会被定义为动态路由

 

 

// index.vue
<template>
  <div>
    <h2>商品列表</h2>
    <ul>
      <li v-for="good in goods" :key="good.id">
        <nuxt-link :to="`/detail/${good.id}`">{{ good.text }}</nuxt-link>
      </li>
    </ul>
  </div>
</template>
<script>
export default {
  data() {
    return {
      goods:[
        { id: 1, text: 'Web全栈架构师', price: 8999 },
        { id: 2, text: '架构师', price: 19999 }
      ]
    }
  }
}
</script>
// _id.vue
<template>
  <div>
    <h2>商品详情</h2>
    <p>{{$route.params.id}}</p>
  </div>
</template>

 

嵌套路由

建立内嵌子路由,你须要添加一个.vue文件,同时添加一个与该文件同名的目录来存放子视图组件

文件结构以下

 

 

detail/_id.vue 文件

<div>
  <p>{{$route.params.id}}</p>
</div>

detail.vue文件

<div>
  <h2>商品详情</h2>
  <!-- 路由出口 -->
  <nuxt-child />
</div>

 

nuxt-child 等效于 router-view

 

自定义布局

建立空白布局页面 layouts/blank.vue,用于login.vue

blank.vue 文件

<template>
  <div>
    <nuxt/>
  </div>
</template>

页面 pages/login.vue 使用自定义布局

export default {
  layout: 'blank'
}

 

自定义错误页面

建立 layouts/error.vue

<template>
  <div>
    <h1 v-if="error.statusCode === 404">页面不存在</h1>
    <h1 v-else>应用发生异常</h1>
    <p>{{error}}</p>
    <nuxt-link to="/">首页</nuxt-link>
  </div>
</template>
<script>
export default {
  props: ['error'],
  layout: 'blank'
}
</script>

 

页面

页面组件就是Vue组件,只不过 Nuxt.js 为这些组件添加了一些特殊的配置项

给首页添加标题和meta,index.vue

export default {
  head(){
    return{
      title: '课程列表',
      meta: [{name: 'description', hid: 'description', content: 'page meta'}],
      link: [{rel: 'favicon', href: 'favicon.icon'}]
    }
  }
}
相关文章
相关标签/搜索