网站性能优化

性能优化

其实之前我在工作文档中提到具体怎么做,但是没有在宏观上去对比,这里主要讲解下如何测试性能并优化

编码优化

  • 减少内存的无关变量监听
  • v-if与v-for不推荐连用,v-for的优先级高
  • ajax的请求尽量能够减少多个,如果ajax请求比较慢,但是又必须得请求。那么可以考虑使用 Web Worker
  • 防抖和节流
  • 图多的页面需要做图片懒加载+预加载+cdn请求以及压缩,加入父容器限制,避免重绘重排时容易造成页面排版混乱的情况
  • 组件按需加载, 公共组件提取

打包优化

tree shaking

tree shaking 是一个术语,通常用于描述移除 JavaScript 上下文中的未引用代码(dead-code)。它依赖于 ES2015 模块系统中的 静态结构特性,例如 [import](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import)[export](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/export)。这个术语和概念实际上是兴起于 ES2015 模块打包工具 rollup。
为了学会使用 tree shaking,你必须……

  • 使用 ES2015 模块语法(即 importexport)。
  • 在项目 package.json 文件中,添加一个 “sideEffects” 入口。
  • 引入一个能够删除未引用代码(dead code)的压缩工具(minifier)(例如 UglifyJSPlugin)。

你可以将应用程序想象成一棵树。绿色表示实际用到的源码和 library,是树上活的树叶。灰色表示无用的代码,是秋天树上枯萎的树叶。为了除去死去的树叶,你必须摇动这棵树,使它们落下。

JS-tree-shaking

  1. "sideEffects": false

css-tree-shaking

webpack-css-treeshaking-plugin
原理:整体思路是这样的,遍历所有的css文件中的selector选择器,然后去所有js代码中匹配,如果选择器没有在代码出现过,则认为该选择器是无用代码。
happypack多线程打包
sourceMap优化
cdn加载第三方模块
splitChunks抽离公共组件

内存优化

在页面从零到加载完成这个过程中
JS Heap(js堆内存)documents(文档)Nodes(DOM节点)Listeners(监听器)GPU memory(GPU内存)的最低值、最高值以及随时间的走势曲线

image.png

性能监控-performance monitor

image.png

量化性能指标 - lighthouse

image.png
image.png
我们可以看到几项指标:

  • First Contentful Paint 首屏加载时间(FCP)
  • Time to interactive 可互动的时间(TTI) 衡量一个页面多长时间才能完全交互
  • Speed Index 内容明显填充的速度(SI) 分数越低越好
  • Total Blocking Time 总阻塞时间(TBT) 主线程运行超过50ms的任务叫做Long Task,Total Blocking Time (TBT) 是 Long Tasks(所有超过 50ms 的任务)阻塞主线程并影响页面可用性的时间量,比如异步任务过长就会导致阻塞主线程渲染,这时就需要处理这部分任务
  • Largest Contentful Paint 最大视觉元素加载的时间(LCP) 对于SEO来说最重要的指标,用户如果打开页面很久都不能看清楚完整页面,那么SEO就会很低。(对于Google来说)
  • Cumulative Layout Shift 累计布局偏移(CLS) 衡量页面点击某些内容位置发生偏移后对页面对影响 eg:当图片宽高不确定时会时该指标更高,还比如异步或者dom动态加载到现有内容上的情况也会造成CLS升高

以上6个指标就能很好的量化我们网页的性能

若有收获,就点个赞吧

