文档章节

提升Web应用程序性能的最佳实践

DustLeon
 DustLeon
发布于 2012/02/19 10:27
字数 2090
阅读 149
收藏 3

导读:作为开发人员,Web页面加载或刷新的速度对其网站至关重要。在浏览器中调整性能问题比在Java应用程 序中更难。开发人员在各种浏览器中调试JavaScript的方法要少得多。比如,在Mozilla Firefox中,可以使用Firebug调试JavaScript,但仍然不能调整很多性能问题,如浏览器呈现消耗时间。为了解决这些问题,有必要开发 浏览器插件来监控时间响应,以及确定其他对应解决方案如部分呈现或延时加载。

本文节选自IBM developerWorks 提升Web应用程序的性能的系列文章,该文通过Web应用程序性能的最佳实践案例,帮助开发者更好地理解影响Web应用程序性能的因素,学习如何诊断Web应用程序中的性能问题,找到客户端内容中的瓶颈,并确定解决方案。

一、提升Web应用程序性能的6种基本方式

1.减少HTTP请求数

每个HTTP请求都有开销,包括查找DNS、创建连接及等待响应,因此削减不必要的请求数可减少不必要的开销。要减少请求数:

  • 合并文件。将总是同时使用的脚本合并到同一个文件中,不会减小总大小,但将会减少请求数。还可以同样方法合并CSS文件和图片。可以实现文件自动合并:
  • 在构建阶段。用<concat>标记,通过运行Ant合并文件。
  • 在运行时阶段。启用mod_concat模块。如果httpServer是Apache,用 pack:Tag作为JSP标签库来合并JavaScript和样式表文件。(pack:Tag是一个JSP-Taglib,可缩减、压缩及合并资源,如 JavaScript和CSS,并将它们在内容或普通文件中缓存。)
  • 使用CSS Sprites。将背景图片合并成一个图片,并使用CSS background-image和background-position属性来显示所需图片部分。还可使用内联图片减少请求数。

2.后置加载组件

只呈现需要的组件;其余可等待。最好不要一次呈现太多组件。

某些情况下,可使用后置加载。由于浏览器可视区域外的组件可以后置加载,当这些组建进入可视区域不久后,初始呈现就会失效。

有些JavaScript可以在onload事件后后置加载,如JavaScript中初始呈现后拖动某个元素。

3.前置加载组件

通过前置加载组件,可以利用浏览器的空闲时间请求将来会用到的组件(如图像、样式和脚本)。当用户访问下个页面时,如果大多数组件都已在缓存中加载,那页面加载会快得多。

有两种前置加载:

无条件:一旦触发onload,就取得一些额外组件。

有条件:根据用户的动作,推测用户下一步的方向并进行相应的前置加载。

4.将脚本放在底部

脚本可能会产生问题,因为它们可能会阻碍并行下载。当下载脚本时,浏览器不会再启动其他下载,即使那些位于不同主机。将脚本,如样式表,放在底部,以保证它们在其他下载完成后再下载。

也可以使用延时脚本,这只有Internet Explorer支持。DEFER属性表示脚本不含document.write()。这就告诉浏览器他们可以持续呈现。

5.使用无cookie域组件

当浏览器发出对静态图片的请求,并随之发送cookie时,服务器不会使用那些cookie。由于这些cookie只会造成不必要的网络流量,确保用无请求来请求静态组件。然后使用子域和主机保存这些静态组件。

6.将JavaScript和CSS放在外部

现实世界中使用外部文件通常会使页面运行更快,因为JavaScript和CSS文件被浏览器缓存。HTML文档内的JavaScript和CSS 会在每次请求HTML文档时被下载。这减少了需要请求的HTTP的数量,但增加了HTML文档的大小。另一方面,如果JavaScript和CSS在被浏 览器缓存的外部文件中,就会减小HTML文档大小,而不会增加请求数。

二、改进RIA小部件性能方法

主流RIA Ajax框架,如ExtJS、YUI、Dojo及其他,都提供一些精巧的小部件库,以增强用户体验。与其他框架相比,Dojo在企业开发领域更强大,这是由于:

  • Object-oriented programming(OOP)编码
  • 跨平台
  • 本地数据存储的Dojo离线API支持
  • DataGrid、2D和3D图形(图表组件提供了在浏览器展示报表更简单的方法)

Dojo在很多网站广泛使用。这里将使用Dojo举例,分析RIA小部件的性能。可根据具体情况使用Dojo小部件调整工具,有Page Speed、Rock Star Optimizer及Jiffy。强烈建议使用YSlow和Firebug。

YSlow

YSlow根据一组高性能Web页面准则,通过检查页面上所有组件,包括由JavaScript创建的,来分析Web页面性能。YSlow是一个集 成了Firebug Web开发工具的Firefox插件;它可提供提升页面性能的建议、总结组件性能、显示页面统计数据并提供用于性能分析的工具。

图中显示的是YSlow Grade选项卡上的信息。 

YSlow Grade 面板是 Firefox 插件的一部分

YSlow的Web页面建立在22条可测试的规则基础上,这些规则在下方按重要性和效果排列。研究显示,按照以下规则,Web页面响应时间可提升25%到50%:

  • 尽量减少HTTP请求数。
  • 使用内容发布网络(CDN)。
  • 添加Expires或Cache-Control头部。
  • 用Gzip压缩内容。
  • 将样式表放在顶部。
  • 将脚本放在底部。
  • 避免使用CSS表达式。
  • 将JavaScript和CSS放在外部。
  • 减少DNS搜索。
  • 精简JavaScript和CSS。
  • 避免使用重定向。
  • 删除重复的脚本。
  • 配置ETags。
  • 使Ajax可缓存。
  • 使用GET进行Ajax请求。
  • 减少DOM元素数。
  • 消除404错误。
  • 减小cookie大小。
  • 对组件使用无cookie的域。
  • 避免使用过滤器。
  • 不在HTML中测量图片大小。
  • 使favicon.ico尽可能小,可缓存。

