前端性能优化知识,包括css和js

作者:野次
链接:http://www.zhihu.com/question/33032042/answer/95948831
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

1. 减少HTTP请求次数

尽量合并图片、CSS、JS。比如加载一个页面,如果有5个css文件的话,那么会发出5次http请求,这样会让用户第一次访问你的页面的时候会长时间等待。而如果把这个5个文件合成一个的话,就只需要发出一次http请求,节省网络请求时间,加快页面的加载。

2. 使用CDN

网站上静态资源即css、js全都使用cdn分发,图片亦然。

3. 避免空的src和href

当link标签的href属性为空、script标签的src属性为空的时候,浏览器渲染的时候会把当前页面的URL作为它们的属性值,从而把页面的内容加载进来作为它们的值。所以要避免犯这样的疏忽。

 

4. 为文件头指定Expires

Exipres是用来设置文件的过期时间的,一般对css、js、图片资源有效。 他可以使内容具有缓存性,这样下回再访问同样的资源时就通过浏览器缓存区读取,不需要再发出http请求。如下例子:

新浪微博的这个css文件的Expires时间是2016-5-04 09:14:14.


5. 使用gzip压缩内容

gzip能够压缩任何一个文本类型的响应,包括html,xml,json。大大缩小请求返回的数据量。

6. 把CSS放到顶部

网页上的资源加载时从上网下顺序加载的,所以css放在页面的顶部能够优先渲染页面,让用户感觉页面加载很快。

7. 把JS放到底部

加载js时会对后续的资源造成阻塞,必须得等js加载完才去加载后续的文件 ,所以就把js放在页面底部最后加载。

8. 避免使用CSS表达式

