Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >前端性能优化小结

前端性能优化小结

作者头像
六个周
发布于 2022-10-28 06:52:45
发布于 2022-10-28 06:52:45
40100
代码可运行
举报
文章被收录于专栏:六个周六个周
运行总次数:0
代码可运行

从输入URL到页面加载完成,发生了什么,要进行肌肉记忆。

https://www.yuque.com/liugezhou/drrg7f/gav2aq

  • 前端性能优化主要是从网络层面渲染层面两个大的维度来分析
  • 涉及到网络的:DNS解析TCP链接HTTP请求/响应其中DNS解析和TCP链接我们可以优化的地方很有限。

网络层面

1. HTTP请求/相应的链接

  1. 减少请求次数
  2. 减少单次请求所花费的时间

这两个请求的优化点我们从 资源的压缩和合并入手 以及打包构建工具的作用解决浏览器频发请求文件问题.

2. webpack的性能瓶颈

首先对webpack的基础有个了解:

https://cloud.tencent.com/developer/article/2143280

  1. webpack的构建过程太花时间
  2. webpack打包的结果体积太大

构建过程提速:(主要是针对CI/CD流程吧,手动打包不太在意构建过程速度)

  • 不要让loader做太多事情:- modules.rules中的exclude使用–排除更多无关代码
  • 开启缓存转译:loader: ‘babel-loader?cacheDirectory=true’
  • 第三方库- DIIPlugin:把第三方库单独打包到一个文件
  • 将loader由单线程转为多线程- 使用happypack这个库,使得webpack单独处理任务改为把任务分解成多个子任务并发执行。
  • 构建结果体积压缩- webpack-bundle-analyzer:通过这个库可以查看构建打包后的体积,有针对性优化。
  • 按需加载。
  • 删除冗余代码:Tree-shaking,webpack4自带了,包括UglifyJsPlugin中compress的设置去除日志打印、注释等等。
  • 开启gzip- 需要开启gzip,在request-headers中设置accept-encoding:gzip,Deflate

babel优化

为了应对低版本的ES6转ES5的js语言特性,使用了babel-polyfill后,打包体积会很大,这个时候可以根据业务代码,在loader的的options配置中加入useBuiltIns为usage。

3 图片优化

  • 应用广泛的Web图片格式有:JPEG/JPG、PNG、WebP、Base64、SVG- JPEG/JPG:有损压缩、体积小、加载快、不支持透明==》背景图、banner图适用
  • PNG:无损压缩、质量高、体积大、支持透明 ==》Logo等小图片
  • WebP:唯一的缺点是兼容性不太好,可以通过判断是否支持该格式,切换后缀。
  • SVG:体积更小、压缩性更强、图片放大不失真,但渲染成本较高。
  • Base64:小图标解决方案,Webpack的url-loader对此做了优化。

4. 缓存应用

缓存 本地存储

  • Local Storage :持久化存储永不过期。5-10M数据,可以对图片、不经常更新的css、js静态存储。
  • Session Storage:会话存储
  • IndexedDB:运行在浏览器上的非关系型数据库,>250M.

5. CDN缓存

  • CDN的核心点分为缓存和回源
  • CDN往往被用来存放静态资源
  • 静态资源走CDN不应该是一个选择,而是一个规定
  • 业务服务器与静态资源CDN服务器的区分,对性能提高帮助很大(不用携带无用信息)

6.使用HTTP2

  • 多路复用、首部压缩

渲染层面

1. CSS样式表规则的优化

CSS选择符是从右到左进行匹配的。

  • 避免使用通配符,只对需要用到的元素进行选择
  • 少用标签选择器,多用类选择器。
  • CSS是阻塞渲染的资源,应尽快下载到客户端
  • 尽早==》header
  • 尽快==》CDN

2. JS的加载方式

  • 正常模式: 阻塞浏览器
  • async模式: 不会阻塞,加载是异步的
  • defer模式: 加载异步,推迟执行,在文档解析完成、DOMContentLoaded事件被触发时才开始依次执行。

3. 避免或减少回流操作