如图:图中的YSlow Statistics,对空缓存的访问用户和之前访问过页面的用户的页面大小做了对比。

Components选项卡显示了每个组件及相关的性能信息。例如,如果组件被gzip压缩,或ETag有内容(如果的话),都能看到。组件大小和超期时间也显示在Components选项卡中,如图所示。

Firebug

Firebug与Mozilla Firefox集成,在浏览网站时有大量开发工具随手可用。可以即时编辑、调试、监控Web页面中的CSS、HTML和JavaScript。

可以使用Firebug Net面板,如图所示,监控Web页面产生的HTTP流量。它向用户展示了所有收集到的和计算出的信息。每个条目表示页面的一个请求/响应来回。

Firebug Console面板,如图所示,提供了两种监控代码性能的方法。 

Profile

对于某个特定的函数,使用Profiler。JavaScript Profiler是能用来测量每个JavaScript代码执行时间的Firebug特性。使用JavaScript Profiler来提升代码的性能,或是查看为什么某个函数运行时间过长。它与console.time();类似,但JavaScript Profiler能提供更多代码内部过程细节。

console.time()

对于特定代码段,使用console.time()。控制台会显示您输入到命令行的命令的结果。可以使用console.time(timeName)函数测量某个特定代码或函数执行多长时间。该特性对于提升JavaScript代码的性能非常有用,样例显示:


    
  1. var timeName = 'measuringTime';    
  2. console.time(timeName); //start of the timer     
  3. for(var i=;i<1000;i++){    
  4. //do something    
  5. console.timeEnd(timeName);  //end of the timer 

measuringTime:xxms将显示在控制台。

结束语

文中,开发者学习了如何识别Web应用程序中的一些问题或瓶颈。开发者们应了解一些工具、窍门和技巧,以用于调整和改善对用户的性能。

本文转载自:http://sd.csdn.net/a/20110919/304627.html

DustLeon
粉丝 6
博文 22
码字总数 620
作品 0
广州
程序员
私信 提问
GMTC全球移动技术大会2017

本次峰会将于2017年6月9日举行,因楼主不能及时查看报名信息,还望各位参会者能移步至活动家官网进行GMTC全球移动技术大会2017报名,在线报名地址: https://www.huodongjia.com/event-12707...

活动家
2017/03/16
60
0
全球移动技术大会2017 GMTC

因楼主不能及时查看报名信息,还望各位参会者能移步至活动家官网进行2017 GMTC全球移动技术大会报名,   在线报名地址:https://www.huodongjia.com/event-1270763315.html   点击上面链...

活动家
2017/03/14
78
2
全球移动技术大会2017 GMTC

因楼主不能及时查看报名信息,还望各位参会者能移步至活动家官网进行2017 GMTC全球移动技术大会报名,   在线报名地址:https://www.huodongjia.com/event-1270763315.html   点击上面链...

活动家
2017/03/14
62
0
编写高性能 Java 代码的最佳实践

摘要:本文首先介绍了负载测试、基于APM工具的应用程序和服务器监控,随后介绍了编写高性能Java代码的一些最佳实践。最后研究了JVM特定的调优技巧、数据库端的优化和架构方面的调整。以下是译...

这篇文章
2018/06/20
0
0
前端每周清单半年盘点之 PWA 篇

前端每周清单专注前端领域内容,以对外文资料的搜集为主,帮助开发者了解一周前端热点;分为新闻热点、开发教程、工程实践、深度阅读、开源项目、巅峰人生等栏目。欢迎关注【前端之巅】微信公...

王下邀月熊
2017/08/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

表示数值的字符串

使用正则表达式进行匹配。 [] : 字符集合() : 分组? : 重复 0 ~ 1 次+ : 重复 1 ~ n 次* : 重复 0 ~ n 次. : 任意字符\\. : 转义后的 .\\d : 数字 public b...

Garphy
27分钟前
7
0
大数据最核心的关键技术——32个算法,记得收藏!

奥地利符号计算研究所的Christoph Koutschan博士在自己的页面上发布了一篇文章,提到他做了一个调查,参与者大多数是计算机科学家,他请这些科学家投票选出最重要的算法,以下是这次调查的结...

大数据金罗
57分钟前
12
0
spring boot The server time zone value 'PDT' is unrecognized or represents more than one time zone.

spring boot启动项目时,发现数据库抛如下错误 Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value 'PDT' is unrecognized or represen......

huangkejie
今天
5
0
Laravel 5.1的多路由文件的配置

默认的路由配置文件只有一个, \app\Http\routes.php。 在同一个文件中写路由容易起冲突,文件会越来越大,就需要定义多个路由文件。 找到加载\app\Http\routes.php的文件, 打开\app\Provid...

mdoo
今天
5
0
Hibernate 5 开始使用指南前言

同时在面向对象软件和关系型数据库进行工作,可能会非常复杂和费时。数据在对象和数据库之间可能会不一致,然后导致开发成本会非常高。 Hibernate 是一个针对 Java 环境的对象关系映射(Obj...

honeymoose
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部