Vue+VueRouter+Nginx+CDN 项目优化实际总结

简介: Vue+VueRouter+Nginx+CDN 项目优化实际总结
使用场景:目前这个项目要嵌入到APP中使用,项目用到router、vuex、axios等目前现状:首次加载非常缓慢,等待时间超过8秒钟

我们目的:减少包体积、减少http请求次数,同时保证代码可用性、维护性、不变动业务代码


路由按需加载



webpack默认将所有js源代码打包成一个js文件,导致JS包会变得非常大,影响页面首次加载速度


按需加载能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件的js文件


const home = () => import('@views/home/home')
// 或者
const home = (resolve) => {
    import('@views/home/home').then((module) => {
      resolve(module)
    })
}


部分走CDN



CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。如果公司没有考虑CDN,可以酌情将例如 vue vux vue-router 等不变动的资源使用第三方免费 CND 引入,并添加本地 fallback

//在vue.config.js中配置
configureWebpack: config => {
    if (isProd != 'development') {
        config.externals = {
            vue: 'Vue',
            'vue-router': 'VueRouter',
            vuex: 'Vuex',
        }
    }
}
在public/index.html
<body>
    <div id="app"></div>
    <% if (VUE_APP_ENV != "development") { %>
        <!-- 运行时依赖 -->
        <script src="//cdn.staticfile.org/vue/2.5.17/vue.runtime.min.js" type="text/javascript"></script>
        <script src="//cdn.staticfile.org/vue-router/3.0.1/vue-router.min.js" type="text/javascript"></script>
        <script src="//cdn.staticfile.org/vuex/3.0.1/vuex.min.js" type="text/javascript"></script>
        <script>
            // 当cdn资源失效时,加载本地资源
            window.Vue || document.write('<script src="./vue.min.js"><\/script>');
        </script>
    <% } %>
</body>


nginx压缩


目前有两种压缩方式,nginx压缩,客户端打包压缩在上传


1.nginx压缩


客户端啥都不用做直接上传打包的代码即可


就是每次请求时服务器先压缩再返回资源,对服务器性能有一定消耗


nginx.conf文件
http{
    #开启服务端压缩-损耗服务器cpu 
    gzip on; #开启gzip
    gzip_min_length 10k; #设置允许压缩的页面最小字节数; 这里表示如果文件小于10个字节,就不用压缩,因为没有意义,本来就很小
    gzip_buffers 4 16k; #设置压缩缓冲区大小,此处设置为4个16K内存作为压缩结果流缓存
    gzip_comp_level 3; #压缩级别,1-10,数字越大压缩的越好,也越占用CPU
    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript; #制定压缩的类型,线上配置时尽可能配置多的压缩类型!
    gzip_vary on; #选择支持vary header;改选项可以让前端的缓存服务器缓存经过gzip压缩的页面; 这个可以不写,表示在传送数据时,给客户端说明我使用了gzip压缩
    gzip_disable "MSIE [1-6]\."; #配置禁用gzip条件,支持正则。此处表示ie6及以下不启用gzip(因为ie低版本不支持)
}


2.客户端打包压缩在上传


在打包是需要配置vue.config.js
//需要安装 npm i compression-webpack-plugin -D
const CompressionWebpackPlugin = require('compression-webpack-plugin');
if (process.env.NODE_ENV === 'production') {
    return {
         plugins: [
               new CompressionWebpackPlugin({
                   algorithm: 'gzip',
                   test: /\.(js|css)$/,// 匹配文件名
                   threshold: 10240, // 对超过10k的数据压缩
                   deleteOriginalAssets: false, // 不删除源文件
                   minRatio: 0.8 // 压缩比
                })
          ]
     }
}


打包出来的可能会带有.gz的文件夹


image.png

nginx配置一句话即可


nginx.conf文件


http{
    gzip_static on; #静态压缩
}


nginx设置缓存