4. 图片懒加载

  • 关键一:当前可视区域的高度: window.innerHeight|| document.documentElement.clientHeight
  • 关键二:元素距离可视区域顶部的高度: getBoundingClientRect()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Lazy-load</title>
    <style>
      .img {
        width: 200px;
        height: 200px;
        background-color: gray;
      }
      .pic {
        border: 1px solid red;
        width: 200px;
        height: 200px;
      }
    </style>
  </head>
  <body>
    <div class="container">
      <!-- 10个div -->
      <div class="img">
        <img class="pic" alt="加载中" data-src="./images/9.png" />
      </div>
    </div>
  </body>
  <script>
    const imgs = document.getElementsByTagName('img')
    const viewHeight =
      window.innerHeight || document.documentElement.clientHeight
    console.log(viewHeight)
    let num = 0
    function lazyLoad() {
      for (let i = 0; i < imgs.length; i++) {
        let distance = viewHeight - imgs[i].getBoundingClientRect().top
        if (distance >= 0) {
          imgs[i].src = imgs[i].getAttribute('data-src')
          num = i + 1
        }
      }
    }
    window.addEventListener('scroll', lazyLoad, true)
  </script>
</html>

5.防抖和节流

以 4 中的监听scroll为例。

  • throttle(事件节流)和debounce(事件防抖)
  • 这两个东西都以闭包的形式存在

事件节流-throttle、第一个说了算

在一段时间内无视后来产生的回调请求。

事件防抖-debounce、最后一个说了算

某段事件内,不管你触发了多少次回调,都只认最后一次。

6.性能检测

可视化工具Performance工具

  • 使用Perfomance工具最好在无痕模式下打开
  • 主要由概述面板、详情面板、Summary三部分构成
  • 概述面板:FPS、CPU(与Summary结合来看)、NET

Lighthouse–页面性能报告

  • Performance
  • Accessibility
  • Best Practices
  • SEO
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm i -g lighthouse
lighthouse https://blog.liugezhou.online

