性能黄金法则:

只有10%~20%的最终用户响应时间花在了下载HTML文档上。其余的80%~90%时间花在了下载页面中的所有组件上。

提升加载速度的方式:

一、减少HTTP请求

(1).合并脚本 和样式表

将多个样式表或者脚本文件合并到一个文件中,可以减少HTTP请求的数量从而缩短效应时间。 不过:合并所有的样式文件或者脚本文件可能会导致在一个页面加载时加载了多于自己所需要的样式或者脚本,对于只访问该网站一个页面的人来说反而增加了下载量,所以大家应该自己权衡利弊。

(2).字体图标

(3).雪碧图

(4).图片地图

知识点链接:http://www.w3school.com.cn/tags/att_img_usemap.asp,将所有点击提交到同一个url,同时提交用户点击的x、y坐标,服务器端根据坐标映射响应

二、使用CDN

CDN(内容发布网络)是一组分布在多个不同地理位置的Web服务器,如果应用程序web服务器离用户更近,那么HTTP请求的响应时间将缩短。

三、使用缓存Expires和Cache-Control

浏览器在第一次访问页面时加载的资源会缓存起来,第二次访问判断在缓存中是否已有该资源并且有没有更新过,如果已有该资源且没有更新过,则去缓存去取,这样减少了下载资源的时间。原理上是通过HTTP Rquest Header中的 if-modified-since 和Response Headers中的last-modified来实现,HTTP请求把if-modified-sincede 时间传给服务端,服务端把last-modified时间与之对比,如果相同,则意味着文件没有改动,则返回304,浏览器则从缓存中获取资源,无需下载。虽然这种方法减少了已缓存资源的下载时间,但是仍然发起了一次http请求。
而HTTP的Expires和Cache-Control就是来免去该资源的http请求。
Cache-Control在服务端配置文件缓存有效期(3个月,1年...),有效期内读缓存数据,不HTTP请求。

expires在服务端配置,添加的是该资源过期的日期,浏览器会根据该过期日期与客户端时间对比,到期 了再重新读取,expires时间可能存在客户端时间跟服务端时间不一致的问题,最好与Cache-Control结合使用。更多详细请参考:https://www.jianshu.com/p/f331d5f0b979

四、对HTTP传输进行压缩

在HTTP请求中,accept-encoding: gzip, deflate, sdch, br是指客户端浏览器(这里是我的chrome浏览器)支持的压缩方式。参考Yahoo!工程师的说法,支持gzip的浏览器范围最广,使用gzip的压缩效果最佳。客户端不用任何配置,在服务端配置即可,服务器不同,配置方法也不尽相同。

Accept-Encoding: gzip,deflate...如果Web服务器看到请求中有这个头,就会使用客户端列出来的方法中的一种来进行压缩。

更多详情请参考:https://www.jianshu.com/p/74c10af7707d

代理缓存

五、样式表放头部

放在头部对于实际页面加载的时间并不能造成太大影响,但可以减少页面首屏出现的时间,使页面内容逐步呈现,改善用户体验,防止“白屏”。

我们总是希望页面能够尽快显示内容,为用户提供可视化的回馈,这对网速慢的用户来说是很重要的。

将样式表放在文档底部会阻止浏览器中的内容逐步出现。为了避免当样式变化时重绘页面元素,浏览器会阻塞内容逐步呈现,造成“白屏”。这源自浏览器的行为:如果样式表仍在加载,构建呈现树就是一种浪费,因为所有样式表加载解析完毕之前不需绘制任何东西

六、脚本放底部

与样式表相同,脚本放在底部对于实际页面加载的时间并不能造成太大影响,但是这会减少页面首屏出现的时间,使页面内容逐步呈现。

js的下载和执行会阻塞Dom树的构建(严谨地说是中断了Dom树的更新),所以script标签放在首屏范围内的HTML代码段里会截断首屏的内容。

因为脚本可能修改页面内容,因此浏览器会等待;另外,也是为了保证脚本能够按照正确的顺序执行,因为后面的脚本可能与前面的脚本存在依赖关系,不按照顺序执行可能会产生错误。

七、合理使用外部js/css

内联脚本或者样式可以减少HTTP请求,按理来说可以提高页面加载的速度。然而在实际情况中,当脚本或者样式是从外部引入的文件,浏览器就有可能缓存它们,从而在以后加载的时候能够直接使用缓存,而HTML文档的大小减小,从而提高加载速度。

这时候就要分情况来看,如果一个用户每个月只访问你的网站一两次,那么这种情况下内联将会更好。而如果该用户能够产生很多页面浏览量,那么缓存的样式和脚本将会极大减少下载的时间,提交页面加载速度。

八、减少DNS查找

当我们在浏览器的地址栏输入网址(譬如: www.linux178.com) ,然后回车,回车这一瞬间到看到页面到底发生了什么呢?

域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户

域名解析是页面加载的第一步,那么域名是如何解析的呢?见文章:(后面补上,or自行百度)

DNS也是开销,通常浏览器查找一个给定域名的IP地址要花费20~120毫秒,在完成域名解析之前,浏览器不能从服务器加载到任何东西。那么如何减少域名解析时间,加快页面加载速度呢?

当客户端DNS缓存(浏览器和操作系统)缓存为空时,DNS查找的数量与要加载的Web页面中唯一主机名的数量相同,包括页面URL、脚本、样式表、图片、Flash对象等的主机名。减少主机名的 数量就可以减少DNS查找的数量。

