优化网站性能规则菜鸟教程网前端性能优化策略【网络加载、页面渲染】_性能基础入门

网络加载类减少 HTTP 资源请求次数合并静态资源图片、JavaScript 或 CSS 代码,减少页面请求数和资源请求消耗避免重复的资源,防止增加多余请求减小 HTTP 请求大小减少没必要的图片、JavaScript、CSS 及 HTML 代码对文件进行压缩优化使用 gzip 等方式压缩传输文件将 CSS 或 JavaScript 放到外部文件中,避免使用

优化网站性能规则菜鸟教程网前端性能优化策略【网络加载、页面渲染】

网络加载类

减少 HTTP 资源请求次数

  • 合并静态资源图片、JavaScript 或 CSS 代码,减少页面请求数和资源请求消耗
  • 避免重复的资源,防止增加多余请求

减小 HTTP 请求大小

  • 减少没必要的图片、JavaScript、CSS 及 HTML 代码
  • 对文件进行压缩优化
  • 使用 gzip 等方式压缩传输文件

将 CSS 或 JavaScript 放到外部文件中,避免使用 <style> 或 <script> 标签直接引入

  • 在 HTML 文件中引用外部资源可以有效利用浏览器的静态资源缓存

避免页面中空的 href 和 src

  • 当 <link> 标签的 href 属性为空,或 <script>、<img>、<iframe> 标签的 src 属性为空时,浏览器在渲染的过程中仍会将 href 属性或 src 属性中的空内容进行加载,直至加载失败,这样就阻塞了页面中其他资源的下载进程,而且最终加载到的内容是无效的,因此要尽量避免
// 不推荐
<img src="" alt="photo">
<a href="">点击链接</a>

为 HTML 指定 Cache-Control 或 Expires

  • 为 HTMl 内容设置 CaChe-Control 或 Expires 可以将 HTML 内容缓存起来,避免频繁向服务器端发送请求。
<meta http-equiv="Cache-Control" content="max-age=7200" />
<meta http-equiv="Expires" content="Mon, 20 Jul 2016 23:00:00 GMT" />

合理设置 Etag 和 Last-Modified

  • 合理设置 Etag 和 Last-Modified 使用浏览器缓存,对于未修改的文件,静态资源服务器会向浏览器端返回304,让浏览器从缓存中读取文件,减少 Web 资源下载的带宽消耗并降低服务器负载
<meta http-equiv="last-modified" content="Mon, 03 Oct 2016 17:45:57 GMT" />

减少页面重定向

  • 页面每次重定向都会延长页面内容返回的等待延时,一次重定向大约需要600毫秒的时间开销,为了保证用户尽快看到页面内容,要尽量避免页面重定向

使用静态资源分域存放来增加下载并行数

  • 浏览器在同一时刻向同一个域名请求文件的并行下载数是有限的,因此可以利用多个域名的主机来存放不同的静态资源,增大页面加载时资源的并行下载数,缩短页面资源加载的时间

使用静态资源 CDN 来存储文件

  • 如果条件允许,可以使用 CDN 网络加快同一个地理区域内重复静态资源文件的响应下载速度,缩短资源请求时间

使用 CDN Combo 下载传输内容

  • CDN Combo 是在 CDN 服务器端将多个文件请求打包成一个文件的形式来返回的技术,这样可以实现 HTTP 连接传输的一次性复用,减少浏览器的 HTTP 请求数,加快资源下载速度

例如同一个域名 CDN 服务器上的 a.js,b.js,c.js 就可以按如下方式在一个请求中下载:

优化网站性能规则菜鸟教程网前端性能优化策略【网络加载、页面渲染】_性能基础入门

<script src="//cdn.domain.com/path/a.js,b.js,c.js"></script>

使用可缓存的 AJAX

  • 可以返回内容相同的请求,没必要每次都直接从服务器端拉取,合理使用 AJAX 缓存能加快 AJAX 响应速度来减轻服务器压力
$.ajax({
   url: url,
   type: 'get',
   cache: true, // 推荐使用缓存
   data: {},
   success() {
       // ....
   },
   error() {
       // ...
   }
});

使用 GET 来完成 AJAX 请求

  • 使用 XMLHttpRequest 时,浏览器中的 POST 方法发送请求首先发送文件头,然后发送 HTTP 正文数据,而使用 GET 时只发送头部,所以在拉取服务端数据时使用 GET 请求效率更高
$.ajax({
   url: url,
   type: 'get', // 推荐使用 get 完成请求
   data: {},
   success() {
       // ....
   },
   error() {
       // ...
   }
});
  • HTTP 请求通常默认带上浏览器的 Cookie 一起发送给服务器,所以在非必要的情况下,要尽量减少 Cookie 来减小 HTTP 请求的大小
  • 对应静态资源,尽量使用不同的域名来存放,因为 Cookie 默认不能跨域的,这样就做到了不同域名下静态资源请求的 Cookie 隔离

