【前端项目笔记】10 项目优化上线
项目优化上线
目标:优化Vue项目+部署Vue项目(上线提供使用)
项目优化
项目优化策略:
- 生成打包报告:根据生成的报告发现问题并解决
- 第三方库启用CDN:提高首屏页面的加载效率
- Element-UI组件按需加载
- 路由懒加载
- 首页内容定制
为项目添加进度条效果
会用到第三方的包nprogress,添加loading效果
- 安装:
npm install --save nprogress
- 导入nprogress包
- 需要配置两个拦截器request(请求拦截器)和response(响应拦截器)
在请求拦截器request中调用NProgress.start()展示进度条
在请求拦截器response中调用NProgress.done()隐藏进度条


build 编译并压缩(用于生产环境)
在build时报错:

解决方法:解决Error: error:0308010C:digital envelope routines::unsupported的四种解决方案
使用方案4解决报错:


解决build警告
使用babel插件在项目build阶段把所有console移除
安装babel-plugin-transform-remove-console:
npm install babel-plugin-transform-remove-console --save-dev

但由于此插件的配置全局生效,意味着项目开发、测试、发布阶段都会移除console.log,不方便测试。需要将其设置为仅在发布阶段生效:

生成打包报告
为了直观看到项目中存在的问题


看到有哪些文件体积扩大,需要将其优化
如何优化项目的打开速度
通过vue.config.js修改webpack的默认配置
Webpack是一个模块打包工具,它的主要功能是分析项目结构,找到JavaScript模块以及其他浏览器不能直接运行的扩展语言(如SCSS、TypeScript等),并将它们打包为合适的格式以供浏览器使用。Webpack通过依赖关系图来管理非代码资源,如images或web字体等,并会把它们作为依赖提供给应用程序。每个模块都可以明确表述它自身的依赖,在打包时可根据依赖进行打包,避免打包未使用的模块。Webpack的优点包括拥有依赖管理、动态打包、代码分离、按需加载、代码压缩、静态资源压缩、缓存等配置,扩展性强,插件机制完善,社区庞大,更新速度快,轮子丰富。



为开发模式与发布模式指定不同的打包入口

configWebpack和chainWebpack

通过chainWebpack自定义打包入口


通过externals加载外部CDN资源
内容分发网络(Content Delivery Network,CDN)是建立并覆盖在因特网之上的一层特殊网络,专门用于通过因特网高效传递丰富的多媒体内容,对因特网中的信息流进行优化,从而提高网络的使用效率。

externals排除某些包让它们不被打包到最终的文件里面去,而是去windows全局查找这些对象直接使用



大大减少了依赖项占用内存:
之前:

之后:

通过CDN优化ElementUI的打包


首页内容定制
在vue.config.js中声明一个参数isProd,根据这个参数来自定制页面如何渲染
<%= %>代表输出
<% %>代表写正常的语句



bulid发布成功后,多了一个dist文件夹,dist就是发布的产品

路由懒加载
打包构建项目时,JS包会变得非常大,影响页面加载。如果我们能把不同路由对应的组件分割成不同的代码块,当路由被访问时才加载对应组件,可以提高页面加载效率。
- 安装
@babel/plugin-syntax-dynamic-import包
npm install --save-dev @babel/plugin-syntax-dynamic-import
-
在babel.config.js配置文件中声明该插件

-
将路由改为按需加载的形式
示例代码:



项目上线

通过node创建web服务器
创建node项目,并安装express,通过express快速创建web服务器,将vue打包生成的dist文件夹,托管静态资源即可。
npm init -y 初始化一个包管理配置文件
npm i express -S 安装一个第三方的包express
把vue_shop的发布文件夹dist复制到vue_shop_server中
创建app.js入口文件

打开网址 http://127.0.0.1显示空白页
根据报错进行修改:

- 修改引入的echarts CDN资源版本(最高5.4.3,没有5.5.1)

- 将原来的externals中的vue、vueRouter、vueQuillEditor全部改成首字母大写

- 在vue_shop中重新build得到dist文件,再复制到vue_shop_server中成功运行项目

开启gzip配置
使用gzip可以减少文件体积,使传输速度更快。
可以通过服务器端使用Express做gzip压缩
npm i compression -S 安装相应包

