vue项目优化及首页白屏过渡

最近搞项目优化 也是很头大 所以做一个记录 不是很全慢慢补吧!!!

!!!入口文件(main.js)注意 组件的按需引入 避免入口文件过大

!!!注意代码复用性

1.组件动态导入

  • 原始导入:
//导入:
import home from "./component/home"
//注册:
component:{home}
  • 动态导入:(按需加载)
components:{home:()=>import("./component/home")}

2. 路由懒加载

  • Vue是单页面应用,路由较多,Webpack打包后文件很大。首页加载时可能会出现白屏现象,用户体验差。
  • 懒加载是当路由被访问的时候才加载对应组件,减少资源占用,提高页面反应速度
{
    path: '/login',
    name: 'login',
    component: resolve => require(['@/views/login'], resolve)
    //或
    //component: () => import('@/views/login')
}

2. 图片懒加载

  • 将页面内未出现在可视区域内的图片先不做加载, 等到滚动到可视区域后再去加载。能有效提高加载性能和用户体验。
  • 使用vue-lazyload插件来实现图片懒加载
//安装
npm install vue-lazyload --save-dev
//在入口文件中引入插件并使用
import VueLazyload from 'vue-lazyload'
Vue.use(VueLazyload)
//将文件中 img 标签的 src 属性直接改为 v-lazy ,从而将图片显示方式更改为懒加载显示
<img v-lazy="/static/img/logo.png"/>

3. CDN的使用
(vue cli3也可以打包加 vue-cli-service build --report 生成report.html 查询文件大小占比)

  • 加快打包速度。分离公共库以后,每次重新打包就不会再把这些打包进 vendors 文件中。

  • CDN减轻自己服务器的访问压力,并且能实现资源的并行下载。浏览器对 src 资源的加载是并行的(执行是按照顺序的)。

  • (!注意)使用cdn 引入 就不需要在在入口文件去import导入和 vue.use(ElementUI)
    index.html引入:

    <script src="https://cdn.bootcss.com/vue/2.6.10/vue.min.js"></script>
    <script src="https://cdn.bootcss.com/element-ui/2.8.2/index.js"></script>
    

    vue.config.js中通过externals外部扩展,可以忽略不需要打包的库:

    module.exports = {
      configureWebpack: config => ({
        externals: {
          'vue': 'Vue',
          'element-ui': 'ElementUI'
        }
     })
    }
    

4. 1 打包优化 — 工程文件打包的时候不生成.map文件

  • npm run build编译之后,会生成很多.map文件,这些文件占了不小的空间。.map文件的作用是帮助编译后的代码调试,但是我们上线的代码已经调试完成,所以上线时可以不生成.map文件。
    修改配置文件如下即可:(vue.config.js)

    module.exports = {
    	productionSourceMap: false
    }
    

4. 2 打包优化 — gzip压缩
gzip压缩配置(vue + nginx)

5. 首屏加过渡动画
优化首页白屏问题

  • public 的 index.html :
<div id="loader-wrapper">
    <div id="loader"></div>
     <div class="loader-section section-left"></div>
     <div class="loader-section section-right"></div>
     <div class="load_title" id="load_title"></div>
 </div>
 <script type="text/javascript">
	let name = "测试"
    const name = document.getElementById('load_title')
    name.innerHTML = "正在加载" + name  + "系统,请耐心等待..."
  </script>
  • public 的 新建 index.css
html,body,#app{height:100%;margin:0;padding:0}.chromeframe{margin:.2em 0;background:#ccc;color:#4ea3fb;padding:.2em 0}#loader-wrapper{position:fixed;top:0;left:0;width:100%;height:100%;z-index:999999}#loader{display:block;position:relative;left:50%;top:50%;width:150px;height:150px;margin:-75px 0 0 -75px;border-radius:50%;border:3px solid transparent;border-top-color:#4ea3fb;-webkit-animation:spin 2s linear infinite;-ms-animation:spin 2s linear infinite;-moz-animation:spin 2s linear infinite;-o-animation:spin 2s linear infinite;animation:spin 2s linear infinite;z-index:1001}#loader:before{content:"";position:absolute;top:5px;left:5px;right:5px;bottom:5px;border-radius:50%;border:3px solid transparent;border-top-color:#4ea3fb;-webkit-animation:spin 3s linear infinite;-moz-animation:spin 3s linear infinite;-o-animation:spin 3s linear infinite;-ms-animation:spin 3s linear infinite;animation:spin 3s linear infinite}#loader:after{content:"";position:absolute;top:15px;left:15px;right:15px;bottom:15px;border-radius:50%;border:3px solid transparent;border-top-color:#4ea3fb;-moz-animation:spin 1.5s linear infinite;-o-animation:spin 1.5s linear infinite;-ms-animation:spin 1.5s linear infinite;-webkit-animation:spin 1.5s linear infinite;animation:spin 1.5s linear infinite}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}#loader-wrapper .loader-section{position:fixed;top:0;width:51%;height:100%;background:#fff;z-index:1000;-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}#loader-wrapper .loader-section.section-left{left:0}#loader-wrapper .loader-section.section-right{right:0}.loaded #loader-wrapper .loader-section.section-left{-webkit-transform:translateX(-100%);-ms-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition:all .7s .3s cubic-bezier(0.645,0.045,0.355,1.000);transition:all .7s .3s cubic-bezier(0.645,0.045,0.355,1.000)}.loaded #loader-wrapper .loader-section.section-right{-webkit-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%);-webkit-transition:all .7s .3s cubic-bezier(0.645,0.045,0.355,1.000);transition:all .7s .3s cubic-bezier(0.645,0.045,0.355,1.000)}.loaded #loader{opacity:0;-webkit-transition:all .3s ease-out;transition:all .3s ease-out}.loaded #loader-wrapper{visibility:hidden;-webkit-transform:translateY(-100%);-ms-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition:all .3s 1s ease-out;transition:all .3s 1s ease-out}.no-js #loader-wrapper{display:none}.no-js h1{color:#222}#loader-wrapper .load_title{font-family:'Open Sans';color:#4ea3fb;font-size:36px;width:100%;text-align:center;z-index:9999999999999;position:absolute;top:60%;opacity:1;line-height:30px}#loader-wrapper .load_title p{height:50px;padding-top:10px;font-weight:normal;font-style:italic;font-size:26px;color:#4ea3fb;opacity:.8}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值