举个css表达式的例子
font-color: expression( (new Date()).getHours()%3 ? “#FFFFFF" : “#AAAAAA" );
这个表达式会持续的在页面上计算样式,影响页面的性能。并且css表达式只被IE支持。

9. 将CSS和JS放到外部文件中

目的是缓存文件,可以参考原则4。 但有时候为了减少请求,也会直接写到页面里,需根据PV和IP的比例权衡。

 

10. 权衡DNS查找次数

减少主机名可以节省响应时间。但同时,需要注意,减少主机会减少页面中并行下载的数量。

IE浏览器在同一时刻只能从同一域名下载两个文件。当在一个页面显示多张图片时,IE 用户的图片下载速度就会受到影响。所以新浪会搞N个二级域名来放图片。

下面是新浪微博的图片域名,我们可以看到他有多个域名,这样可以保证这些不同域名能够同时去下载图片,而不用排队。不过如果当使用的域名过多时,响应时间就会慢,因为不用响应域名时间不一致。

11. 精简CSS和JS

这里就涉及到css和js的压缩了。比如下面的新浪的一个css文件,把空格回车全部去掉,减少文件的大小。现在的压缩工具有很多,基本主流的前端构建工具都能进行css和js文件的压缩,如grunt,glup等。

12. 避免跳转

有种现象会比较坑爹,看起来没什么差别,其实多次了一次页面跳转。比如当URL本该有斜杠(/)却被忽略掉时。例如,当我们要访问 时,实际上返回的是一个包含301代码的跳转,它指向的是(注意末尾的斜杠)。在nginx服务器可以使用rewrite;Apache服务器中可以使用Alias 或者 mod_rewrite或者the DirectorySlash来避免。

另一种是不用域名之间的跳转, 比如访问  跳转到。那么可以通过使用Alias或者mod_rewirte建立CNAME(保存一个域名和另外一个域名之间关系的DNS记录)来替代。

 

13. 删除重复的JS和CSS

重复调用脚本,除了增加额外的HTTP请求外,多次运算也会浪费时间。在IE和Firefox中不管脚本是否可缓存,它们都存在重复运算JavaScript的问题。

 

14. 配置ETags

它用来判断浏览器缓存里的元素是否和原来服务器上的一致。比last-modified date更具有弹性,例如某个文件在1秒内修改了10次,Etag可以综合Inode(文件的索引节点(inode)数),MTime(修改时间)和Size来精准的进行判断,避开UNIX记录MTime只能精确到秒的问题。 服务器集群使用,可取后两个参数。使用ETags减少Web应用带宽和负载

 

15. 可缓存的AJAX

异步请求同样的造成用户等待,所以使用ajax请求时,要主动告诉浏览器如果该请求有缓存就去请求缓存内容。如下代码片段, cache:true就是显式的要求如果当前请求有缓存的话,直接使用缓存

 $.ajax({url : 'url',dataType : "json",cache: true,success : function(son, status){    }

 

16. 使用GET来完成AJAX请求

当使用XMLHttpRequest时,浏览器中的POST方法是一个“两步走”的过程:首先发送文件头,然后才发送数据。因此使用GET获取数据时更加有意义。

 

17. 减少DOM元素数量

这是一门大学问,这里可以引申出一堆优化的细节。想要具体研究的可以看后面推荐书籍。总之大原则减少DOM数量,就会减少浏览器的解析负担

 

18. 避免404

比如外链的css或者js文件出现问题返回404时,会破坏浏览器对文件的并行加载。并且浏览器会把试图在返回的404响应内容中找到可能有用的部分当作JavaScript代码来执行。

19. 减少Cookie的大小

Cookie里面别塞那么多东西,因为每个请求都得带着他跑

20. 使用无cookie的域

比如CSS、js、图片等,客户端请求静态文件的时候,减少了 Cookie 的反复传输对主域名的影响。

 

21. 不要使用滤镜

IE独有属性AlphaImageLoader用于修正7.0以下版本中显示PNG图片的半透明效果。这个滤镜的问题在于浏览器加载图片时它会终止内容的呈现并且冻结浏览器。在每一个元素(不仅仅是图片)它都会运算一次,增加了内存开支,因此它的问题是多方面的。
完全避免使用AlphaImageLoader的最好方法就是使用PNG8格式来代替,这种格式能在IE中很好地工作。如果你确实需要使用AlphaImageLoader,请使用下划线_filter又使之对IE7以上版本的用户无效。

 

22. 不要在HTML中缩放图片

比如你需要的图片尺寸是50* 50

<img width=”50″ height=”50″ src=“hahah.jpg” alt=”hahaha” />

那就不用用一张500*500的大尺寸图片,影响加载

 

23. 缩小favicon.ico并缓存



以上是Yslow的23个优化原则,基本可以涵盖现在前端大部分的性能优化原则了,很多更加geek和精细优化方法都是从这些原则里面延伸出来的。 具体想了解更多优化细则的童鞋建议去看看下面的一本书,毕竟页数多讲的也细嘛:

《高性能网站建设指南(第二版》,这里面其实就是细化的讲解了上面的23原则。

转载于:https://www.cnblogs.com/popo123/p/5647359.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/430407.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快速理解编程结构_为什么系统编程全都用英文而不用中文?听完专家的解释恍然大悟!...

全球博弈(quanqiuboyi)——不一样的观点&#xff0c;不一样的解读&#xff0c;8000万人订阅的超级微信大号。不关注时事&#xff0c;你将会被这个世界抛弃&#xff0c;点击标题下蓝字“全球博弈”关注&#xff0c;我们将为您提供有价值、有意思的时事解读。人类走进科技发展的道…

用了十年的昵称badboy_怎样用5秒钟看清一对夫妻的真实感情状况?

“只要一分钟&#xff0c;我就能看清一对夫妻感情的状况。”从事情感咨询几十年的行业前辈告诉我&#xff0c;她的诀窍就是——听他们之间如何称呼对方。“大部分情侣在恋爱时都会给对方起一个专属的爱称&#xff0c;比如&#xff1a;小白猪、大宝宝之类的&#xff0c;总之很亲…

MATLAB—经纬度坐标转换为平面坐标

原理示意图&#xff1a; Mercator投影变换示意图 2. 公式: XY平面被当作Mercator投影平面&#xff0c;Y轴和X轴原点分别设为0纬度和0经度。通过如下公式将地理坐标变换到Mercator投影平面。由于标准电子海图/航道图使用WGS84坐标系&#xff0c;本文使用WGS84参数进行变换。投影…

io密集型和cpu密集型_和小胖一起理解CPU负载和利用率

作者&#xff1a;小胖前言凌晨一点&#xff0c;正整着炸鸡的小胖&#xff0c;微信一呼“你的服务器CPU持续超载 … “麻溜的连上服务器&#xff0c;先把CPU负载摁下来。仔细一想&#xff0c;最近1分钟平均负载很大&#xff0c;但CPU利用率却≤30%&#xff0c;不经陷入了深思&am…

gui显示文本动态框

软件文本框&#xff0c;显示一些希望被阅读的文本&#xff1b; 包含main函数(kuang)&#xff0c;gui作为子函数&#xff0c;以及必要的txt文件。 直接运行kuang函数即可。时间0.5秒内。 可以顺序显示希望输入的内容&#xff0c;并保存记录&#xff0c;如下 也可以每次只显示新…

redis5 外部不能连接_【硬见小百科】PCB连接的方法

PCB是电子产品的基本元器件&#xff0c;任何电子产品都需要PCB才能制成。那么&#xff0c;PCB在电子产品之中&#xff0c;必须要与其他器件相互连接在一起&#xff0c;这就是PCB的互连。总的来说&#xff0c;PCB的连接有三个方面&#xff1a;芯片到PCB、PCB内部、PCB与外部器件…

最小费用最大流问题

最小费用最大流问题 解决如下最小费用最大流问题。 以前的资源由于matlab版本问题等已不适用。现在做出修改&#xff0c;适用于matlab2014a以后的版本。 注意&#xff0c;数据格式按代码中的例子的格式&#xff0c;否则需要修改代码。 查了很多资源发现用MATLAB操作的好用的不多…

windows7无人值守应答文件.rar_数智化赋能人力共享运营,人力管理走向“无人值守”...

关键词&#xff1a;人力共享&#xff0c;HR&#xff0c;数智化&#xff0c;用友&#xff0c;NC Cloud&#xff0c;无人值守人力共享是近几年人力资源从业者持续关注的热点话题。无论是从效率提升、体验改进&#xff0c;还是助力人力资源角色转型&#xff0c;对人力共享能带来的…

iphone彻底删除照片如何恢复_手机删除的照片如何恢复?OPPO最新照片恢复

手机删除的照片如何恢复&#xff1f;小编给大家带来了OPPO最新照片恢复方法&#xff0c;可谓是专属福利啊&#xff01;手机照片误删&#xff0c;焕发出来的照片很模糊&#xff1f;这有何难&#xff01;手机照片管家APP竟然可以恢复高清图片&#xff0c; 不过现在安卓机只有OPPO…

社区发现SLPA算法

社区&#xff08;community&#xff09;定义&#xff1a;同一社区内的节点与节点之间关系紧密&#xff0c;而社区与社区之间的关系稀疏。 设图GG(V,E),所谓社区发现是指在图G中确定nc(>1)个社区C{C1,C2,...,Cnv},使得各社区的顶点集合构成V的一个覆盖。 若任意两个社区的顶点…

bucket sort sample sort 并行_MOOSE: 实现大规模并行多物理场仿真(二)

转载自wx公众号&#xff1a;CS guy来源于文章 MOOSE: Enabling massively parallel multiphysics simulation网址&#xff1a;https://www.sciencedirect.com/science/article/pii/S2352711019302973?via%3Dihub2.软件说明2.1 软件架构MOOSE旨在促进创建FEM工具&#xff0c;以…

iphone数据迁移到新iphone_Mac专业iPhone数据恢复软件----Omni Recover

Omni Recover mac是一个MacOS上的专业iPhone数据恢复软件&#xff0c;Omni Recover Mac版可以检索多达20多种类型的iOS数据&#xff0c;支持从iDevices恢复丢失的数据&#xff0c;轻松帮你找回数据&#xff0c;赶紧下载试试Omni Recove 激活版吧&#xff01;软件介绍Omni Recov…

文档根元素 project 必须匹配 doctype 根 null_快评:全新MG5上市6.49万起,但买它必须准备10万?...

原标题&#xff1a;快评&#xff1a;全新MG5上市万起&#xff0c;但买它必须准备10万&#xff1f;上汽荣威新推出了一款A级轿车——MG5&#xff0c;售价万。上市前&#xff0c;我曾经在网上见过这款车的造型图&#xff0c;很有好感。所以当看到它的最低售价只有万时&#xff0c…

关于oracle sql语句查询时表名和字段名要加双引号的问题

oracle初学者一般会遇到这个问题。用navicat可视化创建了表&#xff0c;可是就是不能查到&#xff01;后来发现②语句可以查询到①select * from user; 但是&#xff0c;我们如果给user加上双引号就可以查到了&#xff01; ②select * from "user"; 难道oracle跟mysq…

模拟退火算法(代码可直接运行)

模拟退火算法&#xff08;SA&#xff09; 模拟退火是很经典的算法&#xff0c;针对大多数模型、应用&#xff0c;受限于SA运行时间长等特点&#xff0c;已不能直接应用SA&#xff0c;这样的算法值得去改进&#xff0c;我试图找一些缩短运行时间的方法&#xff0c;已经在测试&a…

fedora 33 topbar_最新!新增确诊病例33例,其中本土病例1例

【最新&#xff01;新增确诊病例33例&#xff0c;其中本土病例1例】11月8日0-24时&#xff0c;31个省(自治区、直辖市)和新疆生产建设兵团报告新增确诊病例33例&#xff0c;其中境外输入病例32例(上海13例&#xff0c;陕西6例&#xff0c;广东4例&#xff0c;四川4例&#xff0…

javaweb基础(40)_jdbc框架

一、元数据介绍 元数据指的是"数据库"、"表"、"列"的定义信息。 1.1、DataBaseMetaData元数据 Connection.getDatabaseMetaData()获得代表DatabaseMetaData元数据的DatabaseMetaData对象。  DataBaseMetaData对象的常用方法&#xff1a; getUR…

matlab运动目标检测

matlab运动目标检测最近做了运动目标检测的程序和GUI实现&#xff0c;参考了挺多博客&#xff0c;很多都是对数据格式要求比较高或者存在一定的bug&#xff08;有些是因为版本不同&#xff09;&#xff0c;进行了一些修改。&#xff08;2014以后的matlab都能运行&#xff09;&a…

st-link v2怎么连接_三相交流电源的三角形和星形连接

相交流电是电能的一种输送形式&#xff0c;简称为三相电。三相交流电源&#xff0c;是由三个频率相同、振幅相等、相位依次互差120的交流电势组成的电源。我国发电厂和电力网生产、输送和分配的交流电都是三相交流电。1、三角形连接将三相电源的三个线圈&#xff0c;以一个线圈…

matlab程序聚类预测机器学习

matlabmatlab程序代做&#xff0c;数据挖掘&#xff0c;聚类&#xff0c;预测&#xff0c;分类&#xff0c;优化&#xff0c;建模。降重&#xff0c;降低重复率&#xff0c;24h出结果&#xff0c;最低1%重复。 机器学习&#xff0c;深度学习&#xff0c;神经网络代写&#xff0…