配置HTTPS服务(一般由后台开发人员进行,前端了解即可)




使用pm2管理应用
后台node server服务器被关掉,那么网站服务就停止了,再通过浏览器访问项目打不开
保留很多终端窗口可能难以管理,关闭终端窗口网站能够正常运行
PM2是常用的node进程管理工具,它可以提供node.js应用管理,如自动重载、性能监控、负载均衡等。同类工具有Supervisor、Forever等。
pm2是一个进程管理工具,可以用它来管理你的node进程,并查看node进程的状态,当然也支持性能监控,进程守护,负载均衡等功能。pm2基本是Nodejs应用程序不二的守护进程选择,事实上它并不仅仅可以启动Nodejs的程序,只要是一般的脚本的程序它同样可以胜任。
- 在服务器中安装pm2:
踩坑:安装成功,但是无法正常使用。
搜索后发现需要手动配置系统环境变量,一定要重启,另外这里也需要注意:
首先搜索全局安装位置npm root -g:
C:\Windows\System32>npm root -g
D:\Program Files\nodejs\node_global\node_modules
然后把D:\Program Files\nodejs\node_global\添加到系统环境变量Path,多写一点都不会生效!

npm i pm2 -g

PS:谁懂我看到这里有多激动,整了快两天终于用上了pm2
- 启动项目命令:
pm2 start 脚本 --name 自定义名称

关掉终端后127.0.0.1能正常运行
- 查看运行项目:
pm2 ls

- 停止项目:
pm2 stop 自定义名称

网站就打不开了
- 重启项目:
pm2 restart 自定义名称

6. 删除项目:
pm2 delete 自定义名称

