前端页面的性能优化

减少HTTP请求

文件合并

合并css或js文件使要下载的文件数减少

css sprites

使用图片精灵将大量的背景图片整合到一张图片,然后用background-imagebackground-position控制背景图片的位置定位到要显示的图片,适用于数量多,体积小的图表等图片。

行内图片(base64格式)

将图片转化为base64格式直接嵌入html内部

服务端设计配置

跨域分离组件

分离组件可以最大化并行下载,但要确保只用不超过2-4个域,因为存在DNS查找的代价。例如,可以把HTML和动态内容部署在www.example.org,而把静态组件分离到static1.example.orgstatic2.example.org

减少DNS查询(较少主机数量)

当在浏览器导航栏中输入网站地址时,浏览器会按照浏览器DNS缓存、计算机DNS缓存、DNS服务器的顺序以此查找与域名相映射的IP。

DNS查找数与页面主机数相同,较少主机数就可以较少DNS查找数,但是减少主机数也减少了页面组件能够并行下载的数量。因此找到一个平衡值可以兼顾两者的需要。2-4个主机名是同时减少DNS查找和允许高并发下载的折中方案。

避免重定向

重定向会拖慢用户体验,在用户和HTML文档之间插入重定向会延迟页面上的所有东西,页面无法渲染,组件也无法下载,直到新的文档被送到浏览器。

压缩组件资源

支持压缩的Accept-Encoding HTTP请求头。

Content-Encoding响应头

尽可能多地用gzip压缩减少资源体积。

使用CDN(内容分发网络)

内容分发网络(CDN)是一组分散在不同地理位置的web服务器,用来给用户更高效地发送内容。

使用缓存

使用缓存可以避免重复下载资源,加快响应时间

设置响应头Expires

Expires 头指定了一个日期/时间, 在这个日期/时间之后,HTTP响应被认为是过时的;在这之前的时间都可以使用缓存。

通用消息头cache-control(单项指令,意味着在响应里设置的指令,在请求中不用包含相同的指令。)

可以指定多项配置控制缓存是否可用、以及可用时间、或者根据验证器判断缓存是否可用。可以覆盖expires的设置。

响应头Last-Modified/请求头If-Modified-Since

由于精确度比 ETag 要低,所以这是一个备用机制。指定服务器资源的下次更新时间,在这之前都可以使用缓存。

响应头ETag/请求头If-None-Match

服务器接收到请求时根据If-None-Match的验证码判断资源是否已改变,如果给定URL中的资源更改,则一定要生成新的Etag值,然后返回给客户端。

前端设计配置

延迟加载组件

JavaScript是分隔onload(资源加载完毕)事件之前和之后的一个理想选择。例如,如果有JavaScript代码和支持拖放以及动画的库,这些都可以先等会儿,因为拖放元素是在页面最初渲染之后的。其它可以延迟加载的部分包括隐藏内容(在某个交互动作之后才出现的内容)和折叠的图片。

预加载组件

通过预加载组件可以充分利用浏览器空闲的时间来请求将来会用到的组件(图片,样式和脚本)。用户访问下一页的时候,大部分组件都已经在缓存里了,所以在用户看来页面会加载得更快。

减少DOM元素数量

一个复杂的页面意味着要下载更多的字节,dom数的生成也会受到影响,而且用JavaScript访问DOM也会更慢。

尽量少使用iframe

  • 代价高昂,即使是空白的iframe
  • 阻塞页面加载
  • 非语义

把JavaScript和CSS放到外面

用外部文件可以让页面更快,因为JavaScript和CSS文件会被缓存在浏览器。

HTML文档中的行内JavaScript和CSS在每次请求该HTML文档的时候都会重新下载。

这样做减少了所需的HTTP请求数,但增加了HTML文档的大小。 而且另一方面,如果JavaScript和CSS在外部文件中,并且已经被浏览器缓存起来了,那么我们就成功地把HTML文档变小了,而且还没有增加HTTP请求数。

压缩JavaScript和CSS

从代码中去除不必要的字符以减少大小,从而提升加载速度。代码最小化就是去掉所有注释和不必要的空白字符(空格,换行和tab)

对Ajax用GET请求

浏览器的POST请求是通过一个两步的过程来实现的:先发送HTTP头,在发送数据。所以最好用GET请求,它只需要发送一个TCP报文(除非cookie特别多)。

css部分

把样式表放在顶部

把样式表放到文档的HEAD部分能让页面看起来加载地更快。这是因为把样式表放在head里能让页面逐步渲染。

避免使用CSS表达式

用CSS表达式动态设置CSS属性,是一种强大又危险的方式。从IE5开始支持,但从IE8起就不推荐使用了。

选择<link>舍弃@import

@import的导入方式相当于在文档底部引入css文件,不利于页面的加载体验

js部分

去除重复脚本

