langyazhixue

积极向上,独立自主

  • 主页
所有文章 关于我

langyazhixue

积极向上,独立自主

  • 主页

性能优化

2021-01-02

页面优化分为加载优化,运行时候优化

性能优化的 24 条建议

  1. (性能优化的 24 条建议)[https://juejin.cn/post/6892994632968306702]
  2. (送你一张图,搞懂性能优化,再也不怕面试官拷问)(https://juejin.cn/post/6844904099515727886)
  3. (Web 性能领域常见的专业术语) https://github.com/berwin/Blog/issues/46)

加载优化(交付优化) && HTTP 请求

  1. 一个完整的 HTTP 请求需要经历 DNS 查找,TCP 握手,浏览器发出 HTTP 请求,服务器接收请求,服务器处理请求并发回响应,浏览器接收响应等过程

  2. 多个请求合并

  3. 精灵图

  4. 域名分片 ,减少域名解析,但是会增加域名解析时间

  5. 缓存 Etag last-modifer

  6. 减少重定向

  7. HTTP 2

  8. 解析速度快

  9. 多路复用,解决队头阻塞问题

  10. 首部压缩

  11. 优先级

  12. 流量控制

  13. 服务器主动推送数据

  14. 异步无阻塞加载 JS

  15. 优先加载关键的 CSS

  16. 懒加载

  17. 可以加载 低质量或模糊的图片,当图片加载完毕后在用完整图片替换它

  18. 可以通过 Intersection Observer 延迟加载图片、视频、广告脚本、或任何其他资源

  19. 资源提示(Resource Hints)

  20. dns-prefetch

  21. preconnect 用于启动预链接,其中包含 DNS 查找,TCP 握手,以及可选的 TLS 协议,允许浏览器减少潜在的建立连接的开销

  22. Prefetch 用于标识下一个导航可能需要的资源

  23. prerender

  24. Preload

  25. 快速响应的用户界面 web Worker 大任务 分开

  26. 可以尝试使用骨架屏或添加一些 Loading 过渡动画提示用户体验

  27. 骨架屏 是在 页面数据尚未加载前 先给用户展示出 页面的大致结构

服务端渲染

服务器会查看当前路由组件需要哪些资源文件,然后将这些文件的内容填充到 HTML 文件。如果有 ajax 请求,就会执行它进行数据预取并填充到 HTML 文件里,最后返回这个 HTML 页面。
当客户端接收到这个 HTML 页面时,可以马上就开始渲染页面。与此同时,页面也会加载资源,当必要的资源都加载完毕后,开始执行 new Vue() 开始实例化并接管页面

CSS

  1. 将 CSS 放在文件头部, 因为先加载 HTML 再加载 CSS,会让用户第一时间看到的页面是没有样式的、“丑陋”的,为了避免这种情况发生,就要将 CSS 文件放在头部了
  2. 避免 CSS 表达式
  3. 降低 CSS 选择器的复杂性

JS && 编码优化

  1. 把所有 script标签都放到文档的末尾,body之前
    把脚本放在中会导致浏览器无法并行加载其他文件,根据 HTTP 规范,浏览器每次从同一个域名中最多只能同时下载 2 个文件。而在下载脚本期间,浏览器不会下载其他任何文件,即使是来自不同域名的文件也不会下载,所有其他资源都要等脚本加载完毕后才能下载

  2. 编码优化

    1. 字面量与局部变量的访问速度最快,数组元素和对象成员相对较慢
    2. 变量从局部作用域到全局作用域的搜索过程越长速度越慢
    3. 对象嵌套的越深,读取速度就越慢
    4. 对象在原型链中存在的位置越深,找到它的速度就越慢
  3. DOM

  4. 减少 操作 DOM

  5. 减少重排,重绘

  6. 使用事件委托

  7. 流程控制

  8. 避免使用 for…in(它能枚举到原型,所以很慢)

  9. 在 JS 中倒序循环会略微提升性能

  10. 减少迭代的次数

  11. 基于循环的迭代比基于函数的迭代快 8 倍

  12. 用 Map 表代替大量的 if-else 和 switch 会提升性能

  13. 使用 requestAnimationFrame

  14. requestAnimationFrame 会把每一帧中的所有 DOM 操作集中起来,在一次重绘或回流中就完成,并且重绘或回流的中完成,并且重绘或回流的时间间隔紧紧跟随浏览器的刷新频率,一般来说,这个频率为每秒 60 帧。

  15. 使用 Web Workers

  16. 避免卡顿

静态资源优化

  1. 静态 CDN
  2. 图片
  3. 图片延迟加载 IntersectionObserver
  4. 当图片出现在浏览器的可看见区域的时候
  5. 响应式图片
  6. 通过 picture 实现
  7. @media
  8. 调整图片大小
    你有一个 1920 * 1080 大小的图片,用缩略图的方式展示给用户,并且当用户鼠标悬停在上面时才展示全图。如果用户从未真正将鼠标悬停在缩略图上,则浪费了下载图片的时间
    所以,我们可以用两张图片来实行优化。一开始,只加载缩略图,当用户悬停在图片上时,才加载大图。还有一种办法,即对大图进行延迟加载,在所有元素都加载完成后手动更改大图的 src 进行下载
  9. 降低图片质量
  10. 尽量利用 CSS3 效果代替图片
  11. 使用 webp 格式的图片
    webp 的优势体现在它具有更优的图像数据压缩算法,能带来更小的图片体积,而且拥有肉眼识别无差异的图像质量;同时具备了无损和有损的压缩模式、Alpha 透明以及动画的特性,在 JPEG 和 PNG 上的转化效果都相当优秀、稳定和统一。
  12. 使用字体图标 iconfont 代替图片图标 使用 fontmin-webpack 插件对字体文件进行压缩

构建优化 && webpack

Vue

性能监控

  • 性能优化
vue - 性能优化
骨架屏
© 2022 langyazhixue
Powered by Hexo
  • 所有文章
  • 关于我

tag:

  • css
  • htmlDOM
  • node
  • npm
  • react-native
  • 性能优化
  • git
  • 代码规范
  • plugin
  • mock
  • 浏览器
  • 计算机基础
  • http
  • 网络
  • webpack
  • vue
  • vue-cli
  • brower
  • 数据结构
  • es5
  • es6
  • test
  • ts
  • typescript
  • react-router
  • react
  • dva
  • redux
  • redux-saga
  • vue API
  • vue 选项
  • vue基础
  • 设计模式
  • vue-router
  • requestIdleCallback

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

  • 2022-06-24

  • 2022-06-24

  • 2022-06-24

  • 2022-06-24

  • 2022-06-24

  • 2022-06-24

  • 2022-06-24

  • 2022-06-24

  • 2022-06-24

  • 2022-06-24

  • 2022-06-24

  • 2022-06-24

  • 2022-06-24

  • 2022-06-24

  • 2022-06-24

  • 2022-06-24

  • 2022-06-24

  • 2022-06-24

  • 2022-06-24

  • 2022-06-24

  • React-setState()的两中传参方式介绍及理解

    2021-12-08

    #react

  • requestIdleCallback

    2021-11-30

    #requestIdleCallback

  • enzyme 测试

    2021-11-13

    #test

  • React 合成事件

    2021-11-08

    #react

  • 小哲机器人项目情况

    2021-08-11

    #webpack

  • 测试类型

    2021-07-15

    #test

  • http协议进阶篇

    2021-06-11

    #网络

  • 问题解答

    2021-06-11

    #浏览器

  • http协议探索篇

    2021-06-11

    #网络

  • http协议安全篇

    2021-06-11

    #网络

  • http协议破冰篇

    2021-06-11

    #网络

  • 浏览器中的JS 执行机制

    2021-06-11

    #浏览器

  • 课外加餐

    2021-06-11

    #浏览器

  • V8引擎工作原理

    2021-06-11

    #浏览器

  • http协议基础篇

    2021-06-11

    #网络

  • V8引擎工作原理

    2021-06-11

    #浏览器

  • 宏观视角下的浏览器

    2021-06-11

    #浏览器

  • http协议总结篇

    2021-06-11

    #网络

  • 问题解答

    2021-06-11

    #浏览器

  • 浏览器安全

    2021-06-11

    #浏览器

  • http协议飞翔篇

    2021-06-11

    #网络

  • 浏览器中的页面

    2021-06-11

    #浏览器

  • vue - 性能优化

    2021-01-02

    #性能优化

  • 性能优化

    2021-01-02

    #性能优化

  • 骨架屏

    2021-01-02

    #性能优化

  • 收集性能信息

    2021-01-02

    #性能优化

  • webapck - 性能优化

    2021-01-02

    #性能优化

  • 关于屏幕尺寸、分辨率(比)、屏幕像素密度的小结

    2021-01-02

    #性能优化

  • git 命令大全

    2020-11-05

    #git

  • vue-cli css 相关配置

    2020-07-31

    #vue#vue-cli

  • vue-cli 环境变量和模式

    2020-07-31

    #vue#vue-cli

  • vue-cli webpack相关配置

    2020-07-31

    #vue#vue-cli

  • vue-cli 脚手架介绍

    2020-07-31

    #vue#vue-cli

  • vue-cli 构建目标

    2020-07-31

    #vue#vue-cli

  • 声明文件的发布

    2020-07-29

    #typescript

  • 如何写TS中的声明文件

    2020-07-29

    #typescript

  • ts 项目配置 tsconfig.json

    2020-07-29

    #typescript

  • 在TypeScript中,.d.ts声明文件中的'export=' 是什么意思

    2020-07-29

    #typescript

  • 进程与线程的区别

    2020-03-05

    #计算机基础

  • react-native 核心组件介绍

    2020-01-02

    #react-native

  • react-native 核心API 介绍

    2020-01-02

    #react-native

  • react-native 离线缓存设计

    2019-12-30

    #react-native

  • react-native 数据缓存

    2019-12-30

    #react-native

  • react-native

    2019-12-30

    #react-native

  • webpack 谈谈 require和require.context()方法

    2019-12-21

    #es6

  • vue权限控制和动态路由

    2019-12-19

    #vue-router

  • 请求相关 path-to-regexp

    2019-12-19

    #plugin

  • dva有哪些输出文件

    2019-12-18

    #react#dva

  • 为什么要用dva

    2019-12-18

    #react#dva

  • dva插件之 dva-loading插件

    2019-12-18

    #react#dva

  • dva有哪些API

    2019-12-18

    #react#dva

  • 谈谈如何在本地进行数据mock

    2019-12-10

    #mock

  • redux-saga 之 Middleware API

    2019-12-05

    #redux#redux-saga

  • redux-saga 如何与 redux 结合

    2019-12-05

    #redux#redux-saga

  • redux-saga 辅助函数

    2019-12-05

    #redux#redux-saga

  • redux-saga 对 sagas 进行排序

    2019-12-05

    #redux#redux-saga

  • redux-saga 之 Effect创建器

    2019-12-05

    #redux#redux-saga

  • redux-saga 组合器

    2019-12-05

    #redux#redux-saga

  • 实现一个flat函数

    2019-12-02

    #es6

  • 谈谈 react-redux

    2019-11-29

    #redux

  • 谈谈 react-router 之 history

    2019-11-29

    #react-router

  • 谈谈 react-router 之 Link

    2019-11-29

    #react-router

  • 谈谈 react-router 之 懒加载

    2019-11-29

    #react-router

  • 谈谈 react-router 之 Hooks

    2019-11-29

    #react-router

  • 谈谈redux 中的 middleware

    2019-11-29

    #redux

  • 谈谈 react-router 之 match

    2019-11-29

    #react-router

  • 谈谈 react-router 之 Router

    2019-11-29

    #react-router

  • redux 综述

    2019-11-29

    #redux

  • redux API 解析

    2019-11-29

    #redux

  • 什么是reducer

    2019-11-20

    #redux

  • 自己实现一个深拷贝

    2019-11-14

    #es5

  • React受控组件

    2019-11-08

    #react

  • React Hook 动机

    2019-11-08

    #react

  • React 生命周期

    2019-11-08

    #react

  • React API

    2019-11-08

    #react

  • React 生命周期2

    2019-11-08

    #react

  • React 性能优化

    2019-11-08

    #react

  • React 高阶组件

    2019-11-08

    #react

  • React 深入JSX

    2019-11-08

    #react

  • React 错误边界

    2019-11-08

    #react

  • React 协调

    2019-11-08

    #react

  • React 代码分割

    2019-11-08

    #react

  • React 不使用jsx

    2019-11-08

    #react

  • React Refs and the DOM

    2019-11-08

    #react

  • React 问题解答

    2019-11-08

    #react

  • React Render Props

    2019-11-08

    #react

  • React 复习指南

    2019-11-08

    #react

  • React事件处理函数必须使用bind(this)的原因

    2019-11-08

    #react

  • React Refs 转发

    2019-11-08

    #react

  • React中元素与组件的区别

    2019-11-08

    #react

  • React Portals

    2019-11-08

    #react

  • 自己实现一个自己的promise

    2019-11-02

    #es6

  • 散列表-线性探查

    2019-11-01

    #数据结构

  • 散列表-分离链接

    2019-11-01

    #数据结构

  • 学习数据结构

    2019-10-22

    #数据结构

  • 如何实现一个lazyMan

    2019-10-15

    #es5

  • 谈谈原生的ajax

    2019-10-15

    #brower

  • 谈谈浏览器的宏任务和微任务(事件机制)

    2019-10-15

    #brower

  • es5中 constructor

    2019-10-14

    #es5

  • toString 的 隐式转化能力

    2019-10-14

    #es5

  • IntersectionObserver 实现懒加载

    2019-10-14

    #es5

  • toString 的 隐式转化能力

    2019-10-14

    #es5

  • 谈谈Vue整理的工作流程

    2019-10-08

    #vue#vue基础

  • window.onload

    2019-10-08

    #htmlDOM

  • 打印出html中所有的标签

    2019-10-08

    #htmlDOM

  • HTML DOM childNodes 属性

    2019-10-08

    #htmlDOM

  • typescript基本类型

    2019-09-29

    #typescript

  • 说出v-model跟async的区别

    2019-09-29

    #vue#vue 选项

  • 谈谈 Vue 中的响应式原理哦

    2019-09-18

    #vue#vue基础

  • 优化构建命令行的显示日志以及构建异常和中断处理

    2019-09-11

    #webpack

  • wepack 常见问题列表

    2019-09-11

    #webpack

  • 构建配置抽离成npm包的意义

    2019-09-11

    #webpack

  • npm piblish 基本流程

    2019-09-10

    #node#npm

  • JavaScript 中 exec() 方法详解

    2019-09-05

    #es5

  • vue key 的作用

    2019-08-30

    #vue

  • vue 组件化通信

    2019-08-30

    #vue

  • 为什么Vue实例化后,通过this.能获取到data内的数据

    2019-08-30

    #vue

  • es5 有哪几种继承方式

    2019-08-26

    #es5

  • 设计原则

    2019-08-20

    #设计模式

  • 代码分割 和 动态 import

    2019-08-13

    #webpack

  • 谈谈js的作用域连 和 执行环境

    2019-08-12

    #es5

  • 我们来谈谈一言难尽的js变量提升

    2019-08-12

    #es5

  • webpack中  Scope Hositing 使用和原理

    2019-08-05

    #webpack

  • webpack中 tree shaking(摇树优化)

    2019-08-05

    #webpack

  • ES6中的import()函数

    2019-08-02

    #es6

  • 谈谈 axios 和 ajax 的区别和各自的优缺点

    2019-08-02

    #es5

  • error 错误

    2019-08-02

    #es5

  • JavaScript中var、let、const区别?

    2019-08-02

    #es6

  • npm 常用命令大全

    2019-07-30

    #node#npm

  • nrm的作用与安装使用

    2019-07-30

    #node#npm

  • ts 常见问题总结

    2019-07-30

    #ts

  • webpack中 优化提取公共资源

    2019-07-30

    #webpack

  • webpack打包之使用source-map?

    2019-07-29

    #webpack

  • webpack打包之资源内联?

    2019-07-28

    #webpack

  • webpack中文件的监听

    2019-07-26

    #webpack

  • 关于Location对象

    2019-07-26

    #brower

  • 谈谈 URI 和 URL 的关系

    2019-07-26

    #brower

  • 谈谈 history API

    2019-07-26

    #brower

  • 一篇文章读懂RGB、HSL、Hex 网页色彩值

    2019-07-22

    #css

  • 谈谈 css中的 transition 过渡

    2019-07-21

    #css

  • 谈谈 css中的 transform 转换

    2019-07-21

    #css

  • 谈谈 css中的 居中

    2019-07-21

    #css

  • 冒烟测试

    2019-07-15

    #test

  • webpack 配置指南?

    2019-07-15

    #webpack

  • webpack构建之mode?

    2019-07-15

    #webpack

  • webpack解析CSS、Less和Sass ?

    2019-07-15

    #webpack

  • 为什么需要打包工具以及为什么选择wbepack?

    2019-07-10

    #webpack

  • Es6 Promise resolve 或者 reject 之后 还 需要 return 吗

    2019-07-02

    #es6

  • Es6 Promise 用法详解

    2019-07-02

    #es6

  • Es6 类的修饰 - 装饰器

    2019-07-02

    #es6

  • 关于table 中的标签 意义以及 table中各个属性的设置

    2019-06-28

    #css

  • 谈谈 Object.create()

    2019-06-26

    #es5

  • 数组快速排序

    2019-06-26

    #es5

  • 递归算法,js实现

    2019-06-26

    #es5

  • 关于算法中的时间复杂度的理解

    2019-06-26

    #数据结构

  • 学习stack

    2019-06-26

    #数据结构

  • 打印出 Html 中的所有标签

    2019-06-26

    #es5

  • 自己实现一个集合

    2019-06-26

    #数据结构

  • 自己实现一个字典

    2019-06-26

    #数据结构

  • 谈谈 柯里化

    2019-06-26

    #es5

  • 深拷贝和浅拷贝

    2019-06-26

    #es5

  • 函数节流与防抖

    2019-06-26

    #es5

  • async await 捕获promise reject error

    2019-06-26

    #es6

  • scss 入门

    2019-06-26

    #css

  • element UI、iview 等组件库修改样式不污染全局环境

    2019-06-26

    #css

  • 详解 ES6 class

    2019-06-26

    #es6

  • 谈谈Object.defineProperty

    2019-06-26

    #es6

  • 谈谈 Content-Type

    2019-06-26

    #http

  • 谈谈 正向代理和反向代理

    2019-06-26

    #http

  • js 垃圾回收

    2019-06-26

    #es5

  • 谈谈 Content-Type

    2019-06-26

    #http

  • 谈谈 闭包

    2019-06-26

    #es5

  • webpack3中 hash、chunkhash 和 contenthash 三者的区别

    2019-06-26

    #webpack

  • 快速排序

    2019-06-26

    #数据结构

  • 详解 ES6 class

    2019-06-26

    #es6

  • 谈谈webpack 中的plugin

    2019-06-26

    #webpack

  • css 命名规范 -- BEM 思想

    2019-06-26

    #css

  • HTML、CSS 和 JS 代码压缩

    2019-06-26

    #webpack

  • scss与sass的区别

    2019-06-26

    #css

  • JS模块规范:AMD、CMD、commonJS、ES6

    2019-06-26

    #es6

  • less 入门

    2019-06-26

    #css

  • 谈谈es6中的module

    2019-06-26

    #es6

  • webpack如何打包图片跟字体

    2019-06-26

    #webpack

  • 学习队列

    2019-06-26

    #数据结构

  • es5 构造函数

    2019-06-26

    #es5

  • 谈谈 js 的 call 和 apply

    2019-06-26

    #es5

  • webpack的热更新以及原理分析

    2019-06-26

    #webpack

  • 谈谈JS中的作用域问题

    2019-06-26

    #es5

  • 浅浅的谈一谈关于Vue 的生命周期

    2019-06-23

    #vue#vue基础

  • Vue的keep-alive用法

    2019-06-23

    #vue#vue基础

  • $attrs 和 $listeners的使用

    2019-06-23

    #vue#vue基础

  • 谈谈 Vue 中 的 computed

    2019-06-22

    #vue#vue基础

  • vue scoped scss 与深度作用选择器 /deep/

    2019-06-21

    #vue#vue基础

  • 前端常见问题和解决方案

    2019-06-20

    #代码规范

  • 谈谈 Vue 中的 自定义指令

    2019-06-20

    #vue#vue基础

  • 谈谈 Vue 中 的 组件

    2019-06-20

    #vue#vue基础

  • vue中is的作用

    2019-06-20

    #vue#vue基础

  • eslint 配置

    2019-06-20

    #代码规范

  • this.$refs 和 this.$el的作用和区别

    2019-06-20

    #vue#vue基础

  • 谈谈Vue中的插槽

    2019-06-19

    #vue#vue基础

  • 谈谈Vue中的递归组件

    2019-06-19

    #vue#vue基础

  • Vue中的provide/inject

    2019-06-19

    #vue#vue基础

  • vue 为什么组件的data要写成返回对象的函数

    2019-06-19

    #vue#vue基础

  • 怎么给 vue 写一个插件

    2019-06-19

    #vue#vue基础

  • 对于Vue这种MVVM设计模式的理解

    2019-06-19

    #vue#vue基础

  • 谈谈 vue 中 的 mixins

    2019-06-19

    #vue#vue基础

  • 谈谈 template 解决的痛点

    2019-06-19

    #vue#vue 选项

  • 谈谈 vue.component

    2019-06-19

    #vue#vue API

  • 谈谈 vue.directive

    2019-06-19

    #vue#vue API

  • 谈谈 vue.extend

    2019-06-19

    #vue#vue API

  • 谈谈 vue.filter

    2019-06-19

    #vue#vue API

  • Vue给对象新增属性(使用Vue.$set())

    2019-06-19

    #vue#vue API

  • 谈谈 Vue.nextTick

    2019-06-19

    #vue#vue API

  • 谈谈Vue中单元素/组件的过渡

    2019-06-19

    #vue#vue基础

  • $slots 跟 $scoped-slots 的对比

    2019-06-19

    #vue#vue 选项

  • 谈谈Vue中的函数式组件

    2019-06-19

    #vue#vue 选项

  • 谈谈el

    2019-06-19

    #vue#vue 选项

  • 谈谈Vue中的watch

    2019-06-19

    #vue#vue基础

  • 谈谈Vue中的render函数

    2019-06-19

    #vue#vue 选项

  • 在 vue-router 中利用钩子函数调用vuex中的数据

    2019-06-19

    #vue-router

  • 谈谈Vue的实例方法/生命周期

    2019-06-19

    #vue#vue 选项

  • 谈谈 vue 中的配置项 inheritAttrs

    2019-06-19

    #vue#vue 选项

  • vue中'. native'修饰符的使用

    2019-06-19

    #vue#vue 选项

  • 谈谈Vue的指令以及事件修饰符

    2019-06-19

    #vue#vue 选项

  • vue comments

    2019-06-19

    #vue#vue 选项

  • vue 实例属性

    2019-06-19

    #vue#vue 选项

  • 谈谈Vue的指令

    2019-06-19

    #vue#vue 选项

  • 谈谈model以及v-model指令

    2019-06-19

    #vue#vue 选项

  • 谈谈 vue-router 中的 router

    2019-06-19

    #vue-router

  • 谈谈Vue的实例方法/属性

    2019-06-19

    #vue#vue 选项

  • 谈谈 $parent, $children

    2019-06-19

    #vue#vue 选项

  • 谈谈 extends 和 mixins

    2019-06-19

    #vue#vue 选项

  • vue-router 中的 router-view

    2019-06-19

    #vue-router

  • Vue Router path 中通配符

    2019-06-19

    #vue-router

  • vue-router Router 构件项

    2019-06-19

    #vue-router

  • vue-router 中的 <router-link>

    2019-06-19

    #vue-router

  • 谈谈vue-router中的redirect

    2019-06-19

    #vue-router

  • vue-router的hash模式和history的区别

    2019-06-19

    #vue-router

  • vue-router的$route

    2019-06-19

    #vue-router

很惭愧<br><br>只做了一点微小的工作<br>谢谢大家