精华内容
下载资源
问答
  • WEB优化

    2008-10-01 01:30:00
    WEB优化 涵盖的内容 很广泛! 从前台到后台,都需要优化。 甚至现在流行的面向搜索引擎优化。 下面是雅虎的web优化 14条 网页加速的14条优化法则 最近,YouMonitor.Us在做Web应用性能优化,在网上发现了文章High ...
    WEB优化 涵盖的内容 很广泛! 
    从前台到后台,都需要优化。
    甚至现在流行的面向搜索引擎优化。


    下面是雅虎的web优化 14条

    网页加速的14条优化法则

    最近,YouMonitor.Us在做Web应用性能优化,在网上发现了文章High Performance Web Sites: The Importance of Front-End Performance,感觉其14条优化法则很实用,操作性很强。因此翻译出来,供大家参考。



    Web应用性能优化黄金法则:先优化前端程序(front-end)的性能,因为这是80%或以上的最终用户响应时间的花费所在。

    法则1. 减少HTTP请求次数
    80%的最终用户响应时间花在前端程序上,而其大部分时间则花在各种页面元素,如图像、样式表、脚本和Flash等,的下载上。减少页面元素将会减少HTTP请求次数。这是快速显示页面的关键所在。

    一种减少页面元素个数的方法是简化页面设计。但是否存在其他方式,能做到既有丰富内容,又能获得快速响应时间呢?以下是这样一些技术:

    Image maps组合多个图片到一张图片中。总文件大小变化不大,但减少了HTTP请求次数从而加快了页面显示速度。该方式只适合图片连续的情况;同时坐标的定义是烦人又容易出错的工作。

    CSS Sprites是更好的方法。它可以组合页面中的图片到单个文件中,并使用CSS的background-image和background-position属性来现实所需的部分图片。

    Inline images使用data: URL scheme来在页面中内嵌图片。这将增大HTML文件的大小。组合inline images到你的(缓存)样式表是既能较少HTTP请求,又能避免加大HTML文件大小的方法。

    Combined files通过组合多个脚本文件到单一文件来减少HTTP请求次数。样式表也可采用类似方法处理。这个方法虽然简单,但没有得到大规模的使用。10大美国网站每页平均有7个脚本文件和2个样式表。当页面之间脚本和样式表变化很大时,该方式将遇到很大的挑战,但如果做到的话,将能加快响应时间。



    减少HTTP请求次数是性能优化的起点。这最提高首次访问的效率起到很重要的作用。据Tenni Theurer的文章Browser Cache Usage - Exposed!描述,40-60%的日常访问是首次访问,因此为首次访问者加快页面访问速度是用户体验的关键。

    法则2. 使用CDN(Content Delivery Network, 内容分发网络)
    用户离web server的远近对响应时间也有很大影响。从用户角度看,把内容部署到多个地理位置分散的服务器上将有效提高页面装载速度。但是该从哪里开始呢?

    作为实现内容地理分布的第一步,不要试图重构web应用以适应分布架构。改变架构将导致多个周期性任务,如同步session状态,在多个server之间复制数据库交易。这样缩短用户与内容距离的尝试可能被应用架构改版所延迟,或阻止。

    我们还记得80-90%的最终用户响应时间花在下载页面中的各种元素上,如图像文件、样式表、脚本和Flash等。与其花在重构系统这个困难的任务上,还不如先分布静态内容。这不仅能大大减少响应时间,而且由于CDN的存在,分布静态内容非常容易实现。

    CDN是地理上分布的web server的集合,用于更高效地发布内容。通常基于网络远近来选择给具体用户服务的web server。

    一些大型网站拥有自己的CDN,但是使用如Akamai Technologies, Mirror Image Internet, 或 Limelight Networks等CDN服务提供商的服务将是划算的。在Yahoo!把静态内容分布到CDN减少了用户影响时间20%或更多。切换到CDN的代码修改工作是很容易的,但能达到提高网站的速度。

    法则3. 增加Expires Header
    网页内容正变得越来越丰富,这意味着更多的脚本文件、样式表、图像文件和Flash。首次访问者将不得不面临多次HTTP请求,但通过使用Expires header,您可以在客户端缓存这些元素。这在后续访问中避免了不必要的HTTP请求。Expires header最常用于图像文件,但是它也应该用于脚本文件、样式表和Flash。

    浏览器(和代理)使用缓存来减少HTTP请求的次数和大小,使得网页加速装载。Web server通过Expires header告诉客户端一个元素可以缓存的时间长度。

    如果服务器是Apache的话,您可以使用ExpiresDefault基于当期日期来设置过期日期,如:

    ExpiresDefault “access plus 10 years” 设置过期时间为从请求时间开始计算的10年。

    请记住,如果使用超长的过期时间,则当内容改变时,您必须修改文件名称。在Yahoo!我们经常把改名作为release的一个步骤:版本号内嵌在文件名中,如yahoo_2.0.6.js。

    法则4. 压缩页面元素
    通过压缩HTTP响应内容可减少页面响应时间。从HTTP/1.1开始,web客户端在HTTP请求中通过Accept-Encoding头来表明支持的压缩类型,如:

    Accept-Encoding: gzip, deflate.

    如果Web server检查到Accept-Encoding头,它会使用客户端支持的方法来压缩HTTP响应,会设置Content-Encoding头,如:Content-Encoding: gzip。

    Gzip是目前最流行及有效的压缩方法。其他的方式如deflate,但它效果较差,也不够流行。通过Gzip,内容一般可减少70%。如果是Apache,在1.3版本下需使用mod_gzip模块,而在2.x版本下,则需使用mod_deflate。

    Web server根据文件类型来决定是否压缩。大部分网站对HTML文件进行压缩。但对脚本文件和样式表进行压缩也是值得的。实际上,对包括XML和JSON在内的任务文本信息进行压缩都是值得的。图像文件和PDF文件不应该被压缩,因为它们本来就是压缩格式保存的。对它们进行压缩,不但浪费CPU,而且还可能增加文件的大小。

    因此,对尽量多的文件类型进行压缩是一种减少页面大小和提高用户体验的简便方法。

    法则5. 把样式表放在头上
    我们发现把样式表移到HEAD部分可以提高界面加载速度,因此这使得页面元素可以顺序显示。

    在很多浏览器下,如IE,把样式表放在document的底部的问题在于它禁止了网页内容的顺序显示。浏览器阻止显示以免重画页面元素,那用户只能看到空白页了。Firefox不会阻止显示,但这意味着当样式表下载后,有些页面元素可能需要重画,这导致闪烁问题。

    HTML规范明确要求样式表被定义在HEAD中,因此,为避免空白屏幕或闪烁问题,最好的办法是遵循HTML规范,把样式表放在HEAD中。

    法则6. 把脚本文件放在底部
    与样式文件一样,我们需要注意脚本文件的位置。我们需尽量把它们放在页面的底部,这样一方面能顺序显示,另方面可达到最大的并行下载。

    浏览器会阻塞显示直到样式表下载完毕,因此我们需要把样式表放在HEAD部分。而对于脚本来说,脚本后面内容的顺序显示将被阻塞,因此把脚本尽量放在底部意味着更多内容能被快速显示。

    脚本引起的第二个问题是它阻塞并行下载数量。HTTP/1.1规范建议浏览器每个主机的并行下载数不超过2个。因此如果您把图像文件分布到多台机器的话,您可以达到超过2个的并行下载。但是当脚本文件下载时,浏览器不会启动其他的并行下载,甚至其他主机的下载也不启动。

    在某些情况下,不是很容易就能把脚本移到底部的。如,脚本使用document.write方法来插入页面内容。同时可能还存在域的问题。不过在很多情况下,还是有一些方法的。

    一个备选方法是使用延迟脚本(deferred script)。DEFER属性表明脚本未包含document.write,指示浏览器刻继续显示。不幸的是,Firefox不支持DEFER属性。在IE中,脚本可能被延迟执行,但不一定得到需要的长时间延迟。不过从另外角度来说,如果脚本能被延迟执行,那它就可以被放在底部了。

    法则7. 避免CSS表达式
    CSS表达式是功能强大的(同时也是危险的)用于动态设置CSS属性的方式。IE,从版本5开始支持CSS表达式,如backgourd-color: expression((new Date()).getHours()%2?”#B8D4FF”:”#F08A00”),即背景色每个小时切换一次。

    CSS表达式的问题是其执行次数超过大部分人的期望。不仅页面显示和resize时计算表达式,而且当页面滚屏,甚至当鼠标在页面上移动时都会重新计算表达式。

    一种减少CSS表达式执行次数的方法是一次性表达式,即当第一次执行时就以明确的数值代替表达式。如果必须动态设置的话,可使用事件处理函数代替。如果您必须使用CSS表达式的话,请记住它们可能被执行上千次,从而影响页面性能。

    法则8. 把JavaScript和CSS放到外部文件中
    上述很多性能优化法则都基于外部文件进行优化。现在,我们必须问一个问题:JavaScript和CSS应该包括在外部文件,还是在页面文件中?

    在现实世界中,使用外部文件会加快页面显示速度,因为外部文件会被浏览器缓存。如果内置JavaScript和CSS在页面中虽然会减少HTTP请求次数,但增大了页面的大小。另外一方面,使用外部文件,会被浏览器缓存,则页面大小会减小,同时又不增加HTTP请求次数。

    因此,一般来说,外部文件是更可行的方式。唯一的例外是内嵌方式对主页更有效,如Yahoo!和My Yahoo!都使用内嵌方式。一般来说,在一个session中,主页访问此时较少,因此内嵌方式可以取得更快的用户响应时间。

    法则9. 减少DNS查询次数
    DNS用于映射主机名和IP地址,一般一次解析需要20~120毫秒。为达到更高的性能,DNS解析通常被多级别地缓存,如由ISP或局域网维护的caching server,本地机器操作系统的缓存(如windows上的DNS Client Service),浏览器。IE的缺省DNS缓存时间为30分钟,Firefox的缺省缓冲时间是1分钟。

    减少主机名可减少DNS查询的次数,但可能造成并行下载数的减少。避免DNS查询可减少响应时间,而减少并行下载数可能增加响应时间。一个可行的折中是把内容分布到至少2个,最多4个不同的主机名上。

    法则10. 最小化JavaScript代码
    最小化JavaScript代码指在JS代码中删除不必要的字符,从而降低下载时间。两个流行的工具是JSMin 和YUI Compressor。

    混淆是最小化于源码的备选方式。象最小化一样,它通过删除注释和空格来减少源码大小,同时它还可以对代码进行混淆处理。作为混淆的一部分,函数名和变量名被替换成短的字符串,这使得代码更紧凑,同时也更难读,使得难于被反向工程。Dojo Compressor (ShrinkSafe)是最常见的混淆工具。

    最小化是安全的、直白的过程,而混淆则更复杂,而且容易产生问题。从对美国10大网站的调查来看,通过最小化,文件可减少21%,而混淆则可减少25%。

    除了最小化外部脚本文件外,内嵌的脚本代码也应该被最小化。即使脚本根据法则4被压缩后传输,最小化脚本刻减少文件大小5%或更高。

    法则11. 避免重定向
    重定向功能是通过301和302这两个HTTP状态码完成的,如:

          HTTP/1.1 301 Moved Permanently      Location: http://example.com/newuri      Content-Type: text/html

    浏览器自动重定向请求到Location指定的URL上,重定向的主要问题是降低了用户体验。

    一种最耗费资源、经常发生而很容易被忽视的重定向是URL的最后缺少/,如访问http://astrology.yahoo.com/astrology将被重定向到http://astrology.yahoo.com/astrology/。在Apache下,可以通过Alias,mod_rewrite或DirectorySlash等方式来解决该问题。

    法则12. 删除重复的脚本文件
    在一个页面中包含重复的JS脚本文件会影响性能,即它会建立不必要的HTTP请求和额外的JS执行。

    不必要的HTTP请求发生在IE下,而Firefox不会产生多余的HTTP请求。额外的JS执行,不管在IE下,还是在Firefox下,都会发生。

    一个避免重复的脚本文件的方式是使用模板系统来建立脚本管理模块。除了防止重复的脚本文件外,该模块还可以实现依赖性检查和增加版本号到脚本文件名中,从而实现超长的过期时间。

    法则13. 配置ETags
    ETags是用于确定浏览器缓存中元素是否与Web server中的元素相匹配的机制,它是比last-modified date更灵活的元素验证机制。ETag是用于唯一表示元素版本的字符串,它需被包括在引号中。Web server首先在response中指定ETag:

          HTTP/1.1 200 OK      Last-Modified: Tue, 12 Dec 2006 03:03:59 GMT      ETag: "10c24bc-4ab-457e1c1f"      Content-Length: 12195后来,如果浏览器需要验证某元素,它使用If-None-Match头回传ETag给Web server,如果ETag匹配,则服务器返回304代码,从而节省了下载时间:

          GET /i/yahoo.gif HTTP/1.1      Host: us.yimg.com      If-Modified-Since: Tue, 12 Dec 2006 03:03:59 GMT      If-None-Match: "10c24bc-4ab-457e1c1f"      HTTP/1.1 304 Not Modified

    ETags的问题在于它们是基于服务器唯一性的某些属性构造的,如Apache1.3和2.x,其格式是inode-size-timestamp,而在IIS5.0和6.0下,其格式是Filetimestamp:ChangeNumber。这样同一个元素在不同的web server上,其ETag是不一样的。这样在多Web server的环境下,浏览器先从server1请求某元素,后来向server2验证该元素,由于ETag不同,所以缓存失效,必须重新下载。

    因此,如果您未用到ETags系统提供的灵活的验证机制,最好删除ETag。删除ETag会减少http response及后续请求的HTTP头的大小。微软支持文章描述了如何删除ETags,而在Apache下,只要在配置文件中设置FileETag none即可。

    法则14. 缓存Ajax
    性能优化法则同样适用于web 2.0应用。提高Ajax的性能最重要的方式是使得其response可缓存,就象“法则3增加Expires Header”讨论的那样。以下其他法则同样适用于Ajax,当然法则3是最有效的方式:

    法则4. 压缩页面元素

    法则9. 减少DNS查询次数

    法则10. 最小化脚本文件

    法则11. 避免重定向

    法则13. 配置ETags.
    展开全文
  • web优化

    2015-10-21 13:10:48
    web开发时有很多需要优化的地方,下面就与大家简单的介绍一下对web方面的一下优化的信息: 优化分为界面优化与后台优化同时也有服务器的优化 1、界面优化  在加载界面时先加载CSS的样式,在加载相关的标签,...

    在web开发时有很多需要优化的地方,下面就与大家简单的介绍一下对web方面的一下优化的信息:

    优化分为界面优化与后台优化同时也有服务器的优化

    1、界面优化

          在加载界面时先加载CSS的样式,在加载相关的标签,最后加载JS的代码,这样可以加快渲染的的速度,在加载JS时一般放在页面的底部,加载的方式为:ready

        对加载的css与js、图片进行压缩,可以减少加载的流量,这样也可以加快渲染的速度,要不CSS与JS从界面上提取出来,这样既便于维护也便于加快       界面的加载的速度。

       

    压缩源码和图片

    JavaScript文件源代码可以采用混淆压缩的方式,CSS文件源代码进行普通压缩,JPG图片可以根据具体质量来压缩为50%到70%,PNG可以使用一些开源压缩软件来压缩,比如24色变成8色、去掉一些PNG格式信息等。

    选择合适的图片格式

    如果图片颜色数较多就使用JPG格式,如果图片颜色数较少就使用PNG格式,如果能够通过服务器端判断浏览器支持WebP,那么就使用WebP格式和SVG格式。

    合并静态资源

    包括CSS、JavaScript和小图片,减少HTTP请求。

    开启服务器端的Gzip压缩

    这对文本资源非常有效,对图片资源则没那么大的压缩比率。

    使用CDN

    或者一些公开库使用第三方提供的静态资源地址(比如jQuery、normalize.css)。一方面增加并发下载量,另一方面能够和其他网站共享缓存。

    延长静态资源缓存时间

    这样,频繁访问网站的访客就能够更快地访问。不过,这里要通过修改文件名的方式,确保在资源更新的时候,用户会拉取到最新的内容。

    把CSS放在页面头部,把JavaScript放在页面底部

    这样就不会阻塞页面渲染,让页面出现长时间的空白。

       



    2、后台的优化

        在后台的代码中主要体现在代码的高效性,如果能使用JDK的新特性,尽量使用新特性,这样增加了编译的速度,从而加快了执行的速度     


    3、服务器端的优化

           找到项目运行时的瓶颈,就像模板效应一样,把最短的一段补齐,这样可以提高web的加载的速度

    展开全文
  • Web优化

    2012-10-30 11:19:14
    Web 前端优化最佳实践之Content篇    1. 尽量减少 HTTP 请求 (Make Fewer HTTP Requests)  作为第一条,可能也是最重要的一条。根据 Yahoo!研究团队的数据分析,有很大一部分用户访问会因为这一条而取得...

    Web 前端优化最佳实践之Content篇

     

      1. 尽量减少 HTTP 请求 (Make Fewer HTTP Requests)

      作为第一条,可能也是最重要的一条。根据 Yahoo!研究团队的数据分析,有很大一部分用户访问会因为这一条而取得最大受益。有几种常见的方法能切实减少 HTTP 请求:

      2. 减少 DNS 查找 (Reduce DNS Lookups)

      必须明确的一点,DNS 查找的开销是很大的。另外,我倒是觉得这是 Yahoo!所有站点的通病,Yahoo!主站点可能还不够明显,一些分站点,存在明显的类似问题。对于国内站点来说,如果过多的使用了站外的 Widget ,也很容易引起过多的 DNS 查找问题。

      3. 避免重定向 (Avoid Redirects)

      不是绝对的避免,尽量减少。另外,应该注意一些不必要的重定向。比如对 Web 站点子目录的后面添加个/(Slash),就能有效避免一次重定向。http://www.dbanotes.net/arch 与 http://www.dbanotes.net/arch/ 二者之间是有差异的。如果是 Apache 服务器,通过配置 Alias 或mod_rewrite 或是 DirectorySlash 能够消除这个问题。

      4. 使得 Ajax 可缓存 (Make Ajax Cacheable)

      响应时间对 Ajax来说至关重要,否则用户体验绝对好不到哪里去。提高响应时间的有效手段就是 Cache 。其它的一些优化规则对这一条也是有效的。

      5. 延迟载入组件 (Post-load Components)

      6. 预载入组件 (Preload Components)

      上面两条严格说来,都是属于异步 这个思想灵活运用的事儿。

      7. 减少 DOM 元素数量 (Reduce the Number of DOM Elements)

      8. 切分组件到多个域 (Split Components Across Domains)

      主要的目的是提高页面组件并行下载能力。但不要跨太多域名,否则就和第二条有些冲突了。

      9. 最小化 iframe 的数量 (Minimize the Number of iframes)

      熟悉 SEO 的朋友知道 iframe 是 SEO 的大忌。针对前端优化来说 iframe 有其好处,也有其弊端,一分为二看问题吧。

      10. 杜绝 http 404 错误 (No 404s)

      对页面链接的充分测试加上对 Web 服务器 error 日志的不断跟踪能有效减少 404 错误,亦能提升用户体验。值得一提的是,CSS 与 Java Script 引起的 404 错误因为定位稍稍”难”一点而往往容易被忽略。

      Web 前端优化最佳实践之Server篇

      1. 使用 CDN (Use a Content Delivery Network)

      国内 CDN 的普及还不够。不过我们有独特的电信、网通之间的问题 ,如果针对这个作优化,基本上也算能收到 CDN 或类似的效果吧(假装如此)。【Tin 说国内 CDN 用的挺多,看看 CDN 厂商的市场就知道了,还没走入寻常百姓家】

      2. 添加 Expires 或 Cache-Control 信息头 (Add an Expires or a Cache-Control Header)

      各个浏览器都有针对的方案, Apache 例子【注意:下面的说明例子还不够精细,具体的环境上还要加一些调整】:

      Conf 代码

    • ExpiresActive On ExpiresByType image/gif “modification plus 1 weeks”
    • Lighttpd 启用 mod_expire 模块 后:
    • $HTTP["url"] =~ “\.(jpg|gif|png)$” { expire.url = ( “” => “access 1 years” ) }
    • Nginx 例子参考:
    • location ~* \.(jpg|gif|png)$ { if (-f $request_filename) { expires max; break; } }

      3. 压缩内容 (Gzip Components)

      对于绝大多数站点,这都是必要的一步,能有效减轻网络流量压力。或许有人担心对 CPU 压缩对于 CPU 的影响,放心大胆的整吧,没事儿。Nginx例子:

      gzip on; gzip_types text/plain text/html text/css ext/javascript;

      另外参见:IIS 如何启用 Gzip 压缩?

      4. 设置 Etags (Configure ETags)

      对于 Etag ,可能是多数网站维护者都会忽略的地方。在这一系列优化规则出现之前,可能互联网上绝大多数站点都对这个问题忽略了。当然,Etag 对多数站点性能的影响并不是很大。除非是面向 RSS 的网站。【看到有朋友批评说写的简略,并且说 IE 不支持 ETag。明确说一下:IE 支持 ETag,倒是使用 IIS 要注意相关 Etag Bug。】

      补充:我的意思是”很多网站在不注意的情况下都是打开 Etag 的,而没有网站关心如何用,消耗资源而不知。并不是说 Etag 不好,合理利用 Etag ,绝对能取得很好的收益.

      5. 尽早刷新 Buffer (Flush the Buffer Early)

      对这一条,琢磨了半天,貌似还是异步的思路。能更好的提升用户体验?

      6. 对 AJAX 请求使用 GET 方法 (Use GET for AJAX Requests)

      XMLHttpRequest POST 要两步,而 GET 只需要一步。但要注意的是在 IE 上 GET 最大能处理的 URL 长度是 2K。

      Web 前端优化最佳实践之Cookie篇

      1. 缩小 Cookie (Reduce Cookie Size)

      Cookie 是个很有趣的话题。根据 RFC 2109 的描述,每个客户端最多保持 300 个 Cookie,针对每个域名最多 20 个 Cookie (实际上多数浏览器现在都比这个多,比如 Firefox是 50 个),每个 Cookie 最多 4K,注意这里的 4K 根据不同的浏览器可能不是严格的 4096 。别扯远了,对于 Cookie 最重要的就是,尽量控制 Cookie 的大小,不要塞入一些无用的信息。

      2. 针对 Web 组件使用域名无关性的 Cookie (Use Cookie-free Domains for Components)

      这个话题在此前针对 Web 图片服务器 的讨论中曾经提及。这里说的 Web 组件(Component),多指静态文件,比如图片 CSS 等,Yahoo!的静态文件都在yimg.com 上,客户端请求静态文件的时候,减少了 Cookie 的反复传输对主域名(yahoo.com)的影响。

      从这篇 When the Cookie Crumbles 能看出,MySpace 和 eBay的 Cookie 都不小的,想必是对用户行为比较关心。eBay前不久构造了 Personalization Platform ,就是从 Cookie 的限制中跳出来。

      Web 前端优化最佳实践第四部分面向CSS篇

      1. 把 CSS 放到代码页上端 (Put Stylesheets at the Top)

      官方的解释我觉得多少有点语焉不详。这一条其实和用户访问期望有关。CSS 放到最顶部,浏览器能够有针对性的对 HTML 页面从顶到下进行解析和渲染。没有人喜欢等待,而浏览器已经考虑到了这一点。

      2. 避免 CSS 表达式 (Avoid CSS Expressions)

      个人认为通过 CSS 表达式能做到的事情,通过其它手段也同样能做到而且风险更小一些。

      3. 从页面中剥离 JavaScript 与 CSS (Make JavaScript and CSS External)

      剥离后,能够有针对性的对其进行单独的处理策略,比如压缩或者缓存策略。

      4. 精简 JavaScript 与 CSS (Minify JavaScript and CSS )

      如果没有 JavaScript 与 CSS 可能更好。但,这是不可能的,SO,尽量小点吧。语法能简写的简写。

      5. 使用 <link> 而不是@importChoose <link> over @import

      在 IE 中 @import 指令等同于把 link 标记写在 HTML 的底部。而这与第一条相违背。

      6. 避免使用Filter (Avoid Filters)

      另请参见 Mozilla 开发者中心的文章:Writing Efficient CSS

      Web 前端优化最佳实践之JavaScript 篇

      1. 脚本放到 HTML 代码页底部 (Put Scripts at the Bottom)

      当一个脚本在下载的时候,浏览器干不了其它的事儿(串行了)。所以,把它扔到最后面去处理。对于一些功能性的脚本,可能实现起来有些两难。不过对于国内网站来说,有很多使用 Google Analytics 服务进行网站数据分析的。这这一点来说,绝对可行的建议,放到页面最底下。

      2. Make JavaScript and CSS External

      参见 CSS 篇的描述

      3. 精简 JavaScript 与 CSS (Minify JavaScript and CSS )

      参见 CSS 篇的描述

      4. 移除重复脚本 (Remove Duplicate Scripts)

      对于一些历史遗留站点或是论坛类的网站来说,这倒是比较常见的。接手维护人前后变化过多,每个人都有自己的一套。这就会带来一些潜在的麻烦。

      5. 减少 DOM 访问 (Minimize DOM Access)

      有三条指导建议:

    • 缓存已经访问过的元素(Cache references to accessed elements)
    • “ 离线”更新节点,再将它们添加到树中(Update nodes “offline” and then add them to the tree)
    • 避免使用 JavaScript 输出页面布局–应该是 CSS 的事儿(Avoid fixing layout with JavaScript)

      6. Develop Smart Event Handlers

      除了英文解释外,这里也提醒一下注意关于 Java Script 内存泄漏 的问题。

      Web前端优化最佳实践之图片篇

      1. 优化图片 (Optimize Images)

      使用 GIF 、JPG 还是 PNG 格式的图片? 尽可能的使用 PNG 格式的图片,更多的功能,更小的尺寸(与 GIF 相比)。

    对于 PNG 图片,考虑用 Pngcrush 或类似的工具进行优化。常见的工具如下表:

    • pngcrush http://pmt.sourceforge.net/pngcrush/
    • pngrewrite http://www.pobox.com/~jason1/pngrewrite/
    • OptiPNG http://www.cs.toronto.edu/~cosmin/pngtech/optipng/(refer: 教程 )
    • PNGOut http://advsys.net/ken/utils.htm

      对 JPEG 图片的优化工具:

      必需要强调的是,图片设计的同学啊,请考虑设计面向 Web 的图片 ,不要动不动就设计超过可接受尺寸之外大家伙,这应该是一种习惯,而不是什么高超的技能,只需要记住就成了。

      2. 使用 CSS Sprites 技巧对图片优化 (Optimize CSS Sprites)

      之前提到过,简单的说就是”利用 CSS background 相关元素进行背景图绝对定位”,把多次 HTTP 调用变为一次调用,更多参考:CSS Sprites: Image Slicing’s Kiss of Death

      补充一下:对于这个技巧我曾经见到有人滥用的。把多个背景图片揉成一个,减少 HTTP 调用,这是一个很好的思路。但一定要记住这个大图片不能太”重”,我看到过 100 多K 的背景图。一个图片就把整个网站拖得很慢。比较好的例子可以参考雅虎关系的这个图

      3. 不要在 HTML 中使用缩放图片 (Don’t Scale Images in HTML )

      更多的时候,可能是因为偷懒而没有制作合适大小的图片,如果是批量处理图片的话,可能一条 ImageMagic 命令(convert )就能搞定。必须提及的是,看到太多的对图片拉伸很难看的页面,救救这些页面!

      4. 用更小的并且可缓存的 favicon.ico (Make favicon.ico Small and Cacheable)

      更小,可缓存,这两条可能都不是问题。问题是,太多站点根本没有 favicon.ico 。有的时候,判断独立域名的 Blog 是否专业,基本看一下是否有 favicon.ico 就差不多了。

    展开全文
  • web优化法则

    2012-11-25 10:54:24
    WEB优化 涵盖的内容很广泛! 从前台到后台,都需要优化。 甚至现在流行的面向搜索引擎优化。 下面是雅虎的web优化 14条 网页加速的14条优化法则 最近,YouMonitor.Us在做Web应用性能优化,在网上发现了...

    WEB优化 涵盖的内容很广泛!
    从前台到后台,都需要优化。
    甚至现在流行的面向搜索引擎优化。


    下面是雅虎的web优化 14条

    网页加速的14条优化法则

    最近,YouMonitor.Us在做Web应用性能优化,在网上发现了文章HighPerformance Web Sites: The Importance of Front-End Performance,感觉其14条优化法则很实用,操作性很强。因此翻译出来,供大家参考。



    Web应用性能优化黄金法则:先优化前端程序(front-end)的性能,因为这是80%或以上的最终用户响应时间的花费所在。

    法则1. 减少HTTP请求次数
    80%的最终用户响应时间花在前端程序上,而其大部分时间则花在各种页面元素,如图像、样式表、脚本和Flash等,的下载上。减少页面元素将会减少HTTP请求次数。这是快速显示页面的关键所在。

    一种减少页面元素个数的方法是简化页面设计。但是否存在其他方式,能做到既有丰富内容,又能获得快速响应时间呢?以下是这样一些技术:

    Image maps组合多个图片到一张图片中。总文件大小变化不大,但减少了HTTP请求次数从而加快了页面显示速度。该方式只适合图片连续的情况;同时坐标的定义是烦人又容易出错的工作。

    CSS Sprites是更好的方法。它可以组合页面中的图片到单个文件中,并使用CSS的background-image和background-position属性来现实所需的部分图片。

    Inline images使用data: URL scheme来在页面中内嵌图片。这将增大HTML文件的大小。组合inlineimages到你的(缓存)样式表是既能较少HTTP请求,又能避免加大HTML文件大小的方法。

    Combined files通过组合多个脚本文件到单一文件来减少HTTP请求次数。样式表也可采用类似方法处理。这个方法虽然简单,但没有得到大规模的使用。10大美国网站每页平均有7个脚本文件和2个样式表。当页面之间脚本和样式表变化很大时,该方式将遇到很大的挑战,但如果做到的话,将能加快响应时间。



    减少HTTP请求次数是性能优化的起点。这最提高首次访问的效率起到很重要的作用。据TenniTheurer的文章Browser Cache Usage - Exposed!描述,40-60%的日常访问是首次访问,因此为首次访问者加快页面访问速度是用户体验的关键。

    法则2. 使用CDN(ContentDelivery Network, 内容分发网络)
    用户离web server的远近对响应时间也有很大影响。从用户角度看,把内容部署到多个地理位置分散的服务器上将有效提高页面装载速度。但是该从哪里开始呢?

    作为实现内容地理分布的第一步,不要试图重构web应用以适应分布架构。改变架构将导致多个周期性任务,如同步session状态,在多个server之间复制数据库交易。这样缩短用户与内容距离的尝试可能被应用架构改版所延迟,或阻止。

    我们还记得80-90%的最终用户响应时间花在下载页面中的各种元素上,如图像文件、样式表、脚本和Flash等。与其花在重构系统这个困难的任务上,还不如先分布静态内容。这不仅能大大减少响应时间,而且由于CDN的存在,分布静态内容非常容易实现。

    CDN是地理上分布的web server的集合,用于更高效地发布内容。通常基于网络远近来选择给具体用户服务的webserver。

    一些大型网站拥有自己的CDN,但是使用如Akamai Technologies, Mirror Image Internet, 或Limelight Networks等CDN服务提供商的服务将是划算的。在Yahoo!把静态内容分布到CDN减少了用户影响时间20%或更多。切换到CDN的代码修改工作是很容易的,但能达到提高网站的速度。

    法则3. 增加ExpiresHeader
    网页内容正变得越来越丰富,这意味着更多的脚本文件、样式表、图像文件和Flash。首次访问者将不得不面临多次HTTP请求,但通过使用Expiresheader,您可以在客户端缓存这些元素。这在后续访问中避免了不必要的HTTP请求。Expires header最常用于图像文件,但是它也应该用于脚本文件、样式表和Flash。

    浏览器(和代理)使用缓存来减少HTTP请求的次数和大小,使得网页加速装载。Web server通过Expiresheader告诉客户端一个元素可以缓存的时间长度。

    如果服务器是Apache的话,您可以使用ExpiresDefault基于当期日期来设置过期日期,如:

    ExpiresDefault “access plus 10 years” 设置过期时间为从请求时间开始计算的10年。

    请记住,如果使用超长的过期时间,则当内容改变时,您必须修改文件名称。在Yahoo!我们经常把改名作为release的一个步骤:版本号内嵌在文件名中,如yahoo_2.0.6.js。

    法则4. 压缩页面元素
    通过压缩HTTP响应内容可减少页面响应时间。从HTTP/1.1开始,web客户端在HTTP请求中通过Accept-Encoding头来表明支持的压缩类型,如:

    Accept-Encoding: gzip, deflate.

    如果Web server检查到Accept-Encoding头,它会使用客户端支持的方法来压缩HTTP响应,会设置Content-Encoding头,如:Content-Encoding: gzip。

    Gzip是目前最流行及有效的压缩方法。其他的方式如deflate,但它效果较差,也不够流行。通过Gzip,内容一般可减少70%。如果是Apache,在1.3版本下需使用mod_gzip模块,而在2.x版本下,则需使用mod_deflate。

    Web server根据文件类型来决定是否压缩。大部分网站对HTML文件进行压缩。但对脚本文件和样式表进行压缩也是值得的。实际上,对包括XML和JSON在内的任务文本信息进行压缩都是值得的。图像文件和PDF文件不应该被压缩,因为它们本来就是压缩格式保存的。对它们进行压缩,不但浪费CPU,而且还可能增加文件的大小。

    因此,对尽量多的文件类型进行压缩是一种减少页面大小和提高用户体验的简便方法。

    法则5. 把样式表放在头上
    我们发现把样式表移到HEAD部分可以提高界面加载速度,因此这使得页面元素可以顺序显示。

    在很多浏览器下,如IE,把样式表放在document的底部的问题在于它禁止了网页内容的顺序显示。浏览器阻止显示以免重画页面元素,那用户只能看到空白页了。Firefox不会阻止显示,但这意味着当样式表下载后,有些页面元素可能需要重画,这导致闪烁问题。

    HTML规范明确要求样式表被定义在HEAD中,因此,为避免空白屏幕或闪烁问题,最好的办法是遵循HTML规范,把样式表放在HEAD中。

    法则6. 把脚本文件放在底部
    与样式文件一样,我们需要注意脚本文件的位置。我们需尽量把它们放在页面的底部,这样一方面能顺序显示,另方面可达到最大的并行下载。

    浏览器会阻塞显示直到样式表下载完毕,因此我们需要把样式表放在HEAD部分。而对于脚本来说,脚本后面内容的顺序显示将被阻塞,因此把脚本尽量放在底部意味着更多内容能被快速显示。

    脚本引起的第二个问题是它阻塞并行下载数量。HTTP/1.1规范建议浏览器每个主机的并行下载数不超过2个。因此如果您把图像文件分布到多台机器的话,您可以达到超过2个的并行下载。但是当脚本文件下载时,浏览器不会启动其他的并行下载,甚至其他主机的下载也不启动。

    在某些情况下,不是很容易就能把脚本移到底部的。如,脚本使用document.write方法来插入页面内容。同时可能还存在域的问题。不过在很多情况下,还是有一些方法的。

    一个备选方法是使用延迟脚本(deferred script)。DEFER属性表明脚本未包含document.write,指示浏览器刻继续显示。不幸的是,Firefox不支持DEFER属性。在IE中,脚本可能被延迟执行,但不一定得到需要的长时间延迟。不过从另外角度来说,如果脚本能被延迟执行,那它就可以被放在底部了。

    法则7. 避免CSS表达式
    CSS表达式是功能强大的(同时也是危险的)用于动态设置CSS属性的方式。IE,从版本5开始支持CSS表达式,如backgourd-color:expression((new Date()).getHours()%2?”#B8D4FF”:”#F08A00”),即背景色每个小时切换一次。

    CSS表达式的问题是其执行次数超过大部分人的期望。不仅页面显示和resize时计算表达式,而且当页面滚屏,甚至当鼠标在页面上移动时都会重新计算表达式。

    一种减少CSS表达式执行次数的方法是一次性表达式,即当第一次执行时就以明确的数值代替表达式。如果必须动态设置的话,可使用事件处理函数代替。如果您必须使用CSS表达式的话,请记住它们可能被执行上千次,从而影响页面性能。

    法则8. 把JavaScript和CSS放到外部文件中
    上述很多性能优化法则都基于外部文件进行优化。现在,我们必须问一个问题:JavaScript和CSS应该包括在外部文件,还是在页面文件中?

    在现实世界中,使用外部文件会加快页面显示速度,因为外部文件会被浏览器缓存。如果内置JavaScript和CSS在页面中虽然会减少HTTP请求次数,但增大了页面的大小。另外一方面,使用外部文件,会被浏览器缓存,则页面大小会减小,同时又不增加HTTP请求次数。

    因此,一般来说,外部文件是更可行的方式。唯一的例外是内嵌方式对主页更有效,如Yahoo!和My Yahoo!都使用内嵌方式。一般来说,在一个session中,主页访问此时较少,因此内嵌方式可以取得更快的用户响应时间。

    法则9. 减少DNS查询次数
    DNS用于映射主机名和IP地址,一般一次解析需要20~120毫秒。为达到更高的性能,DNS解析通常被多级别地缓存,如由ISP或局域网维护的cachingserver,本地机器操作系统的缓存(如windows上的DNS Client Service),浏览器。IE的缺省DNS缓存时间为30分钟,Firefox的缺省缓冲时间是1分钟。

    减少主机名可减少DNS查询的次数,但可能造成并行下载数的减少。避免DNS查询可减少响应时间,而减少并行下载数可能增加响应时间。一个可行的折中是把内容分布到至少2个,最多4个不同的主机名上。

    法则10. 最小化JavaScript代码
    最小化JavaScript代码指在JS代码中删除不必要的字符,从而降低下载时间。两个流行的工具是JSMin 和YUICompressor。

    混淆是最小化于源码的备选方式。象最小化一样,它通过删除注释和空格来减少源码大小,同时它还可以对代码进行混淆处理。作为混淆的一部分,函数名和变量名被替换成短的字符串,这使得代码更紧凑,同时也更难读,使得难于被反向工程。DojoCompressor (ShrinkSafe)是最常见的混淆工具。

    最小化是安全的、直白的过程,而混淆则更复杂,而且容易产生问题。从对美国10大网站的调查来看,通过最小化,文件可减少21%,而混淆则可减少25%。

    除了最小化外部脚本文件外,内嵌的脚本代码也应该被最小化。即使脚本根据法则4被压缩后传输,最小化脚本刻减少文件大小5%或更高。

    法则11. 避免重定向
    重定向功能是通过301和302这两个HTTP状态码完成的,如:

    HTTP/1.1 301 Moved Permanently Location: http://example.com/newuriContent-Type: text/html

    浏览器自动重定向请求到Location指定的URL上,重定向的主要问题是降低了用户体验。

    一种最耗费资源、经常发生而很容易被忽视的重定向是URL的最后缺少/,如访问http://astrology.yahoo.com/astrology将被重定向到http://astrology.yahoo.com/astrology/。在Apache下,可以通过Alias,mod_rewrite或DirectorySlash等方式来解决该问题。

    法则12. 删除重复的脚本文件
    在一个页面中包含重复的JS脚本文件会影响性能,即它会建立不必要的HTTP请求和额外的JS执行。

    不必要的HTTP请求发生在IE下,而Firefox不会产生多余的HTTP请求。额外的JS执行,不管在IE下,还是在Firefox下,都会发生。

    一个避免重复的脚本文件的方式是使用模板系统来建立脚本管理模块。除了防止重复的脚本文件外,该模块还可以实现依赖性检查和增加版本号到脚本文件名中,从而实现超长的过期时间。

    法则13. 配置ETags
    ETags是用于确定浏览器缓存中元素是否与Web server中的元素相匹配的机制,它是比last-modified date更灵活的元素验证机制。ETag是用于唯一表示元素版本的字符串,它需被包括在引号中。Web server首先在response中指定ETag:

    HTTP/1.1 200 OK Last-Modified: Tue, 12 Dec 2006 03:03:59 GMT ETag:"10c24bc-4ab-457e1c1f" Content-Length: 12195后来,如果浏览器需要验证某元素,它使用If-None-Match头回传ETag给Web server,如果ETag匹配,则服务器返回304代码,从而节省了下载时间:

    GET /i/yahoo.gif HTTP/1.1 Host: us.yimg.com If-Modified-Since: Tue, 12 Dec 200603:03:59 GMT If-None-Match: "10c24bc-4ab-457e1c1f" HTTP/1.1 304 NotModified

    ETags的问题在于它们是基于服务器唯一性的某些属性构造的,如Apache1.3和2.x,其格式是inode-size-timestamp,而在IIS5.0和6.0下,其格式是Filetimestamp:ChangeNumber。这样同一个元素在不同的web server上,其ETag是不一样的。这样在多Web server的环境下,浏览器先从server1请求某元素,后来向server2验证该元素,由于ETag不同,所以缓存失效,必须重新下载。

    因此,如果您未用到ETags系统提供的灵活的验证机制,最好删除ETag。删除ETag会减少http response及后续请求的HTTP头的大小。微软支持文章描述了如何删除ETags,而在Apache下,只要在配置文件中设置FileETag none即可。

    法则14. 缓存Ajax
    性能优化法则同样适用于web 2.0应用。提高Ajax的性能最重要的方式是使得其response可缓存,就象“法则3增加Expires Header”讨论的那样。以下其他法则同样适用于Ajax,当然法则3是最有效的方式:

    法则4. 压缩页面元素

    法则9. 减少DNS查询次数

    法则10. 最小化脚本文件

    法则11. 避免重定向

    法则13. 配置ETags.


    展开全文
  • Web优化】Yslow优化法则(汇总篇)

    千次阅读 2016-03-23 14:20:12
    ...常用的方法,合并css,js以及 Image maps和css sprites等。(css sprites是指只用将页面上的背景图合并成一张,然后通过background-position来取背景。...更多请参考《【Web优化】Yslow优化法则(一)
  • WEB 优化 话题

    2013-04-11 14:01:53
    1. 前段优化 雅虎YSLOW 22条Javascript 压缩expire tags设置 2. PHP 优化 缓存APC - opcodememcache代码 - OOPTDD 3. mysql 优化 sql语句 左链接,语句不要破坏索引,避免FULL 表 使用索引引擎的使用solr...
  • 问题:大型网站WEB服务器性能优化方法  优化关键点: 数据库压力 、网页优化、服务器负载  1、数据库压力:按照... 2、web优化:使用静态、将图片独立使用不同的服务  给web前端进行瘦身,压缩CSS和JS文件等
  • 移动web和PCweb优化的区别

    千次阅读 2017-02-10 02:41:51
    1、PC优化手段在Mobile侧同样适用。 2、在Mobile侧三秒种内渲染完成首屏指标或使用Loading。 3、基于联通3G网络平均338KB/s(2.71Mb/s),所以首屏资源不应超过1014KB,加载时间就会越长,会增加网民访问的跳出率。 ...
  • 小白的web优化之路 二、实战使用redis来缓存列表信息 中,我们讲了使用redis来缓存列表信息,极大的提供了用户访问列表的速度,也减轻了数据库的压力,下面,我们在以一个例子来讲解MQ来实现事务的异步处理。...
  • 来源于InfoQ:Web优化专家Joshua Bixby最近在博 客中披露,在其正在进行的一项Web性能研究中,针对Alex排名前1000名的网上零售商做了Web性能分析,众多网站在保持连接(Keep- Alive)或者压缩文本(Compress Text)...
  • web优化之-mvc js动态合并 动态压缩 去掉js重复引用 js缓存 js延迟加载 web优化之-asp.net js延迟加载 js动态合并 js动态压缩 看了一下的访问两比较大,现在js和css的合并压缩整理一下。 首先还是需要一个handler...
  • 用户离webserver的远近对响应时间也有很大影响。从用户角度看,把内容部署到多个地理位置分散的服务器上将有效提高页面装载速度。但是该从哪里开始呢?  作为实现内容地理分布的第一步,不要试图重构web应用以...
  • 在前一篇文章web优化之-Asp.net MVC js、css动态合并 动态压缩中的js和css的路径都是Scripts/jquery-1.5.1.js,Scripts/jquery.validate.js这在http请求时路径比较长,为此我们可以改用[Scripts/jquery-1.5.1,jquery....
  • yahoo建议web优化标准

    2013-04-10 19:00:41
    (1) 使用尽可能少的http请求(Make fewer HTTP requests) (2) 使用CDN(Usea CDN) (3) 避免空的src和href(Avoidempty src or hre) (4) Html增加Expires头(AddExpires headers)--html中设置Expires只...
  • Yahoo提出的前段优化的最佳实践,称为YSLOW优化法则。主要包括七个类别的优化: ...一次web访问的过程实际上就是一系列请求-响应的过程,其中会涉及TCP/IP握手、连接等过程。在Firefox浏览器中,通过fi
  • HTTP2简介和基于HTTP2的Web优化

    千次阅读 2018-10-25 19:08:25
    以前也断断续续看了些文章,做了些了解,这里算作一个学习和... 基于HTTP/2前端可以做什么优化 本文参考了一些博文和资料,后面已列出,感谢他们的分享。 HTTP/2简介 HTTP/2 is a replacement for how HTTP is e...
  • 由于Gzip具有较好的压缩性能, 且几乎所有的主流浏览器都支持Gzip的压缩方式,使得Gzip几乎成为现代web服务器的标配。通过对HTTP响应实体的压缩,Gzip可以: 1. 减少网络传输的时间和数据量,从而降低服务器的...
  • 小白的web优化之路 一、使用redis来缓存信息

    千次阅读 热门讨论 2017-05-07 11:31:29
    很多web应用在上线后,都可能会碰到响应慢的问题,而从今天开始,我将以浅显的例子带领大家一步一步的优化web应用。  先举个栗子:  小白在做一个web列表页时,需求很简单,当用户访问第一个页的时候,服务器返回1...
  • CSS和Javascript对页面渲染有着深刻的影响。本文将从以下几个方面讲述如何优化浏览器对页面的渲染: 1.正确放置CSS及JS文件的插入位置; 2.对编写CSS选择器的建议; 3.Javascript 加载优化
  • 添加Expires和Cache-control头部 ...当web请求抵达缓存时,如果本地有缓存的副本且缓存未过期,那么就可以从本地读取数据或文档,这样便可以: 1. 减少冗余的数据传输,一定程度上减少服务器的流量
  • Yahoo提出的前端优化的最佳实践,称为YSLOW优化法则。主要包括七个类别的优化: 内容(content)、服务器端、Cookie、CSS、JavaScript、image和mobile(主要针对移动端),包含了35条优化和加速的经验法则。 一、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 33,292
精华内容 13,316
关键字:

web优化