重复脚本会创建不必要的HTTP请求,执行无用的JavaScript代码,而影响页面性能。

尽量减少DOM访问

用JavaScript访问DOM元素是很慢的,所以,为了让页面反应更迅速,应该:

  • 缓存已访问过的元素的索引
  • 先“离线”更新节点,再把它们添到DOM树上
  • 避免用JavaScript修复布局问题

使用事件委托

有时候感觉页面反映不够灵敏,是因为有太多频繁执行的事件处理器被添加到了DOM树的不同元素上。事件能够冒泡,所以可以捕获事件并得知哪个按钮是事件源。

把脚本放在底部

脚本会阻塞并行下载,HTTP/1.1官方文档建议浏览器每个主机名下并行下载的组件数不要超过两个,如果图片来自多个主机名,并行下载的数量就可以超过两个。如果脚本正在下载,浏览器就不开始任何其它下载任务,即使是在不同主机名下的。

但是如果脚本是用document.write插入到页面内容中的,就没办法再往下移了。

用推迟(deferred)脚本,有DEFER属性的脚本意味着不能含有document.write,并且提示浏览器告诉他们可以继续渲染。

图片

优化选择图片

尝试把GIF格式转换成PNG格式,看看是否节省空间。在所有的PNG图片上运行pngcrush(或者其它PNG优化工具)

优化CSS Sprite

  • 在Sprite图片中横向排列一般都比纵向排列的最终文件小
  • 组合Sprite图片中的相似颜色可以保持低色数,最理想的是256色以下PNG8格式
  • “对移动端友好”,不要在Sprite图片中留下太大的空隙。虽然不会在很大程度上影响图片文件的大小,但这样做可以节省用户代理把图片解压成像素映射时消耗的内存。100×100的图片是1万个像素,而1000×1000的图片就是100万个像素了

尽量使用尺寸刚好满足需求的图片

不要因为在HTML中可以设置宽高而使用本不需要的大图。如果需要

<img width="100" height="100" src="mycat.jpg" alt="My Cat" />

那么图片本身(mycat.jpg)应该是100x100px的,而不是去缩小500x500px的图片。

用小的可缓存的favicon.ico(P.S. 收藏夹图标)

favicon.ico是放在服务器根目录的图片,它会带来一堆麻烦,因为即便你不管它,浏览器也会自动请求它,所以最好不要给一个404 Not Found响应。而且只要在同一个服务器上,每次请求它时都会发送cookie,此外这个图片还会干扰下载顺序,例如在IE中,当你在onload中请求额外组件时,将会先下载favicon。

避免图片src属性为空

图片src属性为空会导致浏览器向服务器发送另一个请求。

Cookie

给Cookie减肥

发送cookie也会影响性能,所以保证cookie尽可能的小,以最小化对用户响应时间的影响。

  • 清除不必要的cookie
  • 保证cookie尽可能小,以最小化对用户响应时间的影响
  • 注意给cookie设置合适的域级别,以免影响其它子域
  • 设置合适的有效期,更早的有效期或者none可以更快的删除cookie,提高用户响应时间

把组件放在不含cookie的域下

当浏览器发送对静态资源的请求时,cookie也会一起发送,而服务器根本不需要这些cookie。所以它们只会造成没有意义的网络通信量,应该确保对静态组件的请求不含cookie。可以创建一个子域,把所有的静态组件都部署在那儿。

有一点需要注意:如果不知道应该用example.org还是www.example.org作为主页,可以考虑一下cookie的影响。省略www的话,就只能把cookie写到*.example.org,所以因为性能原因最好用www子域,并且把cookie写到这个子域下。

www是一个主域的二级子域,但指向的还是主域。

移动端

保证所有组件都小于25K

这个限制是因为iPhone不能缓存大于25K的组件,注意这里指的是未压缩的大小。这就是为什么缩减内容本身也很重要,因为单纯的gzip可能不够。

把组件打包到一个复合文档里

把各个组件打包成一个像有附件的电子邮件一样的复合文档里,可以用一个HTTP请求获取多个组件(记住一点:HTTP请求是代价高昂的)。用这种方式的时候,要先检查用户代理是否支持(iPhone就不支持)。

时间: 2024-12-16 06:48:17

前端页面的性能优化的相关文章

前端工程与性能优化

每个参与过开发企业级 web 应用的前端工程师或许都曾思考过前端性能优化方面的问题.我们有雅虎 14 条性能优化原则,还有两本很经典的性能优化指导书:<高性能网站建设指南>.<高性能网站建设进阶指南>.经验丰富的工程师对于前端性能优化方法耳濡目染,基本都能一一列举出来.这些性能优化原则大概是在 7 年前提出的,对于 web 性能优化至今都有非常重要的指导意义. 然而,对于构建大型 web 应用的团队来说,要坚持贯彻这些优化原则并不是一件十分容易的事.因为优化原则中很多要求与工程管理

