Web前端,高性能优化
高性能HTML
一、避免使用iframe
iframe也叫内联frame,可将一个HTML文档嵌入另一个HTML文档中。
iframe的好处是,嵌入的文档独立于父文档,通常也借此使浏览器模拟多线程。缺点是:
①虽然iframe能模拟多线程,但主流浏览器的同域名并行下载数是不变的,浏览器对同域名的链接总是共享浏览器级别的连接池,
即使是不同窗口或标签页的同域名网页。
②在页面加载时,iframe会阻塞父文档onload事件的触发。并且有些浏览器需在触发onload事件后才能被触发onunload事件。
故用户用onload事件长久未触发而离开页面时,不会触发onunload事件。
※不兼容IE6~8的解决方案:使用JavaScript动态加载iframe元素或动态设置其src属性。
<iframe id=ifr ></iframe>
document.getElementById( ‘ifr’ ).setAttribute( ‘src’ , ‘url ’ );
③iframe是文档内最消耗资源的元素之一,即使是空iframe的开销也是昂贵的。【通过Steve Souders测试】
二、避免空连接属性
空连接指:img、link、script 和 iframe元素的src或href属性的值为空。(如src = ””)
设置了空连接后浏览器依然会以默认规则发送请求:
①IE6~8中只有img元素会出问题:IE会将img的空地址解析为当前页面地址的目录地址并请求。
如当前网页地址为http://aaa.com/bb/c.html,img的地址会被解析为http://aaa.com/bb
②早些版本的Webkit和Firefox会将空连接解析为当前页面的地址。在ios与android中此问题较严重。
如果页面有多个空连接属性元素,会增加服务器的请求次数。
③幸运的是,主流浏览器对iframe的src属性值为空时,会解析为about:blank地址,而不发送额外请求。
三、避免节点深层级嵌套
层级越深的节点在初始化构建时,所占内存越多。
通过浏览器HTML解析器会将整个HTML文档的结构存储为DOM树结构。当节点嵌套层次越深,构建的DOM书层次也越深。
四、缩减HTML文档大小
①删除对执行结果无影响的空格空行和注释;
②避免table布局;
③使用HTML5;
五。显式指定文档字符集
在HTML页面开时指定字符集有助于浏览器立即开始解析HTML代码。
HTML文档通常被解析为一序列的带字符集编码信息的字符串,通过Internet传送。
字符集编码在HTTP响应头中,或HTML标记中指定。浏览器通过指定的字符集,吧编码解析为可现实在屏幕上的字符。
若浏览器无法获知页面的编码字符集,一般会在执行脚本和渲染页面之前,先将字节流缓存,再搜索可进行解析的字符集 或 以默认字符集来解析。
六、显示设置图片的宽高
有时需要在页面加载完之前,就对页面布局进行定位。
若页面中的图片没指定尺寸,或尺寸与实际图片大小不符,浏览器会在图片下载完成后再"回溯"该图片并重新显示,从而浪费时间。
故最好为页面的图片设置指定尺寸(行内样式或CSS样式)。
<img src="hello.png" width="400" height="300">
七、避免 脚本阻塞加载
浏览器在解析常规script标签时,会等待script下载完毕后,才解析执行,之后的HTML代码就只能等待。
故应该将脚本放在文档的末尾:
<script src="example.js" ></script>
</body>
高性能CSS
一、避免使用@import
CSS2.1加入的@import,会使页面在加载时添加额外延迟。
由于浏览器不能并行下载样式,会导致页面增添额外的往返耗时。而使用<link>能并行下载样式,但任然是多次请求。
二、避免AlphaImageLoader滤镜
此滤镜能解决IE6即一下版本显示PNG图片的半透明效果,但会在加载图片时终止内容的呈现,并冻结浏览器。
在每个元素(不仅仅是图片)都会运算一次,添加内存开支。
应使用PNG8格式来代替,或用下划线(_filter)只针对IE6。
三、避免CSS表达式
CSS表达式是设置动态CSS属性的即强调又危险的方法。IE5开始支持,IE独有。
//实现每隔一小时切换一次背景颜色
background-color: expression((new Date()).getHours()%2?"#FFFFFF": "#000000" );
CSS表达式的缺点是技术频率极大,在页面显示、缩放、滚动 或 移动鼠标,都会重新计算一次。移动随便会达到1w次以上的计算量。
①使用一次性的表达式能减少计算次数,在第一次运行时将结果赋给指定样式属性,并用该属性代替CSS表达式。
②如果样式属性必须在页面周期内动态地改变,使用时间句柄代替CSS表达式是一个可行的办法。
四、避免通配选择器
优化选择器的原则是减少匹配时间。CSS选择器的匹配机制是:从右向左进行规制匹配的!
#header > a { font-weight:blod; }
上面这条规制实际是浏览器遍历页面所有a元素,并确定其父元素的id是否为header。
#header a {...}
后代选择器开销更大,在遍历页面的所有a元素后,会需向上遍历直到根节点。
由此可知,选择器最右边的规制 往往决定了向左移匹配的工作量。故最右边的选择规则 称之为关键选择器。
.selected * {...}
在匹配所有元素后,再分别向上匹配直至根节点。通常比开销最小的ID选择器高出·~3个数量级。
五、避免单规则的属性选择器
.selected [href='#index'] {...}
浏览器先匹配所有的元素,检查其是否有href属性并且值为“#index”,再分别向上匹配class为selected的元素。
故应该避免使用关键选择器是单规则属性选择器的规则。
六、避免正则的属性选择器
CSS3添加了复杂的属性选择器,通过类正则表达式进行匹配。但这些类型的选择器会比基于类别的匹配慢很多。
七、移除无匹配的样式
①删除无用的样式,可缩减样式文件大小,加快加载速度。
②对于浏览器,所有样式规则都会被解析后索引起来,即使是当前页面无匹配的规则!故移除无匹配的规则,减少索引项,加快浏览器查找速度。
高性能JavaScript
一、使用事件代理
当过多的时间句柄被频繁触发时,页面反应会迟钝。
如一个div有10个按钮,只需给div附加一次事件句柄,而不必给每个按钮添加一个句柄。
事件冒泡时刻捕捉到事件 并判断时那个事件发出的。【触发事件的元素 = ev.srcElement ? ev.srcElement : ev.target;】
二、缓存选择器查询结果
减少选择器查询的次数,并尽可能缓存选中的结果,便于以后的重用。
jQuery('#top').find('p.classA');
...
jQuery('#top').find('p.classB'); //使用下面的方法 减少开销
var cached = jQuery('#top');
cached.find('p.classA');
...
cached.find('p.classB');
三、避免频繁的IO操作
应减少对cookie或localstorage的操作,因为对它们进行操作的API是同步的,而它们是多个tab页面间共享的。
多页面同时操作cookie和localstorage时,会存在同步加锁机制。
四、避免频繁的DOM操作
JavaScript访问DOM元素缓慢,应做到:
①缓存已经查询过的元素;
②线下更新完节点之后,在将它们添加到文档树中;
③避免使用JavaScript来修改页面布局。
五、使用微类库
尽量避免使用大而全的类库,而是按需使用微类库来辅助开发。
转载地址:http://madscript.com/performance/high-performance-frontend/
Web前端,高性能优化的更多相关文章
- Java Web 前端高性能优化(二)
一.上文回顾 上回我们主要从图片的合并.压缩等方面介绍前端性能优化问题(详见Java Web 前端高性能优化(一)) 本次我们主要从图像BASE64 编码.GZIP压缩.懒加载与预加载以及 OneAP ...
- Java Web 前端高性能优化(一)
Web 发展的速度让许多人叹为观止,层出不穷的组件.技术,只需要合理的组合.恰当的设置,就可以让 Web 程序性能不断飞跃.所有 Web 的思想都是通用的,它们也可以运用到 Java Web.这一系列 ...
- 网站的高性能架构---Web前端性能优化
网站性能测试 不同视角下的网站性能 用户视角的网站性能:从用户角度,网站性能就是用户在浏览器上直观感受到的网站响应速度.用户的感受时间包括用户计算机和网站服务器通信的时间.网站服务器处理请求时间.用户 ...
- Web前端性能优化的9大问题
1.请减少HTTP请求基本原理:在浏览器(客户端)和服务器发生通信时,就已经消耗了大量的时间,尤其是在网络情况比较糟糕的时候,这个问题尤其的突出.一个正常HTTP请求的流程简述:如在浏览器中输入&qu ...
- 大型网站技术架构(3):WEB 前端性能优化
上次说到了性能优化策略,根据网站的分层架构,可以大致的分为 web 前端性能优化,应用服务器性能优化,存储服务器性能优化三大类 这次来说一下 web 前端性能优化,一般来说,web 前端就是应用服务器 ...
- web前端性能优化的技巧
1. 请减少HTTP请求 基本原理: 在浏览器(客户端)和服务器发生通信时,就已经消耗了大量的时间,尤其是在网络情况比较糟糕的时候,这个问题尤其的突出. 一个正常HTTP请求的流程简述:如在浏览器中输 ...
- web前端性能优化指南(转)
web前端性能优化指南 概述 1. PC优化手段在Mobile侧同样适用2. 在Mobile侧我们提出三秒种渲染完成首屏指标3. 基于第二点,首屏加载3秒完成或使用Loading4. 基于联通3G网络 ...
- Web前端性能优化教程09:图像和Cookie优化
本文是Web前端性能优化系列文章中的第九篇,主要讲述内容:图像和Cookie优化.完整教程可查看: 一. 图像优化 图像基础知识 gif: 适用于动画效果,例如提示的滚动条图案 jpg: 是一种使用 ...
- Web前端性能优化教程06:减少DNS查找、避免重定向
本文是Web前端性能优化系列文章中的第六篇,主要讲述内容:减少DNS查找.避免重定向.完整教程可查看: 一.减少DNS查找 基础知识 DNS(Domain Name System): 负责将域名UR ...
- Web前端性能优化教程08:配置ETag
本文是Web前端性能优化系列文章中的第五篇,主要讲述内容:配置ETag.完整教程可查看:Web前端性能优化 什么是ETag? 实体标签(EntityTag)是唯一标识了一个组件的一个特定版本的字符串, ...
随机推荐
- linux下编码和vim编码问题解决
Linux下编码问题 在Linux环境下经常会出现文件乱码的问题,这实际上就是因为文件编码,以Ubuntu为例,默认的字符编码为UTF-8,并且没有默认安装gbk和gb2312,所以需要我们进行安装和 ...
- CSS Filter
支持的效果有: blur(模糊) grayscale(灰度) drop-shadow(阴影) sepia(褐色滤镜) brightness(亮度) contrast(对比) hue-rotate(色相 ...
- 【Android UI】色板
Hex Code Color #FFFFFF #FFFFCC #FFFF99 #FFFF66 #FFFF33 #FFFF00 #FFCCFF #FFCCCC #FFCC ...
- GUI动态创建button
#include "cocos2d.h" #include "cocos-ext.h" USING_NS_CC; USING_NS_CC_EXT; using ...
- JavaScript学习笔记(四十四) 装饰器
装饰器模式(Decorator) 在装饰器模式中,可以在运行时给一个对象动态的添加额外的功能.当和静态类打交道的时候(static classes),这可能是一个挑战.但在JavaScript中,对象 ...
- vim-ctags-taglist-netrw
vim配置 在~/.vimrc文件里配置例如以下内容.或者在/etc/vim/vimrc中进行全局配置,经常使用配置例如以下: syntax on set tabstop=4 set nu set s ...
- JVM调优总结(七)-典型配置举例1
以下配置主要针对分代垃圾回收算法而言. 堆大小设置 年轻代的设置很关键 JVM中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理 ...
- DNS与网站优化
点就出现了这样的问题,导致了几小时的访问失败,所以选择优秀的DNS服务器势必关系网站发展的生死存亡.本文做以下分析. 选择良好的DNS服务器要从选择域名注册商说起,在注册域名时多数人看中的仅仅 ...
- C++ map排序(按照value值排序)_glp_hit_新浪博客
C++ map排序(按照value值排序)_glp_hit_新浪博客 C++ map排序(按照value值排序) (2012-07-12 14:19:51) 转载▼ 标签: ...
- HDU 4336 Card Collector(动态规划-概率DP)
Card Collector Problem Description In your childhood, do you crazy for collecting the beautiful card ...