#server模块一般对应在相对应的xxx.conf中,不建议都写在nginx.conf中
server{
    location ~* ^.+\.(ico|gif|jpg|jpeg|png)$ { 
        access_log   off; 
        expires      30d; // 天
    }
    location ~* ^.+\.(css|js|txt|xml|swf|wav)$ {
        access_log   off;
        expires      24h; // 小时
    }
    location ~* ^.+\.(html|htm)$ {
        expires      1h;
    }
}


实际效果


chunk-vendors.js可能会比较大,3M左右,开启压缩只剩下1M


image.png

上传代码到服务器打开浏览器测试,在公司wifi测试下,整个加载过程不超3秒


image.png



相关实践学习
Serverless极速搭建Hexo博客
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
3月前
|
JavaScript 前端开发 Java
vue-day01 使用cdn引入使用
文章介绍了Vue.js的基础用法,包括数据绑定、条件渲染、列表渲染、事件处理等。通过示例代码展示了如何使用Mustache语法、v-once指令、v-html指令、v-bind和v-on指令,以及动态参数、修饰符和指令缩写。这些基础知识为初学者提供了Vue.js的使用入门。
vue-day01 使用cdn引入使用
|
2月前
|
缓存 前端开发 JavaScript
|
2月前
|
JavaScript 应用服务中间件 nginx
nginx部署vue项目
本文介绍了将Vue项目部署到Nginx的步骤,包括构建Vue项目、上传dist文件夹到服务器、安装Nginx、配置Nginx代理静态文件以及重启Nginx,确保了Vue应用可以通过域名或IP地址访问。
121 1
|
2月前
|
前端开发 JavaScript 应用服务中间件
linux安装nginx和前端部署vue项目(实际测试react项目也可以)
本文是一篇详细的教程,介绍了如何在Linux系统上安装和配置nginx,以及如何将打包好的前端项目(如Vue或React)上传和部署到服务器上,包括了常见的错误处理方法。
453 0
linux安装nginx和前端部署vue项目(实际测试react项目也可以)
|
2月前
|
缓存 前端开发 JavaScript
前端架构思考:代码复用带来的隐形耦合,可能让大模型造轮子是更好的选择-从 CDN 依赖包被删导致个站打不开到数年前因11 行代码导致上千项目崩溃谈谈npm黑洞 - 统计下你的项目有多少个依赖吧!
最近,我的个人网站因免费CDN上的Vue.js包路径变更导致无法访问,引发了我对前端依赖管理的深刻反思。文章探讨了NPM依赖陷阱、开源库所有权与维护压力、NPM生态问题,并提出减少不必要的依赖、重视模块设计等建议,以提升前端项目的稳定性和可控性。通过“left_pad”事件及个人经历,强调了依赖管理的重要性和让大模型代替人造轮子的潜在收益
|
2月前
|
JavaScript 应用服务中间件 开发工具
vue尚品汇商城项目-day07【53.nginx反向代理配置】
vue尚品汇商城项目-day07【53.nginx反向代理配置】
34 4
|
3月前
|
JSON JavaScript 数据格式
vue写入json数据到文本中+vue引入cdn的用法
vue写入json数据到文本中+vue引入cdn的用法
56 10
|
2月前
|
JavaScript 前端开发 应用服务中间件
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
164 0
|
2月前
|
存储 JavaScript 安全
vue项目打包优化:缩小体积productionSourceMap设置,使用cdn加速
vue项目打包优化:缩小体积productionSourceMap设置,使用cdn加速
101 0
|
2月前
|
缓存 监控 负载均衡
nginx相关配置及高并发优化
Nginx的高并发优化是一个综合性的过程,需要根据具体的业务场景和硬件资源量身定制。以上配置只是基础,实际应用中还需根据服务器监控数据进行持续调整和优化。例如,利用工具如ab(Apache Benchmarks)进行压力测试,监控CPU、内存、网络和磁盘I/O等资源使用情况,确保配置的有效性和服务的稳定性。
124 0