Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 801|回复: 0

vue 首次加载缓慢/刷新后加载缓慢 原因及解决方案

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-4-16 10:39:27 | 显示全部楼层 |阅读模式

    vue 首次加载缓慢/刷新后加载缓慢 原因及解决方案


    最近做项目发现一个问题,页面每次刷新后加载速度都非常慢,20s左右,在开发环境则非常流畅,几乎感觉不到,本文参考望山的各种方案优化

    1,关闭打包时生成的map文件

    config/index.js文件中讲productionSourceMap设置为false,再次打包便没有了map文件

    2,vue-router路由懒加载

    懒加载的实现方式有很多种,这里简单说三种实现方法

    1. vue异步组件
    2. import()
    3. webpack的require.ensure()

    vue 异步组件

    vue异步组件技术也就是异步加载,vue-router配置路由,使用veu的异步加载技术,可以实现按需加载,但是这种情况下一个组件生产一个js文件

    /* vue异步组件技术 */
    {
      path: '/index',
      name: 'index',
      component: resolve => require(['@/views/index'],resolve)
    }
    

    使用import

    组件懒加载方案二

    
    // 下面2行代码,没有指定webpackChunkName,每个组件打包成一个js文件。
    const Home = () => import('@/components/home')
    const Index = () => import('@/components/index')
    // 下面2行代码,指定了相同的webpackChunkName,会合并打包成一个js文件。 把组件按组分块
    const Home =  () => import(/* webpackChunkName: 'ImportFuncDemo' */ '@/components/home')
    const Index = () => import(/* webpackChunkName: 'ImportFuncDemo' */ '@/components/index')
    
    // router
    {
      path: '/about',
      component: About
    }, {
      path: '/index',
      component: Index
    }
    

    webpack的require.ensure()

    使用webpack的require.ensure()技术,也可以实现按需加载.这种情况下,多个路由指定相同的chunkName会合并打包成一个js文件

    /* 组件懒加载方案三: webpack提供的require.ensure() */
    {
      path: '/home',
      name: 'home',
      component: r => require.ensure([], () => r(require('@/components/home')), 'demo')
    }, {
      path: '/index',
      name: 'Index',
      component: r => require.ensure([], () => r(require('@/components/index')), 'demo')
    }
    

    CDN引用

    CDN可以减少代码体积加快请求速度,使用CDN主要解决两个问题,打包时间太长,打包后代码体积太大,请求很慢,还有就是回避服务器带宽问题

    具体步骤

    <!DOCTYPE html><html>
        <head>
            <meta charset="utf-8">
            <title>vue-manage-system</title>
            <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no">
            <script src="https://cdn.bootcss.com/vue/2.5.3/vue.js"></script>
            <script src="https://cdn.bootcss.com/vue-router/2.7.0/vue-router.min.js"></script>
            <script src="https://cdn.bootcss.com/axios/0.17.1/axios.min.js"></script>
            <link rel="stylesheet" href="https://cdn.bootcss.com/element-ui/2.4.0/theme-chalk/index.css">
            <script src="https://cdn.bootcss.com/element-ui/2.4.0/index.js"></script>
    

    如果提示Element未定义,是因为Element依赖Vue,vue.js需要在element-ui之前引入,所以vue.js也要改为cnd的引入方式.

    然后,修改/build/webpack.base.conf.js中修改配置。给module.exports添加externals属性(详见https://webpack.docschina.org/configuration/externals/),其中键是项目中引用的,值是所引用资源的名字。需要注意的是资源名需要查看所引用的JS源码,查看其中的全局变量是什么,例如element-ui的全局变量就说ELEMENT

    module.exports = {
       context: path.resolve(__dirname, '../'),
       entry: {
         app: './src/main.js'
       },
       externals: {
         'vue': 'Vue',
         'vue-router': 'VueRouter',
         'ElementUI': 'ELEMENT',
         'axios': 'axios',
       }
     }
    

    然后删除原先的import,如果不删除原先的import,项目还是会从node_modules中引入资源。
    也就是说不删的话,npm run build时候仍会将引用的资源一起打包,生成文件会大不少。还是删了好。

    参考文章列表:感谢大神们
    vue页面首次加载缓慢原因及解决方案
    vue项目实现按需加载的3种方式:vue异步组件、es提案的import()、webpack的require.ensure()

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-1-24 17:40 , Processed in 0.059192 second(s), 30 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表