Vue3优化之实现懒加载和子组件异步加载

路由懒加载

因为Vue在打包的时候将所有路由组件一次性打包到一个文件中,会导致初始加载时需要下载较大的文件。而使用路由懒加载,可以将路由组件拆分为多个小文件,只有在需要时才会下载对应的文件,从而降低初始资源负载。按需加载组件的资源,提高资源使用率、提高用户体验。.

原来路由的写法:

javascript 复制代码
import Vue from 'vue';
import VueRouter from 'vue-router';
import Home from "@/views/Home.vue";
import About from "@/views/About.vue";

Vue.use(VueRouter);

const routes = [
  {
    path: '/',
    name: 'Home',
    component: Home,
  },
  {
    path: '/about',
    name: 'About',
    component: About,
  },
  // 其他路由...
];

const router = new VueRouter({
  routes
});

export default router;

路由懒加载的写法:

javascript 复制代码
import Vue from 'vue';
import VueRouter from 'vue-router';

Vue.use(VueRouter);

const routes = [
  {
    path: '/',
    name: 'Home',
    component: () => import('./views/Home.vue')
  },
  {
    path: '/about',
    name: 'About',
    component: () => import('./views/About.vue')
  },
  // 其他路由...
];

const router = new VueRouter({
  routes
});

export default router;

异步组件

因为vue在加载的时候会先加载完子组件之后,才把父组件给加载了,这样如果子组件加载时间过长,就会导致页面出现长时间的空白,使用异步组件就可以解决这个问题。

vue3提供了 defineAsyncComponent ,它可以更简洁地定义异步组件。0只需要传递一个返回 import() 函数的参数,该函数会在需要时动态加载组件。这样可以减少手动编写异步加载的代码。

代码:

html 复制代码
import { defineAsyncComponent, Suspense } from 'vue';

const AsyncComponent = defineAsyncComponent(() => import('./components/AsyncComponent.vue'));

export default {
  // ...
  components: {
    AsyncComponent
  },
  // ...
  template: `
    <div>
      <Suspense>
        <AsyncComponent />
      </Suspense>
    </div>
  `
};

这样我们的页面加载就会很快了。

相关推荐
古茗前端团队9 分钟前
由 key 引发的思考
前端·javascript·react.js
kyriewen29 分钟前
我扫了 422 个仓库,近一半 CI 在裸装依赖
前端·javascript·程序员
鹏多多39 分钟前
AI 到底能不能独立做个产品?我拿一个小程序验证了
前端·微信小程序·ai编程
火山引擎开发者社区1 小时前
构建专属的飞书群开发助手,AgentKit Studio 一键部署 DeepSeek Harness Super-Agent
前端
啾咪orJIUMI3 小时前
Vue 3 + 高德地图封装实战:点位、区域、Loca 流光与 Vue 信息窗体
前端·vue.js
掘金者阿豪3 小时前
AI数据库不只是向量检索:从数据语义到库内智能计算的技术演进
前端
梦里寻码3 小时前
我用 NestJS + Vue3 写了一套完整的研发管理系统(58 表 / 229 API / 130 项断言,全开源
前端·后端·算法
FRing033 小时前
vue2干货总结8(路由模块封装、router-link、声明式导航、路由重定向、编程式导航)
开发语言·前端·vue.js·vue2
SameX3 小时前
HarmonyOS ArkUI Dialog 复用 用 @CustomDialog + enum type 做多类型统一管理的做法
前端
AiMan3 小时前
豆包爱学还是不可以导出左侧所有对话,只能单容导出,方法不对吗
前端