而减少唯一主机名的数量会潜在减少页面中并行下载的数量,这样减少主机名和并行下载的方案会产生矛盾,需要大家自己权衡。建议将组件放到至少两个但不多于4个主机名下,减少DNS查找的同时也允许高度并行下载。

九、懒加载

对于一些图片,费首屏的,后面scroll到的时候再加载

十、按需加载

模块化开发,只需加载用到的资源

十一、预加载

预加载是在浏览器空闲时请求将来可能会用到的页面内容(如图像、样式表和脚本)。使用这种方法,当用户要访问下一个页面时,页面中的内容大部分已经加载到缓存中了,因此可以大大改善访问速度。

前端提升页面加载速度相关推荐

  1. 提升页面加载速度的方案

    性能优化是一个庞大而相对复杂的知识,如今互联网发展迅速,市场竞争激烈,在这样的环境下一个网站的性能决定着一个项目的好与坏.为了降低软件项目的跳出率.提高访问速度.减少加载时间.带给用户流畅的终端体验, ...

  2. web前端页面性能优化(提升页面加载速度)

    我们都知道,对于web应用来说性能很重要,然而性能的优化相关知识非常庞大而复杂,对于性能优化我们需要做些什么,或者瓶颈是什么通常是我们不太了解的.(当然技术大牛除外) 通过查阅相关资料,了解到了一些关 ...

  3. instant.page —— 一个 JS 脚本实现网站预加载,提升页面加载速度

    instant.page 使用即时预加载技术,在用户点击之前预先加载页面.当用户的鼠标悬停在一个链接上超过 65 毫秒时,浏览器会对此页面进行预加载,当用户点击链接后,就从预加载的缓存中直接读取页面内 ...

  4. 前端性能优化:如何提高页面加载速度和用户体验

    第一章:介绍 当今互联网时代,网站的性能对于用户体验至关重要.一个快速加载的网页不仅能提高用户的满意度,还能增加页面的转化率.而在前端开发中,性能优化是一个永恒的话题.本篇博客将为大家分享一些关于前端 ...

  5. 汇总:web前端优化网页加载速度

    前言: 网页的加载流程:打开一个网页,会先拉取一个html页面,然后浏览器解析了这个html页面后,会根据页面的内容,去拉取javascript.css和图片文件,最终根据这些文件,将页面渲染出来.影 ...

  6. 如何优化页面加载速度

    小于2秒的页载入时间被认为是优良的,而且高达4秒是可接受的.而大于5秒的页面载入时间不仅影响你网站的搜索引擎排名,还会严重影响用户体验.这里列出了10种方法,可以快速提升你网站的性能. 1. 优化图像 ...

  7. WEB前端性能优化,提高页面加载速度

    可能有人会说:网站的性能是后端工程师的事情,与前端并无多大关系.我只能说,too young too simple.事实上,只有10%~20%的最终用户响应时间是用在从Web服务器获取HTML文档并传 ...

  8. 如何提高页面加载速度 || 前端的性能优化 || 浏览器渲染页面的过程是什么

    1.降低请求量 ​ ① 合并资源,减少http请求数量. ​② lazyLoad,如图片懒加载.分批加载,每次只加载一部分. ​ ③ 使用字体图标或CSS绘制,来代替部分图片. 2.加快请求速度 ​ ...

  9. web 页面加载速度优化实战-100% 的飞跃提升

    前言 一个网站的加载速度有多重要? 反正我相信之前来 博主网站 的人至少有 50% 在加载完成前关闭了本站. 为啥捏? 看图 首页完整加载时间 8.18s,看来能进来看博主网站的人都是真爱呀,哈哈. ...

最新文章

  1. 调研|我们是否能够实现并应该发展强人工智能?
  2. linux的简单面试题,收集的一些简单的UNIX/Linux面试题
  3. 技术名词API/SDK/DLL的非技术层面理解
  4. mysql 拼接sql批量执行_MySql 学习之 一条更新sql的执行过程
  5. 安装MAMP后的控制台访问mysql问题
  6. LaTeX的历史:图灵奖得主1977年开启的计划,引发学术圈重大变革
  7. 论文阅读|How Does Batch Normalizetion Help Optimization
  8. ScaleAnimation缩放动画Demo
  9. 杂记:Atmel sama5d3 DMA Controller (DMAC)
  10. Python采集喜马拉雅音频数据详解
  11. Three.js(2)--->基础篇-Helpers(辅助对象/辅助线)
  12. 8xmax升级鸿蒙,配置设计各种寒酸:Redmi10X开箱
  13. !Latex Error: File ‘XXXXX.sty‘ not found.
  14. Android自定义输入法软键盘
  15. android调用chrome,android webview调用使用chrome浏览器
  16. csdn上怎样可以获得金币?
  17. [转]Unix下针对邮件,搜索,网络硬盘等海量存储的分布式文件系统项目(关于GFS、MogileFS分布式文件系统邮件列表)
  18. C++ 使用new申请内存
  19. PTA 7211扫雷游戏
  20. cherrytree笔记_如何使用CherryTree做笔记

热门文章

  1. 跟我学习Spring Security--在线宠物商店开发(二)
  2. ubuntu mysql 二进制安装_Linux 从二进制版安装 MySQL 5
  3. 国内各银行信用卡取现费用及额度比较
  4. LEADTOOLS 入门教程: 使用 OCR 将图像转换为可搜索的 PDF - C# .NET Core
  5. 『算法实习』周记(二)
  6. com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:Unrecognized field
  7. Dell笔记本一关机就正在准备windows,无法正常关机
  8. 快速开发Android
  9. 另类破解xp密码办法
  10. x86 上安装 Snow Leopard 及 搭建 Xcode 全程快播