前端性能分析优化

前端性能问题分析

(1)页面加载性能问题主要集中于下载关联的静态文件,比如CSS、JS、图片等,这些网络请求对网页加载影响最大

(2)过多的HTTP请求

(3)同步和异步的问题

(4)CDN网络访问瓶颈,如果引入了国外的CDN地址那么网络请求必然耗时

(5)前端代码的规范,比如随便复制导致引入不必要的组件、CSS和JS位置不规范、重复引入组件

(6)把过多的计算任务放在前端处理,前后端处理不合理,过多处理计算交给前端

优化方案

(一)Nginx动静分离

动静分离就是指图片,css, js之类的都交给nginx来处理,讲这些静态文件放在Nginx直接返回,对于业务请求交给应用服务器处理,达到动静分离
在这里插入图片描述

【操作参考】

修改nginx.conf
在locaction下面添加一个新的location:

   location ~\.(css|js|png)$ {
    
    
        	root XXX/webapps/ROOT;
	}
(二)压缩静态文件

YUI CompressorJava编写的是一个JavaScript压缩器,除了删除注释和空格外,还使用尽可能小的变量名来模糊局部变量。这种混淆是安全的,即使使用诸如eval或with之类的结构(尽管在那些情况下压缩不是最佳的)与jsmin相比,平均节省约20%。YUI Compressor还能够安全地压缩CSS文件。

项目主页:https://yui.github.io/yuicompressor
github地址:https://github.com/yui/yuicompressor

yuicompressor-maven-plugin
yuicompressor-maven-plugin是基于YUI Compressor 封装的maven plugin,使用它可以结合到我们的项目,来方便我们对项目js、和css进行压缩。

项目主页:https://davidb.github.io/yuicompressor-maven-plugin/

配置使用
将yuicompressor-maven-plugin添加至maven项目pom.xml文件中,并根据自己的需求进行配置

<plugin>
    <!-- YUI Compressor Maven压缩插件 -->
    <groupId>net.alchim31.maven</groupId>
    <artifactId>yuicompressor-maven-plugin</artifactId>
    <version>1.5.1</version>
    <executions>
        <execution>
            <goals>
                <goal>compress</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <!-- 读取js,css文件采用UTF-8编码 -->
        <encoding>UTF-8</encoding>
        <!-- 不显示js可能的错误 -->
        <jswarn>false</jswarn>
        <!-- 若存在已压缩的文件,会先对比源文件是否有改动  有改动便压缩,无改动就不压缩 -->
        <force>false</force>
        <!-- 在指定的列号后插入新行 -->
        <linebreakpos>-1</linebreakpos>
        <!-- 压缩之前先执行聚合文件操作 -->
        <preProcessAggregates>true</preProcessAggregates>
        <!-- 压缩后保存文件后缀 无后缀 -->
        <nosuffix>true</nosuffix>
        <!-- 源目录,即需压缩的根目录 -->
        <sourceDirectory>src/main/static</sourceDirectory>
        <!-- 输出目录,即压缩后的目录-->
        <outputDirectory>target/classes</outputDirectory>
        <force>true</force>
        <!-- 压缩js和css文件 -->
        <includes>
            <include>**/*.js</include>
            <include>**/*.css</include>
        </includes>
        <!-- 以下目录和文件不会被压缩 -->
        <excludes>
            <exclude>**/*.min.js</exclude>
            <exclude>**/*.min.css</exclude>
        </excludes>
    </configuration>
</plugin>

执行install命令,将在控制台看到如下输出:
在这里插入图片描述

我们打开target目录,可以看到项目静态目录下压缩后的文件,点开查看,文件内容被压缩。
在这里插入图片描述

(三)前端代码规范参考

1:所有的CSS引入放在< Head>内

2:所有的JS必须放在< Body>最下面

3:所有引入的CSS和JS尽量都是min压缩版

4:尽量不要引入all类型的插件,如果只用到个别功能,不要使用过大的工具包

5:不要重复引入,比如引入XX.all.JS然后又引入了其中的XX.JS

6:禁止引入无关的插件(复制代码时需要细心)

Tips:
下面的引入重复,而且引入过大,冗余
在这里插入图片描述

Tips:
只引入layui.js出现layer未定义解决方案

<script>
    layer = layui.use(['layer', 'form', 'element'], function () {
    
    
        var layer = layui.layer
            , form = layui.form
            , element = layui.element
    });
</script>
(四)代码优化

1:注意同步和异步请求问题,尽量使用异步AJAX方式

2:对于页面过多图表的页面必须异步加载,同时可以在初始阶段只加载一部分,对于另一部分可以采用延迟单位时间后加载也或者使用流式加载,只有当用户下拉操作时才去加载,尽量让HTTP请求分散

3:前端异步处理,后端某些时候也需要异步@Async处理,对于任务大的请求可以采用分治的方式,将任务拆分,采用多线程处理,保持前端和后端同时提高处理效率,最终达到整体性能的提升

猜你喜欢

转载自blog.csdn.net/Octopus21/article/details/112015059