关于Yahoo十四条军规与前端性能优化

关于Yahoo十四条军规与前端性能优化

热度 4已有 223 次阅读2014-8-3 15:01 |个人分类:前端相关|系统分类:前端优化前端优化yahoo性能优化

  • 启用Gzip压缩。Gzip的思想就是把文件先在服务器端进行压缩,然后再传输。这样可以显著减少文件传输的大小。传输完毕后浏览器会 重新对压缩过的内容进行解压缩,并执行。目前的浏览器都能“良好”地支持 gzip。不仅浏览器可以识别,而且各大“爬虫”也同样可以识别,各位seoer可以放下心了。而且gzip的压缩比例非常大,一般压缩率为85%,就是 说服务器端100K的页面可以压缩到25K左右再发送到客户端。具体的Gzip压缩原理大家可以参考csdn上的《gzip压缩算法》 这篇文章。雅虎特 别强调, 所有的文本内容都应该被gzip压缩: html (php), js, css, xml, txt… 这一点我们网站做得不错,是一个A。以前我们的首页也并不是A,因为首页上还有很多广告代码投放的js,这些广告代码拥有者的网站的js没有经 过gzip压缩,也会拖累我们网站。
  • 减少HTTP请求数。当你输入url地址按回车键到下载内容到客户端浏览器后,需要经过1. 域名解析   2. 开启TCP连接 
       3. 发送请求 
       4. 等待(主要包括网络延迟和服务器处理时间)
       5. 下载资源         
    减少http请求有这样几个优点:
    (1)   减少DNS请求所耗费的时间.
    且不说对错,因为从基本来说,减少http请求数的确可以减少DNS请求和解析耗费的时间.
    (2)   减少服务器压力.
    这个通常是被考虑最多的,也是我用来讲解给别人听的最大理由,因为每个http请求都会耗费服务器资源,特别是一些需要计算合并等操作的服务器,耗费服务器的cpu资源可不是开玩笑的事情,硬盘可以用钱买来,cpu资源可就没那么廉价了.
    (3)   减少http请求头.
    当我们对服务器发起一个请求的时候,我们会携带着这个域名下的cookie和一些其他的信息在http头部里,然后服务器响应请求的时候也会带回一些cookie之类的头部信息.这些信息有的时候会很大,在这种请求和响应的时候会影响带宽性能.
  • 无疑,每一次http请求都是 非常耗时的,那么,该如何减少http请求数呢?
  • 如何减少请求数

    1、合并文件
         合并文件就是把很多JS文件合并成1个文件,很多CSS文件合并成1个文件,这种方法应该很多人用到过,这里不做详细介绍,
         只推荐1个合并的工具:yuiCompressor 这个工具yahoo提供的。 http://developer.yahoo.com/yui/compressor/

    2、合并图片
         这是利用css sprite,通过控制背景图片的位置来显示不同的图片。这种技术也是大家都用过的,不做详细介绍,推荐1个在线合并图片的网站:http://csssprites.com/

    3、把JS、CSS合并到1个文件
         上面第1种方法说的只是把几个JS文件合并成1个JS文件,几个CSS文件合并成1个CSS文件,哪如何把CSS和JS都合并到1个文件中,见我的另1篇文章:
         http://www.blogjava.net/BearRui/archive/2010/04/18/combin_css_js.html

    4、使用Image maps
         Image maps 是把多个图片合并成1个图片,然后使用html中的<map>标签连接图片,并实现点击图片不同的区域执行不同的动作,image map在导航条中比较容易使用到。
         image map的使用方法见: http://www.w3.org/TR/html401/struct/objects.html#h-13.6

    5、data嵌入图片
         这种方法把图片进行编码直接嵌入到html中进行使用,以减少HTTP请求,但这个会增加HTML页面的大小,而且这样嵌入的图片不能缓存。

  • 将CSS文件放在<head></head>标签中,是为了防止在低网速的情况下,用户的IE浏览器只能看到空白页。Firefox虽然不会阻止,但可能需要重画,这就可能导致页面闪烁的问题。所以,为了提高浏览器的渲染性能,避免页面出现空白或者闪烁的现象。应该将css文件放在<head>标签中,而不是<body>标签。
  • 使用CDN内容分发网络。CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。
  • 将<script>标签放在最下面。他会先讲内容呈现出来,不会让用户等得太久。因为防止script脚本的执行阻塞页面的下载。在页面loading的过程中,当浏览器读到js执行语句的时候一定会把它全部解释完毕后在会接下来读下 面的内容。不信你可以写一个js死循环看看页面下面的东西还会不会出来。所以放在页面最后,可以有效减少页面可 视元素的加载时间
  • 添加Expire/Cache-Control 头:Add an Expires Header

    现在越来越多的图片,脚本,css,flash被嵌入到页面中,当我们访问他们的时候势必会做许多次的http请求。其实我们可以通过设置 Expires header 来缓存这些文件。Expire其实就是通过header报文来指定特定类型的文件在览器中的缓存时间。大多数的图片,flash在发布后都是不需要经常修 改的,做了缓存以后这样浏览器以后就不需要再从服务器下载这些文件而是而直接从缓存中读取,这样再次访问页面的速度会大大加快。

  • 避免使用CSS Expression表达式。CSS表达式会降低浏览器的渲染性能;在页面滚动乃至鼠标移动和页面缩放的时候所有元素都要被重新计算一次,大大降低了浏览器的性能。

    8. 把css文件和js文件放外部。不仅从性能优化上会这么做,用代码易于维护的角度看也应该这么做。把css和js写在页面内容可以减少2次请求,但也增 大了页面的大小。如果已经对css和js做了缓存,那也就没有2次多余的http请求了。当然,我在前面中也说过,有些特殊的页面开发人员还是会选择内联 的css和js文件。也大大提高了css和js代码的复用性。

    写在页面内的情况:只用用于一个页面;不经常被访问到;脚本和样式很少。

    9. 减少DNS请求:在网络 上每台计算机都对应有一个独立的ip地址。在域名和ip地址之间的转换工作称为域名解析,也称DNS查询。一次DNS的解析过程会消耗20-120毫秒的 时间,在dns查询结束之前,浏览器不会下载该域名下的任何东西。所以减少dns查询的时间可以加快页面的加载速度。yahoo的建议一个页面所包含的域 名数尽量控制在2-4个。

    IE默认的DNS缓存时间为30min;Firefox为60s;chrome为60s;

    10.

    压缩 JavaScript 和 CSS 。可以去除不必要的字符、注释和空格。

    压缩js和css的左右很显然,减少页面字节数。容量小页面加载速度自然也就快。而且压缩除了减少体积以外还可以起到一定的保护左右。这点我们做得不错。 常用的压缩工具有JsMin、YUI compressor等。另外像http://dean.edwards.name/packer/还给我们提供了一个非常方便的在线压缩工具。

    11. 避免重定向。原始请求被转向了其他请求。

    14.使用AJAX缓存。