我在使用此页面性能报告中,明显发现的性能指标有:图片推荐使用WebP、OSS资源推荐HTTP2、图片改为懒加载。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
前端性能优化
前端性能优化是提升用户体验、提高页面加载速度和响应速度的关键步骤。以下是一些核心优化策略和具体实现方法:
lpp182
2025/05/29
920
前端性能优化
前端性能优化秘籍:让你的网页飞起来
作为一名前端开发者,遇到页面加载慢、卡顿、白屏这些问题再正常不过了。毕竟,用户的耐心就像天气一样多变——一旦页面超过 3 秒 还没加载完,他们可能就会毫不犹豫地关掉网页,去找别的替代品。
Echo_Wish
2025/03/16
880
前端性能优化秘籍:让你的网页飞起来
前端性能优化 24 条建议(2020)
性能优化是把双刃剑,有好的一面也有坏的一面。好的一面就是能提升网站性能,坏的一面就是配置麻烦,或者要遵守的规则太多。并且某些性能优化规则并不适用所有场景,需要谨慎使用,请读者带着批判性的眼光来阅读本文。
谭光志
2020/09/29
1.3K0
前端性能优化 24 条建议(2020)
2023年前端面试题汇总-性能优化
CDN(Content Delivery Network,内容分发网络)是指一种通过互联网互相连接的电脑网络系统,利用最靠近每位用户的服务器,更快、更可靠地将音乐、图片、视频、应用程序及其他文件发送给用户,来提供高性能、可扩展性及低成本的网络内容传递给用户。
越陌度阡
2023/06/04
1.1K0
2023年前端面试题汇总-性能优化
你必须懂的前端性能优化
对于 DNS 解析和 TCP 连接两个步骤,我们前端可以做的努力非常有限。相比之下,HTTP 连接这一层面的优化才是我们网络优化的核心。
张炳
2019/08/02
7260
你必须懂的前端性能优化
一次网站的性能优化之路 -- 天下武功,唯快不破
2018 年 8 月,百度搜索资源平台发布的《百度移动搜索落地页体验白皮书 4.0 》中提到:页面的首屏内容应在 1.5 秒内加载完成。
夜尽天明
2019/06/03
1K0
漫谈前端性能优化
https://www.cnblogs.com/zjstar12/archive/2012/01/12/2320408.html
一粒小麦
2019/08/22
8220
如何做前端性能优化?
因为前端优化的方案非常多,本文不会太深入讲解,否则就篇幅太长了,主要还是让大家对大的脉络有一些认识。具体里面的小点以后我会另写文章讲解。
前端西瓜哥
2022/12/21
9720
从龟速 11s 到闪电 1s,详解前端性能优化之首屏加载
全文共6511字/词,阅读大概需要13分钟,太长不看党请直接移步👉「开始优化」部分直接查看优化手段 背景 前段时间公司服务器网络波动,网站访问变慢,一些性能问题也随之暴露了出来。纷纷反馈在这样的弱网条件下,访问新项目时,加载了近1分钟都没加载出来,而访问其他页面顶多也就30-40s。 在网络恢复后,尝试访问了下页面,无缓存首次打开需要等待近11s的时间,最大的资源达到了3.7M... 在对项目做了一些优化处理后,再次无缓存打开可以发现网页几乎是秒开,平均耗时在1s以内 在这里总结记录一下,基本上都是一些
@超人
2021/12/17
3.5K0
从龟速 11s 到闪电 1s,详解前端性能优化之首屏加载
前端性能优化原理与实践
在资源请求的过程中,涉及到网络请求的,包括:HTTP、TCP、DNS。其中TCP、DNS前端能做的工作非常有限,因此「优化HTTP」就成为了首要任务。
chuckQu
2022/08/19
1.1K0
前端性能优化
本来想写一篇实用而又全面的性能优化文章,很多大佬已经写了非常好,我就不再造轮子了。我这篇文章就归纳整理一下吧,方便后续我或他人学习使用。
Dawnzhang
2022/05/10
1.3K0
前端性能优化
7000字前端性能优化总结 | 干货建议收藏
为什么要做性能优化?性能优化到底有多重要? 网站的性能优化对于用户的留存率、转化率有很大的影响,所以对于前端开发来说性能优化能力也是重要的考察点。
coder_koala
2021/03/30
1.1K0
7000字前端性能优化总结  |  干货建议收藏
10个前端性能优化实用技能
考虑一个场景,滚动事件中会发起网络请求,但是我们并不希望用户在滚动过程中一直发起请求,而是隔一段时间发起一次,对于这种情况我们就可以使用节流。
王小婷
2020/11/26
4670
写在 2021 的前端性能优化指南
当收集浏览器端每个用户核心性能指标时,可通过 web-vitals 收集并通过 sendBeacon 上报到打点系统。
山月
2021/10/27
1.4K0
写在 2021 的前端性能优化指南
面试官问你前端性能优化时,他想问什么?
但在面试的时候,问这类问题时,候选人经常答得不尽人意,大部分人会把自己能想起来的优化措施,给背一遍。
虎妞先生
2023/10/16
6150
面试官问你前端性能优化时,他想问什么?
前端性能优化系列 | 加载优化
在浏览器发起网络请求时,并非每个字节都具有相同的优先级,所以,浏览器通常会对所要加载的内容进行推测,将相对重要的信息先呈现给用户。比如浏览器一般会先加载CSS,再去加载JavaScript脚本和图像文件。当然,浏览器的判断并不一定都是准确的,下面就来看看如何影响浏览器对资源加载的优先级。
用户6256742
2024/08/01
1960
前端性能优化系列 | 加载优化
【腾讯云前端性能优化大赛】前端性能和加载体验优化实践(附:PWA、离线包、内存优化、预渲染)
特别是对于首屏资源加载中的白屏时间,用户等待的时间就越长,用户感知到页面的速度就越慢。麻省理工学院的 Richard Larson 在讲话中指出,“人类将被动等待高估了 36%”(https://mazey.cn/t/em)。这意味着用户感觉到的等待时间比开发工具记录的长得多。
除除
2021/12/15
2.9K0
【腾讯云前端性能优化大赛】前端性能和加载体验优化实践(附:PWA、离线包、内存优化、预渲染)
web性能优化指南
前端性能优化,是每个前端必备的技能,优化自己的代码,使自己的网址可以更加快速的访问打开,减少用户等待,今天就会从几个方面说起前端性能优化的方案,
小周sir
2019/12/20
1.1K0
web性能优化指南
谈谈前端性能优化-面试版
当我们去面试的时候,很大概率会被面试官问这么一个问题:你有尝试过对项目做性能优化吗?或者你了解哪些性能优化的方法?听到这个问题的你可能是这样的:
loveX001
2022/10/11
1.3K0
我是如何让公司后台管理系统焕然一新的(上) -性能优化
马上到了金三银四的时间,很多公司开启了今年第一轮招聘的热潮,虽说今年是互联网的寒冬,但是只要对技术始终抱有热情以及有过硬的实力,即使是寒冬也不会阻挠你前进的步伐。在面试的时候,往往在二面,三面的时面试官会结合你的简历问一些关于你简历上项目的问题,而以下这个问题在很多时候都会被问到
桃翁
2019/11/18
2.8K0
相关推荐
前端性能优化
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验