`

web性能优化_(转载文)

阅读更多

转载自:http://www.cnblogs.com/50614090/archive/2011/08/19/2145620.html

第一章 打开网站慢现状分

  在公司访问部署在IDC机房的VIP网站时会感觉很慢。是什么原因造成的?为了缩短页面的响应时间,改进我们的用户体验,我们需要知道用户的时间花在等待什么东西上。

 

       可以跟踪一下我们的登录页面,如下图所示

 

    从上图我们可以分析知道,HTML文档只占了总响应时间的20%,其它80%响应时间用来下载JS、CSS、图片等组件。所以WEB前端有很大的优化空间,我们将从WEB的前端优化、后端优化两方面综合考虑给出WEB的性能优化方案。

 

第二章 WEB前台的优化规则 

一、尽量减少 HTTP 请求

 

有几种常见的方法能切实减少 HTTP 请求:

 

1、 合并脚本跟样式文件,如可以把多个 CSS 文件合成一个,把多个 JS 文件合成一个。

 

2、 CSS Sprites 利用 CSS background 相关元素进行背景图绝对定位,把多个图片合成一个图片。

 

二、使用浏览器缓存

 

       在用户浏览网站的不同页面时,很多内容是重复的,比如相同的JS、CSS、图片等。如果我们能够建议甚至强制浏览器在本地缓存这些文件,将大大降低页面产生的流量,从而降低页面载入时间。

 

   根据服务器端的响应header,一个文件对浏览器而言,有几级不同的缓存状态。

 

   1、服务器端告诉浏览器不要缓存此文件,每次都到服务器上更新文件。

 

   2、服务器端没有给浏览器任何指示。

 

   3、在上次传输中,服务器给浏览器发送了Last-Modified或Etag数据,再次浏览时浏览器将提交这些数据到服务器,验证本地版本是否最新的,如果为最新的则服务器返回304代码,告诉浏览器直接使用本地版本,否则下载新版本。一般来说,有且只有静态文件,服务器端才会给出这些数据。

 

   4、服务器强制要求浏览器缓存文件,并设置了过期时间。在缓存未到期之前,浏览器将直接使用本地缓存文件,不会与服务器端产生任何通信。

 

       我们要做的是尽量强制浏览器到第四种状态,特别是对于JS、CSS、图片等变动较少的文件。

 

三、使用压缩组件

 

IE和Firefox浏览器都支持客户端GZIP,传输之前,先使用GZIP压缩再传输给客户端,客户端接收之后由浏览器解压,这样虽然稍微占用了一些服务器和客户端的CPU,但是换来的是更高的带宽利用率。对于纯文本来讲,压缩率是相当可观的。如果每个用户节约50%的带宽,那么租用来的那点带宽就可以服务多一倍的客户,并且缩短了数据的传输时间。

 

四、图片、JS的预载入

 

预载入图像最简单的方法是在 JavaScript 中实例化一个新 Image() 对象,然后将需要载入的图像的 URL 作为参数传入。

 

function preLoadImg(url) {

 

var img = new Image();

 

img.src = url;

 

}

 

可以在登录页面预载入JS和图片

 

五、将脚本放在底部

 

脚本放在顶部带来的问题,

 

1、  使用脚本时,对于位于脚本以下的内容,逐步呈现将被阻塞

 

2、  在下载脚本时会阻塞并行下载

 

放在底部可能会出现JS错误问题,当脚本没加载进来,用户就触发脚本事件。

 

要综合考虑情况。

 

六、将样式文件放在页面顶部

 

如果样式表任在加载,构建呈现树就是一种浪费,样式文件放在页面底部可能会出现两种情况:

 

1、  白屏

 

2、  无样式内容的闪烁

 

七、使用外部的JS和CSS

 

将内联的JS和CSS做成外部的JS、CSS。减少重复下载内联的JS和CSS。

 

八、切分组件到多个域

 

主要的目的是提高页面组件并行下载能力。但不要跨太多域名,建议采用2个子域名。

  

九、精简JS

 

可以做到两个级别

 

1、精简:从代码中移除不必要的字符以减少其大小,

 

2、混淆:在精简的同时,还会改写代码,函数、变量名被转换成更短的字符串

 

可以使用ShrinkSafe来精简JS  http://shrinksafe.dojotoolkit.org/

 

十、精简CSS

 

从代码中移除不必要的字符以减少其大小,

 

可以使用CSS Compressor http://www.cssdrive.com/index.php/main/csscompressor /

 

十一、       精简图片、Flash

 

对大图片、Flash,要在效果和大小之间做出平衡。

 

第三章 程序的优化

 

第四章 数据库的优化

 

附录A 页面请求分析

 

  从输入URL到页面呈现需要下面5个步骤

 

1. 输入URL地址或者点击URL的一个链接

 

 2. 浏览器根据URL地址,结合DNS,解析出URL对应的IP地址

 

 3. 发送HTTP请求

 

 4. 开始连接请求的服务器并且请求相关的内容

 

 5. 浏览器解析从服务器端返回的内容,并且把页面显现出来

 

上面基本上就是一个页面从请求到实现的基本过程,下面我们将剖析这个过程。

 

当输入URL之后,浏览器就要知道这个URL对应的IP是什么,只有知道了IP地址,浏览器才能准备的把请求发送到指定的服务器的具体IP和端口号上面。浏览器的DNS解析器负责把URL解析为正确的IP地址。这个解析的工作是要花时间的,而且这个解析的时间段内,浏览器不是能从服务器那里下载到任何的东西的。浏览器和操纵系统提供了DNS解析缓存支持。

 

当获得了IP地址之后,那么浏览器就向服务器发送HTTP的请求,过程如下:

 

1.浏览器通过发送一个TCP的包,要求服务器打开连接

 

2.服务器也通过发送一个包来应答客户端的浏览器,告诉浏览器连接开了。

 

3.浏览器发送一个HTTP的GET请求,这个请求包含了很多的东西了,例如我们常见的cookie和其他的head头信息。

 

这样,一个请求就算是发过去了。

 

请求发送去之后,之后就是服务器的事情了,服务器端的程序把最后的结果发送到客户端。

 

  其实首先到达浏览器的就是html的那些文档,所谓的html的文档,就是纯粹的html代码,不包含什么图片,脚本,CSS等的。也就是页面的html结构。因为此时返回的只是页面的html结构。这个html文档的发送到浏览器的时间是很短的,一般是占整个响应时间的10%左右。

 

  这样之后,那么页面的基本的骨架就在浏览器中了,下一步就是浏览器解析页面的过程,也就是一步步从上到下的解析html的骨架了。

 

如果此时在html文档中,遇到了img标签,那么浏览器就会发送HTTP请求到这个img响应的URL地址去获取图片,然后呈现出来。如果在html文档中有很多的图片,flash,那么浏览器就会一个个的请求,然后呈现,如果每个图片都要请求,那么就要进行之前说的那些步骤:解析url,打开tcp连接等等。打开连接也是要消耗资源的,就像我们在进行数据库访问一样,我们也是尽可能的少开数据库连接,多用连接池中的连接。道理一样,tcp连接也是可以重用的。http1.1提出了持久连接(persistent connection)的概念,也就是说同一条 HTTP 连接,可以同时处理多个请求,减少tcp连接。

 

当页面的html骨架载入了之后,浏览器就开始解析页面中标签,从上到下开始解析。

 

首先是head标签的解析,如果发现在head中有要引用的JS脚本,那么浏览器此时就开始请求脚本,此时整个页面的解析过程就停了下来,一直到JS请求完毕。之后页面接着向下解析,如解析body标签,如果在body中有img标签,那么浏览器就会请求img的src对应的资源,如果有多个img标签,那么浏览器就一个个的解析,解析不会像JS那样等待的,会并发的下载。

分享到:
评论

相关推荐

    高效前端:Web高效编程与优化实践_机械工业出版社; 第1版 (2018年1月1日) 完整版-未加密

    全书以问题为导向,精选了前端开发中的34个疑难问题,从分析问题的原因入手,逐步给出解决方案,并分析各种方案的优劣,最后针对每个问题总结出高效编程的最佳实践和各种性能优化的方法。全书共7章,内容从逻辑上...

    使用open source产品组装你的web应用架构(转载)

    10. **监控与日志**:Prometheus、Grafana用于性能监控,ELK Stack(Elasticsearch、Logstash、Kibana)处理日志收集、分析和可视化,帮助开发者及时发现问题并优化系统。 11. **安全**:HTTPS证书管理工具如...

    ogame中文源代码(网络转载)

    通过分析数据库模型,我们可以学习到如何设计符合游戏需求的关系型数据库,以及如何优化查询性能。 6. **安全性考虑** 在一个多人在线游戏中,防止作弊和保护用户数据安全是必不可少的。源代码中会包含验证机制、...

    Linux一键安装web环境全攻略

    - 作为高性能的Web服务器和反向代理服务器,在处理静态内容方面表现出色。 - **Apache**: - 版本: 2.2.29、2.4.10 - 是广泛使用的Web服务器之一,提供强大的模块化特性以适应不同需求。 - **MySQL**: - 版本: ...

    WebService+Android

    - **性能优化**:避免频繁的网络请求,可以使用加载更多、分页加载等策略,提高用户体验。 总的来说,"使用webservice为android提供数据"涉及的知识点包括:WebService的基本概念、Android中的网络请求方式、各种...

    三种Web开发主流技术ASP-PHP-JSP的评价[转载] --希望给大家作为参考.txt

    4. **运行效率高**:尽管在某些情况下需要优化以提高性能,但总体上ASP提供了较高的运行效率。 **局限性** 1. **依赖于Windows平台**:ASP主要针对Windows操作系统设计,这意味着非Windows平台的用户在部署ASP应用...

    air中文官方帮助文档

    - **性能优化**:在开发过程中需要注意性能优化,例如合理使用缓存、减少不必要的数据加载和提高代码执行效率等。 - **多平台支持**:由于Adobe AIR支持多个操作系统,因此开发者需要注意确保应用程序在不同平台上都...

    转载类似iphono的加速度滑动效果的Flex容器

    总之,这个技术点涉及了CSS3 Flex布局、JavaScript触摸事件处理、速度和加速度计算,以及性能优化等多个方面,对于提升Web应用的用户体验具有重要意义。通过实践和学习,开发者可以将这种高级的交互效果应用到自己的...

    TOMCAT源代码,包括转载得别人的分析

    它的源代码是公开的,这使得开发者能够深入理解其内部工作原理,优化性能,或者为它添加自定义功能。以下是对Tomcat源码及其分析的一些关键知识点: 1. **Servlet与JSP**: Tomcat的核心在于Servlet容器,它负责...

    birt经验之谈转载

    BIRT(Business Intelligence and Reporting Tools)是一个基于Eclipse的开源报表系统,主要...通过深入理解和有效利用这些特性,开发者可以创建出满足业务需求的高效报表,并且在性能优化方面也有多种策略可以选择。

    js提示框-转载+++ js 乱码+++自动提交+滚动图片加载+箭头导航(转载)

    总的来说,这个资源包涵盖了JavaScript的基本交互设计、编码处理、表单操作、性能优化和导航设计等多个方面,对于学习和提升JavaScript编程技能是非常有价值的。在实际开发中,掌握这些知识点有助于创建更富交互性和...

    转载的供大家分享

    【标签】:Java调优,企业级应用,内存溢出,性能优化 【内容】: 企业级Java EE应用程序在不同部署环境下可能面临相似的问题。作为Java EE问题解决专家,作者通过分析和诊断发现,这些问题往往遵循一定的解决模式...

    脚本全自动完美搭建先电版openstack.docx

    偏研究的话,你可以针对某一个点展开,通常就是优化了,比较多的研究点包括调度算法优化、在线迁移优化、负载均衡优化、计算性能优化、虚拟化性能优化、能源损耗优化等,尤其是调度算法,你可以联想抽象出各种问题,...

    图解access to sql2000 转换,acc 2 sql 成功分享!新势力网络原创,转载请注明出处,谢谢!

    同时,如果数据库规模较大或结构复杂,可能需要更多的时间和优化策略来确保转换的顺利进行。 总之,Access to SQL2000的转换过程涉及到数据源的配置、DSN的创建、数据库连接的设置以及实际的数据迁移。这个过程虽然...

    转载的AJAX反转资料

    6. 安全和性能考虑:学习如何避免跨域问题,优化请求以减少延迟,以及处理错误和异常。 通过研究这份“反转AJAX”资料,开发者可以进一步提升在构建实时、动态Web应用方面的能力,更好地理解和运用AJAX及其相关技术...

    MyEclipse6Java开发中文教程

    此外,可能还会涵盖如何构建和部署应用程序,以及如何处理异常和性能优化等高级话题。 总之,《MyEclipse 6 Java开发中文教程》是一本全面的入门指南,适合对Java和企业级开发感兴趣的初学者,通过系统学习,读者...

    利用apache的proxy-ajp做apache与tomcat的结合(转载) jackey

    总结来说,Apache与Tomcat结合使用`mod_proxy_ajp`能实现动静分离、负载均衡和优化性能,是企业级Web应用部署的常见解决方案。通过配置`httpd.conf`文件,我们可以灵活地调整服务器间的协作方式,以适应不断变化的...

    JDBC连接DB2数据库详解.doc--转载

    JDBC (Java Database Connectivity) 是Java编程语言中用于与各种数据库进行交互的一种标准接口。...通过理解JDBC连接字符串、驱动注册以及性能优化策略,可以有效地在Java应用中集成和管理DB2数据库。

Global site tag (gtag.js) - Google Analytics