缩小 favicon.ico 并缓存

  • 有利于 favicon.ico 的重复加载,因为一般一个 Web 应用的 favicon.ico 是很少改变的

推荐使用异步 JavaScript 资源

  • 异步的 JavaScript 资源不会阻塞文档解析,所以允许在浏览器中优先渲染页面,延后加载脚本执行。

例如:

<script src="main.js" defer></script>
<script src="main.js" async></script>

消除阻塞渲染的 CSS 及 JavaScript

  • 对于页面中加载时间过长的 CSS 或 JavaScript 文件,需要进行合理拆分或延后加载,保证关键路径的资源能快速加载完成

避免使用 CSS import 引用加载 CSS

  • CSS 中的 @import 可以从另一个样式文件引入样式,但应该避免这种用法,因为这样会增加 CSS 资源加载的关键路径长度,带有 @import 的 CSS 样式需要在 CSS 文件串行解析到 @import 时才会加载另外的 CSS 文件,大大延后 CSS 渲染完成的时间

页面渲染类

把 CSS 资源引用放到 HTML 文件顶部

  • 一般推荐将所有 CSS 资源尽早指定在 HTML 文档 中,这样浏览器可以优先下载 CSS 并尽早完成页面渲染

JavaScript 资源引用放到 HTML 文件底部

  • JavaScript 资源放到 HTML 文档底部可以防止 JavaScript 的加载和解析执行对页面渲染造成阻塞,这是因为 JavaScript 资源默认是解析阻塞的,除非被标记为异步或者通过其他的异步方式加载

不要在 HTML 中直接缩放图片

  • 在 HTML 中直接缩放图片会导致页面的重排重绘,此时可能会使页面中的其他操作产生卡顿,因此要尽量减少在页面中直接进行图片缩放

减少 DOM 元素数量和深度

  • HTML 中标签元素越多,标签的层级越深,浏览器解析 DOM 并绘制到浏览器中所花的时间就越长,所以尽可能保持 DOM 元素简洁和层级较少

尽量避免使用 <table>、<iframe> 等慢元素

  • <table>内容的渲染是将 table 的 DOM 渲染树全部生成完成并一次性绘制到页面上的,所以在长表格渲染时很耗性能,应该尽量避免使用它,可以考虑使用列表元素 <ul> 代替
  • 尽量使用异步的方式动态添加 iframe,因为 iframe 内资源的下载进程会阻塞父页面静态资源的下载与 CSS 及 HTML DOM 的解析

避免运行耗时的 JavaScript

  • 长时间运行的 JavaScript 会阻塞浏览器构建 DOM 树、DOM 渲染树、渲染页面。所以,任何与页面初次渲染无关的逻辑功能都应该延迟加载执行,这和 JavaScript 资源的异步加载思路是一致的

避免使用 CSS 表达式或 CSS 滤镜

  • CSS 表达式或 CSS 滤镜的解析渲染速度是比较慢的,在有其他解决方案的情况下应该尽量避免使用
// 不推荐
.opacity {
    filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50);
}
海计划公众号
(0)
上一篇 2020/04/05 01:41
下一篇 2020/04/05 01:41