0 人点赞

  • 书签
  • 添加书签 移除书签
  • Vite构建工具
    • You are running the esm-bundler build of vue-i18n
    • 找不到模块“XXX”或其相应的类型声明
    • 配置JSX
    • vite-预编译
    • vite.config.js配置说明
    • 基于vite + flyio的反向代理
    • Failed to fetch dynamically imported module
    • global/ Buffer is not defined in vite
    • 反向代理请求
    • vite-issues/117解决方法
    • polyfillDynamicImport 懒加载异常解决方案
    • i18n国际化支持+ vscode插件提示
    • 路径快速访问
    • vite打包优化- 超出默认500kiB警告
    • 处理文件模块化【图片模块】
    • Vite概述
  • git
    • Githooks + standard代码风格统一配置
    • 移除文件忽略
    • fork 后同步源上游仓库地址
    • Husky: 一个让 Git 钩子变得更简单的工具
    • 团队规范化-git hooks
    • git本地配置
    • gitflow工作流
    • key无效或者过期操作
    • gitignore新加忽略文件失效问题
    • 线下脚本自动化配置
  • 交互动画/布局适配
    • 关于移动端横屏问题适配
    • v-ripple -水波纹
    • svg.js 构建自定义折线表
    • Sass @mixin 与 @include
    • 可视化-echarts解决方案实例
    • 可视化框架-总览( Front-end visualization)
    • CSS3-动画
    • CSS变量语法—主题色变更
    • 关于echarts响应式重绘的问题
    • 一行代码处理chrome密码自动填充
    • calc 用于处理移动端大框架
    • 关于滚动条的自定义样式
    • 重排与重绘(Reflow %26 Repaint)
    • css基础回顾
    • css业务场景技巧
    • 屏幕适配-自适应/响应方案总结
  • 桌面端App开发
    • 简介
    • tauri
      • 定制化webview
      • tauri,小团队项目的福音
    • electron
      • electron进程介绍
      • 每日一课-新建子界面
      • 每日一课-读取本地文件并且写入内容
      • 每日一课-electron是什么
      • 处理electron依赖无法下载的问题
      • 每日一课-首页展示webview
      • 高级集成electron + vue/react
      • electron-forge | 多平台打包器
      • electron-builder 打包器
      • 每日一课-在浏览器中打开链接
  • sever-服务
    • node库
      • nodemon
      • localtunnel
      • Puppeteer无头浏览器-web中的应用讲解
      • live-server- 搭建本地小型开发服务
    • node工具包
      • node中OS模块实战巧用
      • xlsx表的解析与读写
      • node fs模块实战
    • Nginx
      • niginx配置下hash模式和history模式
      • 安装
      • 配置路径
      • 常用命令
      • root路径下部署多项目
    • 使用js编写更便捷shell脚本-ZX
    • fixed -Updating Homebrew...
    • Docker入门实操-前端本地镜像部署
    • mongodb-指导(手摸手)
    • egg企业级resful接口协定
    • vim编辑器
    • web-Server
  • 微信小程序
    • weapp-image业务解决方案
    • 关于2018-2020小程序框架演变
    • 基于vue的uni-app实操体验
    • 小程序本地储存速记脑图
  • react
    • UMI
      • ts + antd + umi + egg= Client
    • react-hooks
      • hooks概览
    • 第六课- props深入
    • 第五课-组件通讯
    • 第四课-受控组件的双向绑定
    • 第三课-react组件化使用
    • 第二课-JSX特色语法
    • 第一课-react概述
  • vue
    • vue3
      • 基于vue3 的UI库分享
      • vue3 + ts 如何定义一个全局属性
      • 图标库-vue3
      • typescript in composition
      • 动态组件 %26 异步组件-keep-alive
      • 组合hook+ tabs 持久化方案
      • 关于set up语法糖=>如何获取props\emit
      • props外的爷孙通信(provide/inject)
      • vue3概览
      • vue3 实战方案
      • 异步组件(Suspense)
      • 实现动态storage
      • useHooks代替vuex具体方案
      • directives-自定义指定详解
    • vue2
      • 技术解密
      • 生命周期调用顺序
      • 处理xuex刷新数据消息情况解决方案
      • vuex-persistedstate
      • vuex的最佳实践
      • vue业务中较佳细节处理方案
      • 监听子组件的生命周期
      • @cli3升级到@cli4
      • 自定义用户拖拽
      • vue响应式数据原理解析
      • vue打包后依赖大小浏览
      • webpck工程化
      • vue在构建项目时除了webpack还用了rollup
      • filter全局设置(vue2.0,3.0-已弃用)
    • h函数
    • 基于vue3的ui库使用体验
    • 关于前端团队代码协作这件事
    • 定时器清除的优化
    • vue-router路由模式分析
  • 业务解决方案
    • 交互体验
      • canvas绘制
      • 全局弹窗【谷歌验证码绑定】
      • video处理chrome66随机噪音问题
      • h5视频背景-自动播放%26铺满背景
      • 动态配置交互
    • 原生工具包
      • 绕过授权方式获取用户地址信息
      • 原生时间格式处理解决方案
      • 获取URL中的携带参数
      • 不要在用字典了,Map用起来
      • 22个Javascript常用工具函数
      • 关于数字的格式化解决方案
      • 生成临时图片预览
      • 纯前端渲染导出
      • 简化处理结构Map-例:多层级联菜单
      • 图片一键下载
      • 克隆解决方案
      • 关于复制到粘贴板
    • npm包
      • Ni, 比yarn更好的工具
      • npm包维护
      • Naive UI实战开发体验
      • nrm,管理npm的源
      • npm%26yarn
      • 如何在npm库发布自己的库/框架
    • API
      • quantcast站点浏览追踪
      • 在 Analytics中添加自定义事件
      • echarts重绘问题-vue3
      • 自动获取定位
      • 下载文件
      • [微信支付]JSAPI企业解决方案
      • [订阅通知]浏览器解决方案
      • sentry-代码监控解决方案
      • 阿里云滑块样式-(宽度自动可配置,多语言切换)
      • Google Analytics
      • Chrome插件开发
      • chrome版本更新导致开发黄色预警
      • 基于auth2.0验证-第三方社交帐号登录[微博,微信]
      • 基于auth2.0的谷歌第三方登录(2023年将弃用!)
      • 基于Google的Web 应用的 OAuth 2.0 隐式和授权代码流
    • sentry的线上代码监控
    • 动态集成html
    • 跳转外链方式
    • base64编码
    • 国家国旗-映射关系
    • 阿里云oss图片下载跨域问题
    • 前端数据埋点解决方案
    • 前端团队代码评审 CheckList 清单
    • 静态部署网站解决方案
  • 面试
    • symbol使用
    • 网站性能优化
    • 防抖与节流
    • 2021-3月份面试总结
    • 作用域-回顾篇(一)
    • 关于闭包-回顾篇(二)
      • JS内存回收 %26 垃圾回收机制
    • 原型链-回顾篇(三)
    • 构造-回顾篇(四)
    • ECMAScript 6-回顾篇(五)
      • ES6-新增类详解
    • 谈谈模块化-回顾篇(六)
    • 跨域-回顾篇(七)
    • 事件循环(回顾七)
    • 异步方案-回顾篇(八)