另外,除了以上的yahoo十四条军规外,还可以使用如下三条优化建议:
高性能HTML
一、避免使用iframe
  iframe也叫内联frame,可将一个HTML文档嵌入另一个HTML文档中。
  iframe的好处是,嵌入的文档独立于父文档,通常也借此使浏览器模拟多线程。缺点是:
  ①虽然iframe能模拟多线程,但主流浏览器的同域名并行下载数是不变的,浏览器对同域名的链接总是共享浏览器级别的连接池,
     即使是不同窗口或标签页的同域名网页。
  ②在页面加载时,iframe会阻塞父文档onload事件的触发。并且有些浏览器需在触发onload事件后才能被触发onunload事件。
     故用户用onload事件长久未触发而离开页面时,不会触发onunload事件。
    ※不兼容IE6~8的解决方案:使用JavaScript动态加载iframe元素或动态设置其src属性。

  1. <iframe id=ifr ></iframe>
  2. 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样式)。

  1. <img src="hello.png" width="400" height="300">

复制代码

七、避免 脚本阻塞加载
  浏览器在解析常规script标签时,会等待script下载完毕后,才解析执行,之后的HTML代码就只能等待。
  故应该将脚本放在文档的末尾:

  1. <script src="example.js" ></script>
  2. </body>

