Vue生态及实践 - Nuxt

Nuxt.js是一个基于Vue.js的通用应用框架,专注于UI渲染和SSR。它简化了服务端渲染的实现,提供模块化支持,包括REST,GraphQL接口,PWA和AMP。文章讨论了如何实现nuxt-link组件及其服务端版本prefetch功能,以及处理客户端和服务器端兼容性问题。
摘要由CSDN通过智能技术生成

Nuxt.js

Nuxt.js - Vue.js 通用应用框架 | Nuxt.js 中文网

Nuxt.js 中文教程_w3cschool

开源社区仁人志士创建了开箱可用的:Nuxt.js框架,帮助我们更快的实现ssr的同构。

  • Nuxt.js是一个基于Vue.js的通用应用框架
  • 它是对客户端,服务端基础架构的抽象组织,nuxt.js主要关注的是UI渲染
  • 它预设了利用Vue.js来开发服务端渲染的应用所需要的各种配置
  • Nuxt.js提供对基于Vue.js的应用生成对应的静态站点的功能【Prerender】
  • Nuxt.js提供了强大的模块系统,可用便捷地使用REST或GraphQL接口,PWA以及AMP支持等都是作为模块来提供支持。

响应流程图

 

目标

  • 实现nuxt-link组件
  • 实现nuxt-link组件的服务端版本
  • prefetch组件功能

 

nuxt-link

  • 在通用代码中 不可接受特定平台的API;
  • 因此如果代码中直接使用了像window或document这种仅浏览器可用的全局变量,则会在Node.js种执行时抛出错误,反之也是如此。

 src/components/ULink.client.vue

<template>
  <!-- 组件二次封装,要写上v-bind="$attrs" v-on="$listeners",可用来触发原方法 -->
  <router-link v-bind="$attrs" v-on="$listeners">
    <!-- 默认文本部分 -->
    <slot></slot>
  </router-link>
</template>
<script>
export default {
  name: "u-link",
}

src/entry-client.js

// 全局注册一下客户端u-link
import ULink from "./components/ULink.client.vue";
Vue.component("u-link", ULink);

src/components/ULink.server.vue

<template>
  <!-- 组件二次封装,要写上v-bind="$attrs" v-on="$listeners",可用来触发原方法 -->
  <router-link v-bind="$attrs" v-on="$listeners">
    <!-- 默认文本部分 -->
    <slot></slot>
  </router-link>
</template>
<script>
export default {
  name: "u-link",
}

src/entry-server.js

// 全局注册一下服务端u-link
import ULink from "./components/ULink.server.vue";
Vue.component("u-link", ULink);

App.vue

// router-link => u-link
<u-link
class="m-link"
:style="{
  backgroundColor:
    $route.name === nav.path ? theme.highlight : theme.primary,
}"
v-for="nav in language.navs"
:key="nav.path"
:to="nav.path"
:prefetch="true" // 使用自己写的那个prefetch
>{{ nav.name }}</u-link>

prefetch

// 浏览器的实现
<link rel="prefetch" href="/images/big.jpeg">

Prefetch是一项浏览器机制;这项机制利用浏览器闲置时间,预先下载并取回在将来可能会使用的网页资源并将其存在内存当中

// 在nuxt.js里面
<n-link to="/about" prefetch>About page pre-fetched</n-link>

在浏览器空闲时候发起请求,这个函数会将传入的callback函数添加到一个队列当中,并且会在浏览器空闲时,按照队列顺序执行空闲时间片段内能够完成的任务

window.requestIdleCallback(callback[,options])

React种的时间分片也是采用这个API实现的

献上一张ai生成图~

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值