作者:HaoyCn
网址:http://segmentfault.com/a/1190000003821219
陆续整理和不断更新网络上给出的前端性能的优化方案。
这里只是做一个总概括式的索引,每一个方案都十分值得推敲和细说。
1 请求和响应
缓存控制
请求头里,可以发送 If-Modified-Since 以及 If-None-Match 等信息,来询问服务端请求内容是否有更新,如果没有更新,可返回304,告诉浏览器使用缓存,避免重新下载资源。Pragma 和 Cache-Control 等也能控制缓存。如告诉服务端不要缓存等。
响应头里,Expires 可以告诉浏览器过期时间,Last-Modified 最近更新时间,ETag 则可允许浏览器进行缓存验证(在 If-None-Match 请求信息中使用)。
复用TCP
请求头里,Connection 可控制 TCP 通道的使用,使用 keep-alive 可以复用上次打开的 TCP。
GZIP压缩
如果可以启用 gzip 压缩,将减少响应数据大小,加快响应。请求头里面可用 Accept-Encoding 告知浏览器支持的压缩方式,而服务端则用 Content-Encoding 作为回应。
Cookies
发送请求时,cookies 也在请求之中。因此,cookies 也可以作为减少请求的优化对象。如,根据同源限制策略,可以使用多个域名加载资源,如加载静态资源,就不会发送多余的 cookies;同时,合理设置 cookies 的路径和域名,如在子站避免不必要的来自父站的 cookies。
减少HTTP请求
有很多细节可以实现,比如CSS Sprites、Data URL等等,由于此部分内容和下述内容有所重复,故部分细节在下面会讲到。
多域名分发
同域下浏览器能并发的请求有限,而为了增加并发,尤其是一些静态资源上,可以使用多个域名。但由于域名DNS解析本身也是耗时的,所以实践原则是2-4个为宜。
需要额外提醒的是,加载图像资源的时候,并发没有问题;但在加载 JavaScript 脚本的时候,还是会暂停加载其他资源。
使用CDN
根据用户能访问的最快位置加速访问。
避免重定向和404
重定向和404将浪费加载请求。
favicon.ico
浏览器默认加载的资源,最好能够缓存之。
2 HTML
减少DOM
过多的DOM元素会影响渲染、加载、执行。除了精简页面结构外,还可以适时删除不必要的DOM元素(页面内已经不会再访问的元素),又或者可以懒加载(不一定会使用到的元素,如登录框)。
CSS 和 JavaScript 文件位置
CSS 放 head,JavaScript 放 body 闭标签前。乃是因为:
-
样式表不参与 DOM 修改,所以不会为了解析样式停止文档解析
-
浏览器要避免重绘,在没有拿到全部样式前不会开始渲染
-
解析样式时,有的浏览器(FF)会停止脚本运行,而有的(Webkit)则会在脚本访问样式属性但可能受未加载样式影响时停止脚本运行
-
脚本解析中可能请求样式,如果样式还未解析完毕就会出错
-
脚本执行将暂停文档的解析和资源的下载
因此,将二者放在适当的位置,能够极大提高渲染效率。
脚本延迟加载
可将脚本添加 defer 和 async 属性。两个属性的共通点在于,脚本的加载和文档的解析是同步进行的,而区别在于:async 一旦加载完毕,立即停止文档解析并执行脚本;defer 等待文档解析完毕后再执行。
合理使用内联
脚本和样式,应按需选择内联或者外链。对于访问少、样式和脚本复用少的页面,可以考虑使用内联样式从而减少 HTTP 请求。但如果页面访问频繁,样式脚本在多个页面经常复用,使用外链则是最优选择。
无论如何,需要避免使用 @import 来导入样式。
而图像也是一样,高级浏览器支持将图像数据直接 base64 编码在 src 属性里,必要时可直接在 HTML 里输出图片数据。
减少iframe
iframe 本身有许多优点,比如可以并行下载脚本,适合加载慢内容(如广告),同时浏览器可以对其进行安全控制。
减少使用 iframe 的主要考虑是:iframe 会阻碍页面加载,同时也没有语义。
3 CSS
选择器
选择器效率排行如下:
-
ID选择器
-
类选择器
-
标签选择器
-
相邻选择器
-
子选择器
-
后代选择器
-
通配符选择器
-
属性选择器
-
伪类选择器
效率与优先级并不是对等关系,优先级高的不一定效率高。如 #id.class 合用比 单个 #id 的优先级高,但效率却比值慢。
选择器书写建议是:
-
避免使用通配符
-
不使用标签名或类名修饰ID规则:如果规则使用ID选择器作为关键选择器,不要给规则添加标签名。因为ID本身就是唯一的,添加标签名会不必要地降低匹配效率
-
不使用标签名修饰类:相较于标签,类更具独特性
-
尽量选择最具体的方式:造成低效的最简单粗暴的原因就是在标签上使用太多规则。给元素添加类可以更快细分到类方式,可以减少规则去匹配标签的时间
-
关于后代选择器和子选择器:避免使用后代选择器,非要用的话建议用子选择器代替,但子选择器也要慎用,标签规则永远不要包含子选择器
-
利用可继承性:没必要在一般内容上声明样式
避免滤镜、表达式、Hack
效率低。
Sprites
合并图片可减少 HTTP 请求。其他建议有:
-
Sprite 中水平排列图片,垂直排列会增加文件大小
-
Sprite 中把颜色较近的组合在一起可以降低颜色数,理想状况是低于256色以便适用PNG8格式
-
不要在Spirite的图像中间留有较大空隙。这虽然不大会增加文件大小,但对于用户代理来说它需要更少的内存来把图片解压为像素地图。100×100的图片为1万像素,1000×1000就是100万像素
使用3D动画
使用 transform: translate3d 等可加速 GPU 渲染。
4 JavaScript
避免重排
渲染中可能存在的高成本操作:
-
修改、增加、删除DOM节点
-
移动DOM位置或者动画效果
-
CSS样式修改(重绘比重排好些)
-
调整窗口大小,或者滚动时有绝对定位、fixed 背景以及动画
-
修改页面默认字体
浏览器一般会缓存Render Tree的更新渲染,但以下情况除外:
-
调整窗口大小和修改页面默认字体
-
client/offset/scroll
-
getComputedStyle() currentStyle
优化建议:
-
修改 className 而非 style
-
离线 DOM 后修改,如 documentFragment 或者 display:none 后再调整样式
-
缓存属性值
-
动画使用 absolute/fixed
-
不使用 table 布局(牵一发动全身)
-
修改层级比较低的 DOM
事件委托
将多个节点上的事件放到其父节点(经典案例:将 li 上的事件绑定到 ul 上)。
内存管理
合理释放和缓存内存。如缓存复用的属性,接触对象引用等。
5 资源
压缩大小
压缩样式、脚本、图像等资源的大小。
针对图像资源,可从预览小图、格式选择等多角度优化。
懒加载
如图像的懒加载(滚动到显示区域后才加载)等。
预加载
针对之后会用到的资源提前加载。
6 客户端
localStorage 缓存
相比 cookies,localStorage 存储容量更大。可以将一些静态资源(如 jQuery库)等缓存。
相关推荐
前端性能优化对于提高用户体验至关重要。以下是一些常见的前端性能优化策略: **2.1 延迟渲染** - **2.1.1 挑战和困难**:某些情况下,由于页面内容过多或资源过大,页面加载速度变慢。 - **2.1.2 解决方案**:...
本文将深入探讨“大型网站性能优化方案”,基于多年的实践经验,为优化工作提供指导。 首先,我们需要理解网站性能的重要性。快速加载的网站能够提高用户满意度,降低跳出率,从而增加转化率。而搜索引擎也将页面...
ASP.NET程序性能优化方案是针对基于ASP.NET技术构建的Web应用程序进行性能提升的一系列方法和技术。在开发过程中,性能优化是确保系统高效运行的关键环节,它涵盖了代码优化、数据库优化、架构设计等多个方面。 ...
总的来说,性能优化是一个系统工程,涉及到从数据库到应用层,再到Web前端的全方位优化。每个环节的优化都需要根据实际情况和需求进行,同时,要遵循“有理想而不理想化”的原则,以务实的态度寻求最适合的优化方案...
### ORACLE存储过程性能优化技巧 #### 一、概述 在数据库管理中,ORACLE存储过程的性能优化是一项至关重要的工作。高效的存储过程不仅能提升应用系统的响应速度,还能减少服务器资源的消耗,提高整体系统性能。...
本文将深入探讨网站性能优化的方案和原理,主要围绕"高性能网站建设指南(上1).pdf"这份资料进行阐述。 首先,我们要理解网站性能优化的重要性。快速的页面加载速度不仅可以提高用户满意度,降低跳出率,还有助于...
本优化方案主要关注以下几个核心领域:前端优化、后端优化、数据库优化、缓存策略、负载均衡以及性能监控。 一、前端优化 前端优化主要包括代码压缩、资源合并、图片优化、CDN(内容分发网络)利用以及异步加载等...
总结,大流量Web系统的性能优化是一个涉及前端、后端、架构等多个层面的系统工程。从减少HTTP请求、优化数据库到采用微服务架构、负载均衡,再到监控与调优,每一步都至关重要。只有综合运用这些技术,并持续关注和...
总结来说,大规模网站性能优化需要从前端、后端、架构及监控等多个层面进行全面考虑和实施。只有这样,才能确保网站在应对高并发、大数据量的情况下,仍能保持高性能和良好的用户体验。同时,持续关注新的技术和工具...
《SQL Server 2008查询...Sajal还在从前端网页到后端数据库的基于微软技术的应用程序上,具备了故障定位和性能优化的大量经验。他有许多为《财富》500强公司设计可伸缩的数据库解决方案和最大化数据库环境性能的经验。
在构建高性能Web解决方案时,我们需要考虑多个层面,包括但不限于架构设计、服务器性能优化、分布式系统、数据推送技术以及操作系统层面的调整。以下是对这些关键知识点的详细解释: 1. **高可用分布式旅游电子商务...
前端性能优化虽然不直接涉及到Java代码,但对于用户体验有直接影响: - **资源压缩**:减少HTTP请求的数量和大小,使用压缩工具压缩代码和资源。 - **缓存策略**:合理设置HTTP缓存,减少服务器压力和页面加载时间...
4. **前端性能指标**:如Time to First Byte (TTFB)、First Contentful Paint (FCP)和First Input Delay (FID)等,这些指标有助于衡量和改善网站性能。 5. **前端框架与库**:合理选择和使用如React、Vue或Angular...
上述文档列举了多个性能优化案例,涉及数据库查询优化、前端资源加载优化、接口调用优化等多个方面。以下将详细阐述这些知识点: 1. **SQL优化**: - 赖媛和陈群针对SQL查询进行了优化,包括添加索引、减少查询...
18. **决定使用全表扫描还是使用索引**:评估不同查询策略的代价,根据具体情况选择最优化方案,避免无谓的资源浪费。 #### 总结 基于索引的SQL语句优化是一个系统工程,涉及对数据库架构、查询逻辑、数据分布等多...
Mycat智能优化设计方案 数据库智能优化设计方案的主要目的是将数据库优化自动化,通过...通过这种方式,数据库智能优化设计方案可以实现自动化的数据库优化,减少数据库管理员的工作负担,提高数据库的性能和可靠性。
书名: SQLServer2008查询性能优化 作者: 弗里奇(Grant Fritchey) 出版社: 人民邮电出版社 出版日期: 2010年8月1日 ISBN: 9787115230294 编辑推荐 《SQL Server 2008查询性能优化》为你提供了处理查询性能所...
### Java秒杀系统方案优化与高性能高并发实战 在当今互联网时代,秒杀活动作为一种吸引用户的营销手段,被广泛应用于各类电商网站。然而,对于技术团队来说,如何设计和实现一个稳定、高效的秒杀系统,成为了巨大的...
- **案例分析与优化结果比较:** 分析实际案例中的优化方案及其效果。 综上所述,软件性能优化是一项涉及多个层面的工作,它不仅关乎代码质量和算法效率,还与整体架构设计密切相关。通过对软件性能进行细致的分析...
【后台服务优化方案】 在IT领域,后台服务的优化对于提升系统性能、稳定性和用户体验至关重要。以下是一些关键的优化策略: 1. **前端接口优化**:针对前端接口的优化主要包括处理并发请求、修复交互问题和改进...