您可能感兴趣的内容

  • Cubism.js入门指南_用于可视化时间线的d3插件

    Cubism.js入门指南 官方网址:http://square.github.com/cubism/ GitHub:https://github.com/square/cubis…

    2020/03/06
  • ES6 展开操作符的几个妙用小白入门_操作符零基础入门

    ES6 展开操作符的几个妙用小白入门 ES6 新增了…操作符,通常用于在函数中提取剩余参数和展开数组。但其实它的用途不止于此,本文就介绍几个技巧,用它来操作 JavaS…

    2020/03/20
  • 高清手机/电脑壁纸类网站推荐零基础入门_手机小白指南

    经常就为了找一些分辨率高的壁纸而费尽心思,目前的手机端的壁纸分辨率也是参差不齐,质量高的数量少,数量多的质量差,今天就分享几个我感觉不错的壁纸(摄影)网站吧,可以勾选分辨率选择壁纸。​wallheaven官网:https://alpha.wallhaven.cc/关键词:创意、艺术、动漫、科幻、视觉适合用户:摄影师、插画师、漫画家推荐指数:★★★★★必应壁纸

    2020/03/30
  • audio标签以及audio对象入门教程_audio小白教程

    一.audio标签简单语法属性属性值描述autoplay如果出现该属性,则音频在就绪后马上播放。controls如果出现该属性,则向用户显示控件,比如播放按钮。loop如果出现该属性,则每当音频结束时重新开始播放。preload如果出现该属性,则音频在页面加载时进行加载,并预备播放。如果使用 “autopl

    2020/03/24
  • baffle.js菜鸟知识_文本动态混淆与显示效果

    baffle.js菜鸟知识 官方网址:https://camwiegert.github.io/baffle/ GitHub:https://github.com/camwiege…

    2020/03/06
  • 网站打开速度优化入门基础如何提高网页访问速度技巧方法总结_优化使用帮助

    网站的加载速度不仅影响着用户体验,也会影响搜索引擎的排名,在百度推出“闪电算法”以来,将网站首屏打开速度被列入优化排名行列,并明确指定打开时间为 2 秒。作为前端开发的我们需要如果来优化网站的打开速度呢?下面就整理挖掘出很多细节上可以提升性能的东西分享给大家优化网站性能的14条规则:1. 尽可能的减少 HTTP 的请求数 [content] 2. 使用 CD

    2020/04/05
  • CSS优先级的两种理解方式使用帮助_优先级基础入门

    方式一:值相加我们先去MDN看看官方的解释:优先级是如何计算的?优先级就是分配给指定的 CSS 声明的一个权重,它由 匹配的选择器中的 每一种选择器类型的 数值 决定。而当优先级与多个 CSS 声明中任意一个声明的优先级相等的时候,CSS 中最后的那个声明将会被应用到元素上。当同一个元素有多个声明的时候,优先级才会有意义。因为每一个直接作用于元素的 CSS

    2020/03/20
  • JS算法题之盛最多水的容器教程视频_算法题使用说明

    题目描述给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3

    2020/03/29
  • 了解一下第三方登录小白攻略_登录入门百科

    在我们的日常生活中,登录一个网站或 APP 时经常会选择微信、 QQ 或其他账号登录。这种情况我们就称为第三方登录。那么第三方登录的实现机制是什么呢?基础概念首先需要了解两个概念:OpenID 和 OAuthOpenID:OpenID是一个去中心化的网上身份认证系统。他是网站或应用中唯一对应用户身份的标识,网站或应用可将此ID进行存储,便于用户下次登录时辨识

    2020/03/30
  • web前端性能优化指南指南教程_性能基础知识

    前端需要性能优化么?性能优化一直以来都是前端工程领域中的一个重要部分。很多资料表明,网站应用的性能优化对于提高用户留存、转化率等都有积极影响。可以理解为,提升你的网站性能,就是提升你的业务数据(甚至是业务收入)。性能优化广义上包含前端优化和后端优化。后端优化的关注点更多的时候是在增加资源利用率、降低资源成本以及提高稳定性上。相较于后端,前端的性能优化会更直接

    2020/03/24
  • 网站建设是应注意的几点要素?小白攻略_网站使用说明

    网站建设公司在进行域名的命名时,要考虑到域名与企业的名称、标识相统一。网站建设者需要确定自己需要传达的主要信息,等位置合理地组织起来。企业建站是整体营销战略的一部分,为的是能卖产品。稳定的空间或服务器都对网站的优化起着很大的作用,最好选择双线空间,防单点故障,可以确保网站安全快速的运行最重要的是别贪便宜,应注重提供商的服务。网站建设未必很艰难,一个好的域名应

    2020/03/23
  • ant-design-pro-vue小白教程_基于 Ant Design of Vue 实现的 Ant Design Pro

    ant-design-pro-vue小白教程 官方网址:https://pro.loacg.com GitHub:https://github.com/sendya/ant-des…

    2020/03/07
  • socketstream使用帮助实时Web应用程序的框架

    socketstream基础入门 官方网址:https://socketstream.com/ GitHub:https://github.com/socketstream/soc…

    2020/03/05
  • javascript如何实现图片隐藏?入门教程_图片基础知识入门

    javascript中可以通过将图片display属性设置为none实现图片隐藏。display属性设置元素如何显示,其语法为Object.style.display=value。JavaScript中实现通过点击显示隐藏图片代码:把图片的display设为none,触发点击事件时,display变为blockimg {width: 400px

    2020/03/22
  • 12个HTML和CSS必须知道的重点难点问题小白知识_css基础小白攻略

    这12个问题,基本上就是HTML和CSS基础中的重点难点了,也是必须要弄清楚的基本问题,其中定位的绝对定位和相对定位到底相对什么定位?这个还是容易被忽视的,浮动也是一个大坑,有很多细节。这12个知识点是我个人认为的,下面我们就来看看这12个知识点。1.怎么让一个不定宽高的 DIV,垂直水平居中?使用Flex只需要在父盒子设置:display: flex; j

    2020/03/29
  • 关于 Node.js 里 ES6 Modules 的一次更新说明教程视频_node基础知识

    几个月前,我写了一篇文章来描述 Node.js 现存的 CommonJS 模块和新的 ES6 模块系统的许多不同,也说明了在 Node.js 内核中实现这个新模型的内在的一些挑战。现在,我想分享一下关于这件事情的进展情况。明白你什么时候该知道你需要知道的东西在这之前,如果你还没准备好,你可以花一点时间来看一下我之前的描述这两个模块架构上存在许多根本区别的文章

    2020/04/06