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

在当前,网页上越来越重视用户体验,其中一个重要的前提就是访问速度。前端是庞大的,包括 HTML、 CSS、 Javascript、Image 。等等各种各样的资源。前端优化是复杂的,针对方方面面的资源都有不同的方式。至少80%的最终用户响应时间花在了页面中的组件(图片、脚本、样式表)。

页面方面优化


一.      减少HTTP请求

改善响应时间的最简单途径就是减少组件的数量,并由此减少HTTP请求的数量。

1 :CSS Sprites将多个图片文件合并成一个图片,利用css 的background-position进行定位

2 :资源合并与压缩,利用gulp,webpack等模块打包工具,分析模块之间的依赖,生成一个文件。

3:合理设置 HTTP缓存。HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传。缓存的力量是强大的,恰当的缓存设置可以大大的减少 HTTP请求。script和CSS写在外部文件,如果缓存下来可以减少请求http请求次数。

二:将CSS文件放在<head>标签中,

目的是为了让浏览器更早生成css样式规则树,样式规则树是浏览器分析网页对应的CSS文件生成的树,它跟网页的HTML结构没有任何关系,仅仅是CSS文件的树型结构。

要特别注意的是浏览器发现需要下载一个CSS文件时,它会马上停止渲染页面,并且在新的样式规则树未被建立前都不会再进行渲染或者更新页面,也就是CSS会阻塞页面的渲染。因此,必须尽可能精简CSS文件内容以及将CSS文件的link标签放到页面头部。

三:将script文件放在</body>下。

js的下载和执行会阻塞Dom树的构建,所以script标签放在首屏范围内的HTML代码段里会可能影响首屏的内容。在页面loading的过程中,当浏览器读到js执行语句的时候一定会把它全部解释完毕后在会接下来读下 面的内容。所以放在页面最后,可以有效减少页面可视元素的加载时间。

代码级优化


一:javascript代码优化

1 减少dom操作。

DOM操作往往是JavaScript 程序中开销最大的部分,而因访问NodeList 导致的问题为最多。NodeList 对象都是“动态的”,这就意味着每次访问NodeList 对象,都会运行一次查询。有鉴于此,最好的办法就是尽量减少DOM操作。

(1)用innerHTML代替DOM操作,减少DOM操作次数,优化javascript性能

(2)document.createDocumentFragment();新建dom片段,避免一条条插入。

var fragment_1 =document.createDocumentFragment();

fragment_1.innerHTML = ‘我是一个粉刷匠‘;

document.body.appendChild(fragment_1);

(3)函数节流

浏览器中某些计算和处理要比其他的昂贵很多。例如,DOM 操作比起非DOM 交互需要更多的内存和CPU 时间。连续尝试进行过多的DOM 相关操作可能会导致浏览器挂起,有时候甚至会崩溃。尤其在onresize 事件处理程序内部如果尝试进行DOM 操作,其高频率的更改可能会让浏览器崩溃。为了绕开这个问题,你可以使用定时器对该函数进行节流。

function throttle(method,delay){

var timer=null;

return function(){

var context=this, args=arguments;

clearTimeout(timer);

timer=setTimeout(function(){

method.apply(context,args);

},delay);

}

}

(4)使用事件代理。

利用事件冒泡的原理,让其父元素代替执行。减少时间绑定次数。

2 js代码性能

(1)少用闭包,闭包是最容易发生内存泄漏的地方。函数在执行完毕后,一般来说作用域下的变量会被释放,除非外部的某个操作会读写该作用域下的数据(即闭包)。

(2)避免使用with语句

with 语句的作用是将代码的作用域设置到一个特定的对象中。with 语句的语法如下:

with(location){

var qs = search.substring(1);

var hostName = hostname;

var url = href;

}

在性能非常重要的地方必须避免使用with 语句。和函数类似,with 语句会创建自己的作用域,因此会增加其中执行的代码的作用域链的长度。由于额外的作用域链查找,在with 语句中执行的代码。肯定会比外面执行的代码要慢。

(3)少用全局变量

.避免全局查找,可能优化脚本性能最重要的就是注意全局查找。使用全局变量和函数肯定要比局部的开销更大,因为要涉及作用域链上的查找。

(4)少用eval

应该避免使用eval,不安全,非常耗性能(2次,一次解析成js语句,一次执行)。

(5)为代码开启严格模式。

使JS编码更加规范化的模式,消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为。提高编译器效率,增加运行速度;

(6)优化循环。

1:存储length

for (var i =size; i < arr.length; i++) {}

?for循环每一次循环都查找了数组(arr)的.length属性,在开始循环的时候设置一个变量来存储这个数字,可以让循环跑得更快:

for (var i = size,length = arr.length; i < length; i++) {

}

2 :合理终止循环

必要的时候使用break终止循环,避免任务已经完成,还在无意义的循环。

二:css代码优化。

(1)减少css选择器的长度。

浏览器如何判断css选择器属于哪个元素?

从后往前判断。浏览器先产生一个元素集合,这个集合往往由最后一个部分的索引产生(如果没有索引就是所有元素的集合)。然后向上匹配,如果不符合上一个部分,就把元素从集合中删除,直到真个选择器都匹配完,还在集合中的元素就匹配这个选择器了。

合理减少css选择器的长度,有利于更快构建样式规则树。

(2)分离出公共样式。

我们在开发大型网站时,为了较少css文件的体积大小,避免样式重复书写,以及后期好维护,应抽离出公共样式。增加代码复用性。

时间: 2024-11-08 20:25:50

前端日常工作性能优化条例的相关文章

前端工程与性能优化

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

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

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

前端常见的性能优化

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

前端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等).减少请求次数是缩短响应时间的关键!可以通过简化页面设计来减少请求次数,但页面内容较

全方位分析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代替大

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

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

前端页面的性能优化

减少HTTP请求 文件合并 合并css或js文件使要下载的文件数减少 css sprites 使用图片精灵将大量的背景图片整合到一张图片,然后用background-image和background-position控制背景图片的位置定位到要显示的图片,适用于数量多,体积小的图表等图片. 行内图片(base64格式) 将图片转化为base64格式直接嵌入html内部 服务端设计配置 跨域分离组件 分离组件可以最大化并行下载,但要确保只用不超过2-4个域,因为存在DNS查找的代价.例如,可以把HT