上传代码
git branch 查看当前所处分支 是master
git status 查看所有文件状态
git add . 把所有文件添加到暂存区
git commit -m "项目优化和上线" 提交代码,本地更新
git push 本地上传到云端
相关文章:
【前端项目笔记】10 项目优化上线
项目优化上线 目标:优化Vue项目部署Vue项目(上线提供使用) 项目优化 项目优化策略: 生成打包报告:根据生成的报告发现问题并解决第三方库启用CDN:提高首屏页面的加载效率Element-UI组件按需加载路由懒加…...
Qt基础控件总结—多页面切换(QStackWidget类、QTabBar类和QTabWidget类)
QStackedWidget 类 QStackedWidget 类是在 QStackedLayout 之上构造的一个便利的部件,其使用方法与步骤和 QStackedLayout 是一样的。QStackedWidget 类的成员函数与 QStackedLayout 类也基本上是一致的,使用该类就和使用 QStackedLayout 一样。 使用该类可以参考QStackedL…...
团队融合与业务突破
结束了在上海久事集团下属公司的《团队融合与业务突破》课程,不仅探讨了团队领导力的关键技巧,更重要的是,我们从业务协同的视角,在跨团队中如何达成了共识,结合系统思考的相关内容,让大家看到跨部门冲突的…...
mybatilsplaus 常用注解
官网地址 baomidou注解配置...
vue引入sm-crypto通过sm4对文件进行加解密,用户输入密码
对文件加密并保存: import { sm4 } from sm-cryptofetch("你的文件地址") .then(response > response.blob()) .then(byteStream > {const reader2 new FileReader();reader2.onload function(event) {const arrayBuffer event.target.result;l…...
vue3实现无缝滚动列表(大屏数据轮播场景)
实现思路 vue3目前可以通过第三方组件来实现这个需求。 下面介绍一下这个第三方滚动组件--vue3-scroll-seamless vue3-scroll-seamless 是一个用于 Vue 3 的插件,用于实现无缝滚动的组件。它可以让内容在水平或垂直方向上无缝滚动,适用于展示轮播图、新…...
element ui ts table重置排序
#日常# 今天带的实习生,在遇到开发过程中,遇到了element ui table 每次查询的时候都需要重置排序方式,而且多个排序是由前端排序。 <el-table :data"tableData" ref"restTable"> </<el-table> <script…...
python热门面试题三
面试题1:Python中的列表推导式是什么?请给出一个例子。 回答: 列表推导式(List Comprehension)是Python中一种非常强大且简洁的构建列表的工具。它允许你通过一个表达式来创建一个新的列表,这个表达式定义…...
sql monitoring 长SQL ASH AWR 都没有 未Commit or export to csv
Duration 4小时, Database Time 22.5, Session Inactive, 1.未Commit原因, 2.慢慢导出成csv文件? How is v$session status INACTIVE and v$sql_monitor status EXECUTING concurrently 2641811 Posts: 8 Jan 11, 2016 6:47P…...
算法学习day12(动态规划)
一、不同的二叉搜索树 二叉搜索树的性质:父节点比左边的孩子节点都大;比右边的孩子节点都小; 由图片可知,dp[3]是可以由dp[2]和dp[1]得出来的。(二叉搜索树的种类和根节点的val有关) 当val为1时,左边是一定没有节点的…...
Vue 3 <script setup> 使用v-bind(或简写为 :)来动态绑定图片的 src 属性
<img :src"images[currentIndex]" > <template> <div> <!-- 使用 v-bind 或简写为 : 来动态绑定图片的 src 属性 --> <img :src"images[currentIndex]" alt"Dynamic Image" style"width: 100px; height: a…...
前端Vue自定义签到获取积分弹框组件设计与实现
摘要 随着前端技术的不断演进,开发的复杂性日益凸显。传统的整体式开发方式在面临功能迭代和修改时,常常牵一发而动全身,导致开发效率低下和维护成本高昂。组件化开发作为一种解决方案,通过实现模块的独立开发和维护,…...
闲置服务器废物利用_离线下载_私人影院_个人博客_私人云笔记_文件服务器
背景 家里有台旧windows笔记本,PentiumB940 2.00GHz的cpu 4G内存,512G硬盘 放在家里吃灰很久,最近几个月折腾折腾,装了linux操作系统,换了一个2T的硬盘 这里记录下折腾的过程,有需要的可以参考 开通公网IP 打电话给运营商一般都可…...
【Python学习笔记】调参工具Optuna + 泰坦尼克号案例
【Python学习笔记】调参工具Optuna&泰坦尼克号案例 背景前摇:(省流可不看) 最近找了份AI标注师的实习,但是全程都在做文本相关的活,本质上还是拧螺丝,就想着学点调参、部署什么的技能增加一些竞争力&a…...
GPT带我学-设计模式13-策略模式
概述 策略模式 例子 你可以创建一个策略工厂(Strategy Factory)来根据传入的 orgId 动态地选择合适的策略。以下是实现示例: 首先,定义策略接口和具体策略类: public interface CardPathStrategy {String generat…...
【Linux】Ubuntu配置JDK环境、MySQL环境
一、 Ubuntu配置JDK环境 在Ubuntu系统中安装JDK 8可以通过以下步骤进行: 打开终端。更新包列表: sudo apt update安装OpenJDK 8: sudo apt install openjdk-8-jdk验证安装是否成功: java -version注:如果系统中安…...
【ElasticSearch】ES 5.6.15 向量插件支持
参考 : https://github.com/lior-k/fast-elasticsearch-vector-scoring 下载插件 安装插件 插件目录: elasticsearch/plugins, 安装后的目录如下 plugins└── vector├── elasticsearch-binary-vector-scoring-5.6.9.jar└── plugin-descriptor.properties修…...
Kafka 高并发设计之数据压缩与批量消息处理
《Kafka 高性能架构设计 7 大秘诀》专栏第 6 章。 压缩,是一种用时间换空间的 trade-off 思想,用 CPU 的时间去换磁盘或者网络 I/O 传输量,用较小的 CPU 开销来换取更具性价比的磁盘占用和更少的网络 I/O 传输。 Kafka 是一个高吞吐量、可扩展…...
设计模式使用场景实现示例及优缺点(行为型模式——模板方法模式)
模板方法模式(Template Method Pattern) 模板方法模式(Template Method Pattern)是一种行为设计模式,它定义了一个操作中的算法的骨架,将算法的一些步骤延迟到子类中。这样可以在不改变算法的结构的前提下…...
ETL数据集成丨主流ETL工具(ETLCloud、DataX、Kettle)数据传输性能大PK
目前市面上的ETL工具众多,为了方便广大企业用户在选择ETL工具时有一个更直观性能方面的参考值,我们选取了目前市面上最流行的三款ETL工具(ETLCloud、DataX、Kettle)来作为本次性能传输的代表,虽然性能测试数据有很多相…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
