去哪儿-22-async-components

目标:学习Vue中异步组件的使用

首先看,webpack打包生成的dist目录中包含的内容:有一个index.html文件,这个就是前端代码的入口的html文件;有一个static目录。里面会有一个css文件夹,css.map文件目的是帮助我们调试被压缩过的css代码,方便在开发的时候调试的使用,真正在线上有用的文件是这个css文件,里面是我们所有页面要用到的css,还有个js目录,有用的有3个文件:app.js、manifest.js、vendor.js,manifest.js文件可以理解成webpack打包生成的一个配置文件,vendor.js中存放的是各个页面各个组件公用的一些代码,app.js里面是项目的各个页面的业务逻辑代码。

在浏览器上请求localhost/vueProject01的时候,Network中的JS会加载上面说的这3个JS文件,异步组件主要是app.js的内容。因为app.js是包括所有页面的逻辑代码,但是当我访问首页的时候是不需要加载其他页面的代码的,但是这种默认的打包方式会使得在请求一个页面的时候把所有页面的内容全部加载,性能比较低。这个项目中app.js是比较小的,但是当项目越来越大的时候,打包之后的app.js有可能会达到1MB以上,这时就需要使用异步组件进行一个优化。

当我们访问前端的服务器localhost:8081的时候,会发现访问首页的时候Network下只加载了app.js,也是把所有内容都加载好了,访问其他页面的时候不会再有新的内容加载。什么叫使用异步组件加载? 就是我访问首页就只加载首页,访问详情页只加载详情页,需要什么加载什么而不是一次性的加载。

router/index.js中,之前都是直接引入对应的组件,然后直接使用这个组件的:

import Vue from 'vue'
import Router from 'vue-router'
import Home from '@/pages/home/Home'
import City from '@/pages/city/City'
import Detail from '@/pages/detail/Detail'


Vue.use(Router)

export default new Router({
  routes: [ // 当用户访问根路径的时候, 给用户展示的是HelloWorld这个组件
    {
      path: '/',
      name: 'Home',
      component: Home
    },
    {
      path: '/city',
      name: 'City',
      component: City
    }, {
      path: '/detail/:id',
      name: 'Detail',
      component: Detail
    }],
    scrollBehavior (to, from, savedPosition) {
      return {
        x: 0,
        y: 0
      }
    }
})

下面改成使用异步组件的方式:

import Vue from 'vue'
import Router from 'vue-router'


Vue.use(Router)

export default new Router({
  routes: [ // 当用户访问根路径的时候, 给用户展示的是HelloWorld这个组件
    {
      path: '/',
      name: 'Home',
      component: () => import('@/pages/home/Home')
    },
    {
      path: '/city',
      name: 'City',
      component: () => import('@/pages/city/City')
    }, {
      path: '/detail/:id',
      name: 'Detail',
      component: () => import('@/pages/detail/Detail')
    }],
    scrollBehavior (to, from, savedPosition) {
      return {
        x: 0,
        y: 0
      }
    }
})

但是,当我们的项目比较小的时候是不提倡使用异步组件的,因为,虽然请求首页的时候只加载了首页的逻辑,加载的内容少了,但是当请求城市选择页面的时候会额外的发起一次http请求去加载城市选择页面的逻辑,当一个app.js很小的时候,发一个http请求的代价远比首页多加载一点js代码的代价要高。在app.js比较大的时候才建议使用。

如果是使用异步组件的话,不只有在router里面可以这样用,在Home.vue中也可以异步加载Header.vue等子组件,方式是一样的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 uni-app 中使用 async/await 主要有以下几个步骤: 1. 将需要异步处理的函数改为 async 函数,并在其中使用 await 关键字等待异步操作完成。 2. 在调用 async 函数的地方使用 try/catch 块处理可能出现的异常。 下面是一个使用 async/await 的例子: ```javascript // 定义一个异步函数 async function getData() { const res = await uni.request({ url: 'https://some-api.com/data', method: 'GET' }); if (res[0]) { return res[1]; } else { throw new Error('请求失败'); } } // 在调用 getData 的地方使用 try/catch 块处理可能出现的异常 try { const data = await getData(); console.log(data); } catch (err) { console.error(err); } ``` 在上面的代码中,`getData` 函数使用了 `await` 等待 `uni.request` 异步操作完成。在使用 `getData` 函数时,我们使用了 try/catch 块来处理可能出现的异常。 需要注意的是,`async` 函数返回的是一个 `Promise` 对象,因此,在使用 `async` 函数时,我们可以将其返回值赋值给一个变量,并使用 `then` 方法获取异步操作的结果,如下所示: ```javascript async function getData() { const res = await uni.request({ url: 'https://some-api.com/data', method: 'GET' }); if (res[0]) { return res[1]; } else { throw new Error('请求失败'); } } getData().then(data => { console.log(data); }).catch(err => { console.error(err); }); ``` 上面的代码中,我们使用 `then` 方法获取 `getData` 函数的异步结果,并使用 `catch` 方法处理异常。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值