|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
说说这一个月左右的学习情况和心得吧!我个人认为,既然决定了去做一件事,那就要以认真的态度去对待!既然决定来学习了,那不管当初是抱着怎样的心态来到这个培训班的,都要让自己认真的投入到学习中。 </p> 信任互联网已愈来愈成为人们生涯中不成或缺的一局部。ajax,flex等等富客户真个使用使得人们越加“幸福”地体验着很多本来只能在C/S实 现的功效。好比Google时机已把最根基的office使用都搬到了互联网上。固然便当的同时毫无疑问的也使页面的速度愈来愈慢。本人是做前端开辟的,在功能方面,依据yahoo的查询拜访,后台只占5%,而前端高达95%之多,个中有88%的器材是可以优化的。
以上是一张web2.0页面的性命周期图。工程师很抽象地讲它分红了“怀孕,出身,卒业,娶亲”四个阶段。假如在咱们点击网页链接的时分可以意想到 这个进程而不是复杂的恳求-呼应的话,咱们即可以发掘出良多细节上可以提拔功能的器材。明天听了淘宝小马哥的一个对yahoo开辟团队对web功能研讨的 一个讲座,感到播种很大,想在blog上做个分享。
信任良多人都听过优化网站功能的14条划定规矩。更多的信息可见developer.yahoo.com
1. 尽量的削减 HTTP 的恳求数 [content] 2. 利用 CDN(Content Delivery Network) [server] 3. 添加 Expires 头(或 Cache-control ) [server] 4. Gzip 组件 [server] 5. 将 CSS 款式放在页面的上方 [css] 6. 将剧本挪动究竟部(包含内联的) [javascript] 7. 防止利用 CSS 中的 Expressions [css] 8. 将 JavaScript 和 CSS 自力成内部文件 [javascript] [css] 9. 削减 DNS 查询 [content] 10. 紧缩 JavaScript 和 CSS (包含内联的) [javascript] [css] 11. 防止重定向 [server] 12. 移除反复的剧本 [javascript] 13. 设置装备摆设实体标签(ETags) [css] 14. 使 AJAX 缓存 在firefox下有一个插件yslow,集成在firebug中,你可以用它很便利地来看看本人的网站在这几个方面的体现。
这是对用yslow对我的网站西风坊测评的了局,很遗憾,只要51分。呵呵。中国各大网站的分值都不高,刚测了一下,新浪和网易都是31分。然后yahoo(美国)的分值的确97分!可见yahoo在这方面作出的勉力。从他们总结的这14条划定规矩,已如今又新增添的20个点来看,有良多细节咱们真得是怎样都不会去想,有些做法乃至是有些“反常”了。
第一条、尽量的削减 HTTP 的恳求数 (Make Fewer HTTP Requests )
http恳求是要开支的,想举措削减恳求数天然可以进步网页速度。经常使用的办法,兼并css,js(将一个页面中的css和js文件分离兼并)和 Image maps和css sprites等。固然也许将css,js文件拆分多个是由于css布局,共用等方面的思索。阿里巴巴中文站事先的做法是开辟时仍然分隔开辟,然后在后台 对js,css停止兼并,如许关于阅读器来讲仍然是一个恳求,然而开辟时依然能复原成多个,便利办理和反复援用。yahoo乃至建议将首页的css和js 直接写在页面文件外面,而不是内部援用。由于首页的会见量太大了,这么做也能够削减两个恳求数。而现实上国际的良多门户都是这么做的。
而css sprites是指只用将页面上的后台图兼并成一张,然后经由过程css的background-position属性界说不外的值来取他的后台。淘宝和阿里巴巴中文站今朝都是如许做的。有乐趣的可以看下淘宝和阿里巴巴的后台图。
http://www.csssprites.com/ 这是个东西网站,它可以主动将你上传的图片兼并并给出对应的background-position坐标。并将了局以png和gif的格局输入。
第二条、利用CDN(内容分发收集): Use a Content Delivery Network
说假话,关于CDN这一块本人并非很懂得,复杂地讲,经由过程在现有的Internet中增添一层新的收集架构,将网站的内容宣布到最接近用户的 cache办事器内,经由过程DNS负载平衡的手艺,判别用户来历就近会见cache办事器获得所需的内容,杭州的用户会见近杭州办事器上的内容,北京的会见 近北京办事器上的内容。如许可以无效削减数据在收集上传输的工夫,进步速度。更具体地内容人人可以参考百度百科上关于CDN的注释。Yahoo!把静态内容散布到CDN削减了用户影响工夫20%或更多。
CDN手艺表示图:
CDN组网表示图:
第三条、 添加Expire/Cache-Control 头:Add an Expires Header
如今愈来愈多的图片,剧本,css,Flash被嵌入到页面中,当咱们会见他们的时分必将会做很多次的http恳求。其实咱们可以经由过程设置Expires header 来缓存这些文件。Expire其实就是经由过程header报文来指定特定类型的文件在览器中的缓存工夫。大多半的图片,flash在宣布后都是不需求常常修 改的,做了缓存今后如许阅读器今后就不需求再从办事器下载这些文件而是而直接从缓存中读取,如许再次会见页面的速度会大大加速。一个典范的HTTP 1.1协定前往的头信息:
HTTP/1.1 200 OK
Date: Fri, 30 Oct 1998 13:19:41 GMT
Server: Apache/1.3.3 (Unix)
Cache-Control: max-age=3600, must-revalidate
Expires: Fri, 30 Oct 1998 14:19:41 GMT
Last-Modified: Mon, 29 Jun 1998 02:28:12 GMT
ETag: “3e86-410-3596fbbc”
Content-Length: 1040
Content-Type: text/html
个中经由过程办事器端剧本设置Cache-Control和Expires可以完成。
如,在php中设置30天后过时:
- <!--pHeader("Cache-Control: must-revalidate"); $offset = 60 * 60 * 24 * 30; $ExpStr = "Expires: " . gmdate("D, d M Y H:i:s", time() + $offset) . " GMT"; Header($ExpStr);-->
复制代码 也能够经由过程设置装备摆设办事器自己完成,这些偶就不是很清晰了,呵呵。想懂得跟多的伴侣可以参考http://www.web-caching.com/
据我懂得,今朝阿里巴巴中文站的Expires过时工夫是30天。不外时代也有干预干与题,出格是关于剧本过时工夫的设置仍是应当细心思索下,否则响应的剧本功效更新后客户端能够要过很长一段工夫才干“感知”到如许的变更。之前做[suggest项目] 的时分就碰到过这个成绩。所以,哪些应当缓存,哪些不应缓存仍是应当细心推敲一番。
第四条、启用Gzip紧缩:Gzip Components
Gzip的思惟就是把文件先在办事器端停止紧缩,然后再传输。如许可以明显削减文件传输的巨细。传输终了后阅读器会 从头对紧缩过的内容停止解紧缩,并履行。今朝的阅读器都能“优秀”地撑持 gzip。不但阅读器可以辨认,并且各大“爬虫”也一样可以辨认,列位搜索引擎优化er可以放下心了。并且gzip的紧缩比例十分大,普通紧缩率为85%,就是 压服务器端100K的页面可以紧缩到25K摆布再发送到客户端。详细的Gzip紧缩道理人人可以参考csdn上的《gzip紧缩算法》 这篇文章。雅虎出格强调, 一切的文本内容都应当被gzip紧缩: html (php), js, css, xml, txt… 这一点咱们网站做得不错,是一个A。之前咱们的首页也并非A,由于首页上还有良多告白代码投放的js,这些告白代码具有者的网站的js没有经由gzip紧缩,也会拖累咱们网站。
以上三点大多属于办事器真个内容,自己也是深刻地懂得罢了。说得不合错误的中央有待列位斧正。
第五条、将css放在页面最下面 ( Put Stylesheets at the Top)
将css放在页面最下面,这是为何?由于 ie,firefox等阅读器在css全体传输完整之前不会去衬着任何的器材。来由诚如小马哥说得那样很复杂。css,全称Cascading Style Sheets (层叠款式表单)。层叠即意味这前面的css可以掩盖后面的css,级别高的css可以掩盖级别低的css。在[css之!important] 这篇文章的最上面曾复杂地提到过这层级关系,这里咱们只需求晓得css可以被掩盖的。既然后面的可以被掩盖,阅读器在他完整加载终了以后再去衬着无疑也是通情达理的良多阅读器下,如IE,把款式表放在页面的底部的成绩在于它制止了网页内容的按次显示。阅读器禁止显示以避免重画页面元素,那用户只能看到空白页了。Firefox不会禁止显示,但这意味着当款式表下载后,有些页面元素能够需求重画,这招致闪灼成绩。所以咱们应当尽快让css加载终了
顺着这层意思,假如咱们再细究的话,其实还有可以优化的中央。好比本站下面包括的两个css文件,<link rel=“stylesheet” rev=“stylesheet” href=“http://www.space007.com/themes/谷歌/style/谷歌.css” type=“text/css” media=“screen” /> 和<link rel=“stylesheet” rev=“stylesheet” href=“http://www.space007.com/css/print.css” type=“text/css” media=“print” />。 从media就能够看出第一个css是针对阅读器的,第二个css文件是针对打印款式的。从用户的行动习气下去将,要打印页面的举措必定是产生在页面页面 显示出来以后的。所以对照好的办法应当是在页面加载终了以后再静态地为这张页面加上针对打印装备的css,如许又可以进步一点速度。(哈哈)
第六条、将script放在页面最上面 (Put Scripts at the Bottom )
将剧本放在页面最上面的目标有那末两点: 1、 由于避免script剧本的履行壅塞页面的下载。在页面loading的过程当中,当阅读器读到js履行语句的时分必定会把它全体注释终了后在会接上去读下 面的内容。不信你可以写一个js逝世轮回看看页面上面的器材还会不会出来。(setTimeout 和 setInterval的履行有点相似于多线程,在响应的呼应工夫之前也会持续上面的内容衬着。)阅读器这么做的逻辑是由于js随时能够执 行 location.href或是其他能够完整中止此页面进程的函数,即如斯,固然得等他履行终了以后再加载咯。所以放在页面最初,可以无效削减页面可 视元素的加载工夫。 2、剧本引发的第二个成绩是它壅塞并行下载数目。HTTP/1.1标准建议阅读器每一个主机的并行下载数不超越2个(IE只能为2个,其他阅读器如ff等都是默许设置为2个,不外新出的ie8可以达6个)。因而假如您把图象文件散布到多台机械的话,您可以到达超越2个的并行下载。然而当剧本文件下载时,阅读器不会启动其他的并行下载。
固然对各个网站来讲,把剧本都放到页面底部加载的可行性仍是值得商议的。就好比阿里巴巴中文站的页面。良多中央有内联的js,页面的显示严重依附于此,我供认这和无侵入剧本的理念相差甚远,然而良多“汗青遗留成绩”却不是那末轻易处理的。
第七条、防止在CSS中利用Expressions (Avoid CSS Expressions )
不外如许就多了两层有意义的嵌套,一定欠好。还需求一个更好的举措。
第八条、把javascript和css都放到内部文件中(Make JavaScript and CSS External )
这点我想仍是很轻易了解的。不但从功能优化上会这么做,用代码易于保护的角度看也应当这么做。把css和js写在页面内容可以削减2次恳求,但也增 大了页面的巨细。假如已对css和js做了缓存,那也就没有2次过剩的http恳求了。固然,我在后面中也说过,有些特别的页面开辟人员仍是会选择内联 的css和js文件。
第九条、削减DNS查询 (Reduce DNS Lookups)
在 Internet上域名与IP地址之间是逐一对应的,域名(kuqin.com)很好记,但盘算机不熟悉,盘算机之间的“相认”还要转成ip地址。在收集 上每台盘算机都对应有一个自力的ip地址。在域名和ip地址之间的转换任务称为域名解析,也称DNS查询。一次DNS的解析进程会损耗20-120毫秒的 工夫,在dns查询停止之前,阅读器不会下载该域名下的任何器材。所以削减dns查询的工夫可以加速页面的加载速度。yahoo的建议一个页面所包括的域 名数尽可能掌握在2-4个。这就需求对页面全体有一个很好的计划。今朝咱们这点做的欠好,良多打点的告白投放体系拖累了咱们。
第十条、紧缩 JavaScript 和 CSS (Minify JavaScript )
紧缩js和css的摆布很明显,削减页面字节数。容量小页面加载速度天然也就快。并且紧缩除削减体积之外还可以起到必定的回护摆布。这点咱们做得不错。经常使用的紧缩东西有JsMin、YUI compressor等。别的像http://dean.edwards.name/packer/还给咱们供应了一个十分便利的在线紧缩东西。你可以在jQuery的网页看到紧缩过的js文件和没有紧缩过的js文件的容量不同:
固然,紧缩带来的一个坏处就是代码的可读性没了。信任良多做前真个伴侣都碰到过这个成绩:看Google的后果很酷,可是去看他的源代码倒是一大堆 挤在一同的字符,连函数名都是交换过的,汗逝世!本人的代码也如许岂不是对保护十分不便利。一切阿里巴巴中文站今朝采取的做法是在js和css宣布的时分在 办事器端停止紧缩。如许在咱们很便利地保护本人的代码。
第十一条、防止重定向(Avoid Redirects )
不久前在ieblog上看到过《Internet Explorer and Connection Limits》这篇文章,好比 当你输出http://www.webjx.com/ 的时分办事器会主动发生一个301办事器转向 http://www.webjx.com/ ,你看阅读器的地址栏就可以看出来。这类重定向天然也是需求损耗工夫的。固然这只是一个例子,产生重定向的缘由还有良多,然而不变的是每增添一次重定向就会增添一次web恳求,所以因该尽可能削减。
第十二条、移除反复的剧本(Remove Duplicate Scripts )
这点我想不说也晓得,不但是从功能上思索,代码标准上看也是如许。然而不能不供认,良多时分咱们会由于图一时之快而加上一些也许是反复的代码。也许一个一致的css框架和js框架可以对照好的处理咱们的成绩。小猪的概念很对,不但是要做到不反复,更是要做到可重用。
第十三条、设置装备摆设实体标签(ETags)(Configure ETags )
这点我也不懂,呵呵。在inforQ上找到一篇注释得对照具体的申明《利用ETags削减Web使用带宽和负载》,有乐趣的同窗可以去看看。
第十四条、使 AJAX 缓存 (Make Ajax Cacheable )
ajax还要去缓存?做ajax恳求的时分常常还要增添一个工夫戳去防止他缓存。It’s important to remember that “asynchronous” does not imply “instantaneous”.(记住“异步”不是“刹时”这一点很主要)。记住,即便AJAX是静态发生的并且只对一个用户起感化,他们仍然可以被缓 存。
也或许是因为我还没有真正的学到深处吧,说实在的,PHP中的很多高级点的应用,如PHP类、PHP函数基本还是不懂吧! |
|