暂无相关搜索结果!
    展开/收起文章目录

    哆哆女性网还珠格格花絮在太行山上火锅店如何起名性崔男孩子的起名大全电脑温度多少正常整体家装起名大全笔记本功率高尔夫小子男宝宝五行属金起名thrixxx联通套餐汇算清缴报告玛丽球探网指数高h动漫win10安装密钥黄色文章psp白骑士物语按笔画起名字好牧羊犬起名大全翰与瀚起名哪个好为自己的团购店起名60万日元等于多少人民币许氏女孩起名仙路至尊电商营业执照起名powerdesigner广字辈大全起名字男孩企业起名打分结果罪案第六感淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻不负春光新的一天从800个哈欠开始有个姐真把千机伞做出来了国产伟哥去年销售近13亿充个话费竟沦为间接洗钱工具重庆警方辟谣“男子杀人焚尸”男子给前妻转账 现任妻子起诉要回春分繁花正当时呼北高速交通事故已致14人死亡杨洋拄拐现身医院月嫂回应掌掴婴儿是在赶虫子男孩疑遭霸凌 家长讨说法被踢出群因自嘲式简历走红的教授更新简介网友建议重庆地铁不准乘客携带菜筐清明节放假3天调休1天郑州一火锅店爆改成麻辣烫店19岁小伙救下5人后溺亡 多方发声两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#青海通报栏杆断裂小学生跌落住进ICU代拍被何赛飞拿着魔杖追着打315晚会后胖东来又人满为患了当地回应沈阳致3死车祸车主疑毒驾武汉大学樱花即将进入盛花期张立群任西安交通大学校长为江西彩礼“减负”的“试婚人”网友洛杉矶偶遇贾玲倪萍分享减重40斤方法男孩8年未见母亲被告知被遗忘小米汽车超级工厂正式揭幕周杰伦一审败诉网易特朗普谈“凯特王妃P图照”考生莫言也上北大硕士复试名单了妈妈回应孩子在校撞护栏坠楼恒大被罚41.75亿到底怎么缴男子持台球杆殴打2名女店员被抓校方回应护栏损坏小学生课间坠楼外国人感慨凌晨的中国很安全火箭最近9战8胜1负王树国3次鞠躬告别西交大师生房客欠租失踪 房东直发愁萧美琴窜访捷克 外交部回应山西省委原副书记商黎光被逮捕阿根廷将发行1万与2万面值的纸币英国王室又一合照被质疑P图男子被猫抓伤后确诊“猫抓病”

    哆哆女性网 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化