复制代码

高性能CSS
一、避免使用@import
  CSS2.1加入的@import,会使页面在加载时添加额外延迟。
  由于浏览器不能并行下载样式,会导致页面增添额外的往返耗时。而使用<link>能并行下载样式,但任然是多次请求。
二、避免AlphaImageLoader滤镜
  此滤镜能解决IE6即一下版本显示PNG图片的半透明效果,但会在加载图片时终止内容的呈现,并冻结浏览器。
  在每个元素(不仅仅是图片)都会运算一次,添加内存开支。
  应使用PNG8格式来代替,或用下划线(_filter)只针对IE6。
三、避免CSS表达式
  CSS表达式是设置动态CSS属性的即强调又危险的方法。IE5开始支持,IE独有。

//实现每隔一小时切换一次背景颜色

复制代码

  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;】
二、缓存选择器查询结果
  减少选择器查询的次数,并尽可能缓存选中的结果,便于以后的重用。

  1. jQuery(‘#top‘).find(‘p.classA‘);
  2. ...
  3. jQuery(‘#top‘).find(‘p.classB‘);

复制代码

//使用下面的方法 减少开销

  1. var cached = jQuery(‘#top‘);
  2. cached.find(‘p.classA‘);
  3. ...
  4. cached.find(‘p.classB‘);

复制代码

三、避免频繁的IO操作
  应减少对cookie或localstorage的操作,因为对它们进行操作的API是同步的,而它们是多个tab页面间共享的。
  多页面同时操作cookie和localstorage时,会存在同步加锁机制。

四、避免频繁的DOM操作
  JavaScript访问DOM元素缓慢,应做到:
  ①缓存已经查询过的元素;
  ②线下更新完节点之后,在将它们添加到文档树中;
  ③避免使用JavaScript来修改页面布局。

五、使用微类库
  尽量避免使用大而全的类库,而是按需使用微类库来辅助开发。

转载原文:http://www.w3cfuns.com/blog-5434413-5399486.html

关于Yahoo十四条军规与前端性能优化

时间: 2024-12-15 18:10:17

关于Yahoo十四条军规与前端性能优化的相关文章

雅虎十四条:网站前端网页优化的14条原则

Web应用性能优化黄金法则:先优化前端程序(front-end)的性能,因为这是80%或以上的最终用户响应时间的花费所在. 法则1. 减少HTTP请求次数 80%的最终用户响应时间花在前端程序上,而其大部分时间则花在各种页面元素,如图像.样式表.脚本和Flash等,的下载上.减少页面元素将会减少HTTP请求次数.这是快速显示页面的关键所在. 一种减少页面元素个数的方法是简化页面设计.但是否存在其他方式,能做到既有丰富内容,又能获得快速响应时间呢?以下是这样一些技术: Image maps组合多个

Yahoo前端优化十四条军规

相信互联网已经越来越成为人们生活中不可或缺的一部分.Ajax,flex等等富客户端的应用使得人们越加“幸福”地体验着许多原先只能在C/S实 现的功能. 比如Google机会已经把最基本的office应用都搬到了互联网上.当然便利的同时毫无疑问的也使页面的速度越来越慢.自己是做前端开发的,在性能方面,根据Yahoo的调查,后台只占5%,而前端高达95%之多,其中有88%的东西是可以优化的. 以上是一张web2.0页面的生命周期图.工程师很形象地讲它分成了“怀孕,出生,毕业,结婚”四个阶段.如果在我

MySQL(十四)管理维护及性能优化

关于MySQL的学习,<MySQL必知必会>这本书呢,看完已经两个月了,一直被工作以及生活的一些琐事拖着,趁着今晚有空闲,就整理完了最后的几章学习笔记,接下来的学习计划呢? 应该是python-web开发以及工作上的关于微服务架构的一些知识点:学习是一种习惯,更是一种状态,只有很努力,才能看起来毫不费力! 一.安全管理 1.访问控制 MySQL服务器的安全基础是:用户对他们需要的数据有适当的访问权,即需要给用户所需的权限且仅提供所需的访问权,这就是所谓的访问控制它需要创建和管理用户账号. 注意

雅虎军规十四条

相信互联网已经越来越成为人们生活中不可或缺的一部分.Ajax,flex等等富客户端的应用使得人们越加“幸福”地体验着许多原先只能在C/S实 现的功 能.比如Google机会已经把最基本的office应用都搬到了互联网上.当然便利的同时毫无疑问的也使页面的速度越来越慢.自己是做前端开发的,在性能方面,根据Yahoo的调查,后台只占5%,而前端高达95%之多,其中有88%的东西是可以优化的. 以上是一张web2.0页面的生命周期图.工程师很形象地讲它分成了“怀孕,出生,毕业,结婚”四个阶段.如果在我

雅虎十四条 - 14个优化网站性能提高网站访问速度的技巧

14个优化网站性能提高网站访问速度的技巧 又叫“雅虎十四条”,想起一年前那个懵懂的我,大四傻乎乎的跑到大学城面试前端,那个时候以为寒暑假看了两套CSS的视频,就很牛B了,出发先还把视频温了一下,嗯嗯,这是滑动门,嗯嗯这是绝对定位,嗯嗯这是浮动清除…… 当时是彪叔面试我的,当时我还不知道那个人,全身黑漆漆的,黑色T-shirt,黑色皮肤,黑色帽子,黑色墨镜,还有点黑色胡渣的人,就是彪叔,补做了试题后支支吾吾的跟他谈了一下,发现完全不行,第一个问题是“雅虎十四条”是什么?然后我蒙了,pardon?

请对照这二十四条逻辑谬误自行打脸(转自知乎谢熊猫专栏)

[科普工具文]请对照这二十四条逻辑谬误自行打脸 谢熊猫君 · 1 年前 两年前,我还活跃在人人网的时候,曾经整理过一篇常见逻辑谬误的工具文,用来帮助大家在网络讨论中打脸用: [科普工具文]请对照这二十四条逻辑谬误自行打脸 这两年来在一些社交网站和互联网论坛中常看到有人使用这篇文章,想来也是有点用处的,特意在这边转帖一下,为方便各位在知乎讨论时能更加方便的辨别逻辑问题. ======================= ======================= 本文内容基本都来自于英文网站ht

23条前端性能优化,看懂就够了!

前端性能优化是个巨大的课题,如果要面面俱到的说的话,估计三天三夜说不完.所以我们就从实际的工程应用角度出发,聊我们最常遇见的前端优化问题. 1. 减少HTTP请求次数 尽量合并图片.CSS.JS.比如加载一个页面,如果有5个css文件的话,那么会发出5次http请求,这样会让用户第一次访问你的页面的时候会长时间等待.而如果把这个5个文件合成一个的话,就只需要发出一次http请求,节省网络请求时间,加快页面的加载. 2. 使用CDN 网站上静态资源即css.js全都使用cdn分发,图片亦然. 3.

web前端性能优化

前言:  在同样的网络环境下,两个同样能满足你的需求的网站,一个“Duang”的一下就加载出来了,一个纠结了半天才出来,你会选择哪个?研究表明:用户最满意的打开网页时间是2-5秒,如果等待超过10秒,99%的用户会关闭这个网页.也许这样讲,各位还不会有太多感触,接下来我列举一组数据:Google网站访问速度每慢400ms就导致用户搜索请 求下降0.59%;Amazon每增加100ms网站延迟将导致收入下降1%;雅虎如果有400ms延迟会导致流量下降5-9%.网站的加载速度严重影响了用户体验,也决

Web前端性能优化——如何提高页面加载速度

前言:  在同样的网络环境下,两个同样能满足你的需求的网站,一个"Duang"的一下就加载出来了,一个纠结了半天才出来,你会选择哪个?研究表明:用户最满意的打开网页时间是2-5秒,如果等待超过10秒,99%的用户会关闭这个网页.也许这样讲,各位还不会有太多感触,接下来我列举一组数据:Google网站访问速度每慢400ms就导致用户搜索请 求下降0.59%;Amazon每增加100ms网站延迟将导致收入下降1%;雅虎如果有400ms延迟会导致流量下降5-9%.网站的加载速度严重影响了用户