前端常见的性能优化

前端常见的性能优化 1.减少HTTP请求次数和请求的大小 雪碧图(图片精灵) 图片base64 (webpack中可以配置) 尽量使用字体图标或者SVG等矢量图 减少HTTP请求次数或者减少请求内容的大小 渲染更快:因为它们是基于代码渲染的,而对于位图(png/jpg/gif)是需要先把图片编码再渲染 不容易失真变形 图片懒加载(延迟加载) 音频取消预加载 preload = ' none' 这样可以增加第一次渲染页面的速度,当需要播放的时候在加载 再客户端和服务器进行信息交互的时候,对于多项数

stb前端开发js性能优化总结

js性能优化 javascript是一种解释型语言,性能无法达到和C.C++等编译语言的水平,但还是有一些方法来改进. 1.循环 JavaScript中的循环方式有for(;;).while().for(in)3种.其中for(in)的效率极差,因为for(in)执行过程中需要查询散列键.for(;;)和while()比较,while循环的效率要优于for(;;). 2.局部变量和全局变量 局部变量的访问速度更快,因为全局变量其实是全局对象的成员,而局部变量是放在函数的堆栈当中的. 3.不使用e

前端project与性能优化(长文)

原文链接:http://fex.baidu.com/blog/2014/03/fis-optimize/ 每一个參与过开发企业级 web 应用的前端project师也许都曾思考过前端性能优化方面的问题.我们有雅虎 14 条性能优化原则.还有两本非常经典的性能优化指导书:<高性能站点建设指南>.<高性能站点建设指南>.经验丰富的project师对于前端性能优化方法耳濡目染.基本都能一一列举出来.这些性能优化原则大概是在 7 年前提出的.对于 web 性能优化至今都有很重要的指导意义.

web前端9大性能优化方案汇总

网页的性能问题是产品开发过程中的一个重要的环节,在产品成功地把功能实现后,性能能好与坏就直接影响了用户体验,以至于影响了产品的成败! 作为web前端开发者,对前端部分进行性能上的优化,是责无旁贷,刻不容缓的工作.下面简介一下9种性能优化方案. 一.罪魁祸首是http请求 一般网页,80%的响应时间花在下载网页内容(images, stylesheets, javascripts, scripts, flash等).减少请求次数是缩短响应时间的关键!可以通过简化页面设计来减少请求次数,但页面内容较

前端积累-----网页性能优化

写在前面:文章转自网络 英文原版链接 ,若是觉得本文哪里不好还请指出,以便及时修改 目录(分7类,共35条): [内容]尽量减少HTTP请求数 [服务器]使用CDN(Content Delivery Network) [服务器]添上Expires或者Cache-Control HTTP头 [服务器]Gzip组件 [css]把样式表放在顶部 [js]把脚本放在底部 [css]避免使用CSS表达式 [js, css]把JavaScript和CSS放到外面 [内容]减少DNS查找 [js, css]压

全方位分析web前端如何进行性能优化

前言: 最近刚刚完成项目,空闲一段时间,想起之前有被问起怎么对前端进行性能优化,自己也是脑中零零散散的总不成体系,现特来总结,欢迎补充指教. 1.整体资源 (1)js.css源码压缩 (2)css文件放到文档顶部,js 文件放到文档底部 因为浏览器渲染网页是自上而下的,用户第一眼见到的是页面,先加载页面相关的提高页面加载速度,另外避免js在页面没有完全加载完成操作DOM带来错误 (3)进行CDN托管(具体可参看https://div.io/topic/930) (4)data缓存 2.css (

前端知识总结--性能优化

前端性能优化方案大体分为网络传输优化和页面内容优化, 网络方面 1.减少http请求 合并js文件 合并css文件 雪碧图的使用(css sprite) 使用base64表示简单的图片 2.减小资源体积 gzip压缩 js混淆 css压缩 图片压缩 3.使用缓存 DNS缓存 CDN部署与缓存 http缓存 页面方面 1.优化网页渲染 css的文件放在头部,js文件放在尾部或者异步 尽量避免內联样式 2.DOM操作优化 避免在document上直接进行频繁的DOM操作 使用classname代替大

前端日常工作性能优化条例

在当前,网页上越来越重视用户体验,其中一个重要的前提就是访问速度.前端是庞大的,包括 HTML. CSS. Javascript.Image .等等各种各样的资源.前端优化是复杂的,针对方方面面的资源都有不同的方式.至少80%的最终用户响应时间花在了页面中的组件(图片.脚本.样式表). 页面方面优化 一.      减少HTTP请求 改善响应时间的最简单途径就是减少组件的数量,并由此减少HTTP请求的数量. 1 :CSS Sprites将多个图片文件合并成一个图片,利用css 的backgrou