陈洪雁+万俊伟
摘 要:为了解决长期运营的企业网站面临访问效率逐渐下降和综合服务质量差的问题,从用户角度出发,以提高用户网站访问体验值为目的,针对影响网站性能的诸多软硬件因素如服务器、应用服务、代码和数据库等,提出了一套系统的、实际可操作的基于Web服务的网站性能优化解决方案,并列出了优化前后网站访问性能的对比测试结果分析。
关键词:Web服务;性能优化;数据库;碎片化
中图分类号:TP393.027+.3;TP393.18 文献标识码:A 文章编号:2095-1302(2018)02-00-03
0 引 言
在“互联网+”时代,用户至上已经被多数企业接受。网站访问速度及用户访问体验值在企业网站运营的任何时期都至关重要,它是网站访问友好体验最基本的要素,否则后期所做的任何营销推广和服务模式都有可能徒劳无功。由于客户的耐心不高,加之网络中客户的选择成本很低,一旦页面访问时间超过6 s客户就会离开,因此对于一些流量本就不高的企业网站来说更是雪上加霜。
网站访问体验值深受用户使用产品所有因素的影响,如从用户发起对应用的访问,到收到该访问反馈的内容,通常会经过DNS查询、网络传输和接入转发流程,以及Web服务、应用服务、中间件、数据库等应用组件的信息处理,这些组件的性能优劣会直接影响业务交互的实时性、准确性和稳定性。因此,当企业网站面临用户体验值低下的情况时,针对如此多的中间组件环节,如何提出有效的系统网站性能优化方案,成为了一个重要的研究课题。
本文从实践经验出发,针对长期运营的网站访问速度逐渐下降的情况,分别从服务器、应用服务、程序和数据库等对访问速度影响最大的几个方面入手,本着优先验证简单假设、从简单到复杂、从前端到后端、从外到内、分步优化的原则,提供了一套系统的、实际可操作、可有效提高用户体验值的优化网站性能方案,以及优化后网站访问效果测试的对比分析。
1 性能优化方案设计
1.1 服务器优化
通常网站运营一段时间后,随着业务的不断增加、新系统应用的不断上线,对于网站服务器性能的要求也逐步提升,久而久之服务器运行遇到性能瓶颈也是意料之中,因此在进行网站调优时首先应考虑服务器调优。
在不更换新服务器、不提升硬件配置以及不增加网络带宽等相关配置的情况下解决服务器性能瓶颈的问题,可从两方面入手:
(1)定期清除系统日志。垃圾系统日志文件会占用C盘太多空间,因此要定期删除。可考虑制作BAT或者cmd文件自动清理,文件脚本如图1所示。
(2)磁盘碎片整理。磁盘碎片过多会使系统在读取文件时来回寻找,导致系统性能下降,因此需定期清理;
(3)清理备份文件。可将C:\Windows\winsxs\Backup一些备份文件删除,节省磁盘空间;
(4)清理数据库错误日志文件。SQL2005数据库由于对外开放了1433端口,因此时常会有黑客尝试破解SA密码,导致产生大量错误日志ERRORLOG文件,错误日志路径为C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG。
1.2 应用服务优化
实践表明,用户访问网页的等待时间大部分发生在浏览器前端,尤其是加载页面和加载页面中的各种元素(图片、CSS脚本、JavaScript代码、Flash等)时。因此,相对于在艰苦而繁杂的程序上花费大量时间和精力做改进,优化Web前端能起到事半功倍的效果。
(1)禁止多余的Web服务扩展。I2S支持多种服务扩展,有些服务扩展不但占用I2S资源影响性能,甚至存在安全漏洞,且对于Web运行无意义,选择禁止其启动。打开I2S管理器,点击“Web服务扩展”,选中相应的扩展后点击“禁用”即可;
(2)删除无用的I2S扩展名映射。I2S默认支持.asp等多种扩展名的映射,一些無用的扩展会加重服务器的负担且存在一定的安全隐患。删除映射办法:打开I2S管理器中“默认Web站点”中“属性”选项卡,点击“主目录”,打开 “配置”窗口,选择要删除的扩展名映射后点击“删除”即可;
(3)取消访问记录。I2S默认开启的Web访问记录既庞杂又占用大量磁盘空间,严重影响了Web服务器性能。取消访问记录的操作:打开I2S管理器,找到具体的Web站点,点开“属性”选项卡,在“主目录”下取消对“记录访问”的勾选即可;
(4)限制访问流量。打开I2S管理器,定位到具体的Web站点,打开“属性”窗口,选中“性能”标签与“启用带宽限制”,在 “最大网络使用”设置中,设置带宽的具体数值;
(5)让Web负载自由伸缩。操作步骤:在“Internet信息服务”管理器中应用程序池的“属性”对话框中打开“性能”选项卡,在 “最大工作进程数”输入框中输入进程数;
(6)清理缓存文件。手动清理缓存文件C:\Winnt\I2S Temporary Compressed Files,当I2S网站启动gzip功能时,被访问的页面会产生大量文件在C盘,导致C盘被占满;
(7)建设独立应用程序池并设置为独占方式访问。
1.3 程序优化
通过优化程序代码和在数据库的连接上加入一些技巧,就能让程序更快地执行,使应用性能达到最佳。
1.3.1 网站脚本优化
(1)将经常使用的数据缓存在Web服务器上。如引用表、菜单项、扩展标记语言 (XML) 字符串、组合框列表、DHTML 碎片和站点配置变量(Internet 协议 (IP) 地址、包括数据源名称DSN和Web路径)等;
(2)将经常使用的数据缓存在Session 对象或Application中。Session 对象和ASP Application为在 HTTP 调用常用数据提供了方便的缓存容器;endprint
(3)定义私有变量。私有变量在运行速度以及空间占用方面比全局变量速度更快。使用函数返回字符,同时避免使用变量,如果必须使用变量,那么尽量使用私有变量;
(4)在ASP程序行首放置<% option explicit%>,声明VBScript变量,避免因服务器解析而影响服务器的响应请求速度;
(5)使用case进行条件选择,避免使用if语句;
(6)避免在使用的global.asa文件中进行对象定义;
(7)使用Response.Write生成HTML代码,保持连贯的ASP代码来提高性能,避免分散ASP代码和HTML语言命令;
(8)使用< OBJECT >标记代替Server.CreateObject。当对象被首次引用时才创建< OBJECT >,而后者将立即创建对象,提高效率;
(9)打开“Option Explicit”,明确定义变量选项;
(10)慎用 Server.MapPath,明确的文字路径建议使用MapPath;
(11)页面执行前使用Response.IsClientConnected以避免使用较长时间加载页面;
(12)在目录 URL 中使用后斜杠“/”;
(13)尽量使用Server.Transfer而非Response.Redirect进行优化转向链接。
1.3.2 数据库访问优化
(1)当对象使用完毕后,首先使用Close方法释放对象所占用的系统资源,然后设置对象值为“nothing”释放对象占用的内存;
(2)使用存储过程访问数据库,配合ActiveX Data Objects(ADO)将会赢得很大的程序性能;
(3)当只限取前面N条记录时,切勿使用 select *后再用ADO分页,若改为 select top N字段列表将会大大提高效率;
(4)统计记录数时切勿用 select * from…,改用 select count(1) from…;
(5)尽量避免使用select * from table等SQL语句,避免程序从数据库里读取无用数据,建议使用select 字段1,字段2 from table等形式,只从数据库里读取必要的数据;
(6)勿用嵌套查询,使用sql = select a.id ,b.name from a left join b on b.id=a.id连表操作,并用具体的字段名代替 *;
(7)数据查询时避免使用NOT IN(…)语句,可提高效率;
(8)去掉不必要的查询使用语句如select *、Order by、group by等;
(9)删除无意义的程序锁;
(10)修改不合理扩大查询范围語句,<>用<、>代替,not exists替代not in等;
(11)不用子查询;
(12)执行语句避免对列的四则运算;
(13)insert,update,delete等更改语句放在程序结束前执行,以降低死锁的可能性。
1.4 数据库优化
运行中的站点随着时间推移及应用系统的频繁使用,数据库在日常使用过程中将不断进行insert,delete,update操作,导致表和索引出现碎片,从而成为影响网站反应速度和性能的最主要因素。数据库的碎片会导致系统性能减弱并浪费大量表空间,因此优化数据库是提升用户体验值的有效手段。
由于高水位线(HWL)下的许多数据块都无数据,但全表扫描时还需要扫描高水位线的数据块,意味着Oracle要做许多无用功。因此Oracle提供了shrink space碎片整理功能。
(1)备份是整理碎片的前提,因此备份表A到备份表B。Oracle数据库表备份命令操作截图如图2所示。
(2)分析待整理的表A,Oracle数据库表分析结果如图3所示。估算表在高水位线下还有多少空间可用,表使用率越接近高水位线,全表扫描所做的无用功也就越少。
(3)Oracle数据库表碎片整理操作过程如图4所示。
(4)如果该表之前建立过视图,那么相关视图需要重新编译,然后重启数据库。至此碎片整理过程全部结束。
作为影响数据库性能的一大因素,数据库碎片应当引起网络管理员的足够重视,及时发现并清理碎片是网络管理员维护工作的一项基本内容。
1.5 其他优化
(1)移动设备优先,单个数据对象小于 25 k。当前阶段,移动互联已成为主流,网站链接对象越小,加载速度就越快,移动用户的体验就越卓越;
(2)勿使用缩放图片。制作合适的图片,避免使用 ImageMagic 命令convert来拉伸或压缩图片;
(3)优化图片。相比GIF 、JPG及PNG格式图片,应尽可能使用拥有更多功能和更小尺寸的PNG格式图片;
(4)控制第三方脚本。在关键页面内容之后加载第三方脚本,或放在页面onLoad之后加载。
2 性能对比与分析
完成网站优化后,重启网站服务器即可看到明显的优化效果。通过Web性能测试工具进行测试,测试结果如图5、图6所示。在获取HTML文档时,优化后花费的时间不到优化前总响应时间的20%,首页加载时间为365 ms,HTML页生成的时间大大缩短,后台运行时间减少了50% (测试使用的是第三方Web测速工具,所有测试结果均在第三方浏览器本地0缓存的条件下进行)。
对网站的首页进行一段时间的监控后,其加载速度的测试结果如图7所示。由图可知,加载时间明显缩短,网站整体实现了较大的性能提升。endprint
3 结 语
性能优化是一个复杂的话题,牵涉广泛,优化过程中需考虑众多因素。本文归纳总结的这些优化方法对于一个中大型网站而言,可认为是一个普遍高效的解决方案,但是落实到不同的业务时,又会有自己的实现方式(实现方式指不同的方案组合和对应的技术实现方式)。
性能因素是一个网站系统发展的重要推动力,再细致的思考也难以兼容太多未知场景,因此不妨将目光投放在扩展性和兼容性上,避免网站冷清的痛苦,更避免网站大热的痛苦。
此外,在做任何优化和操作前,需要做好网站和数据库的备份工作。
参考文献
[1]康长安,陈玉红.基于前端的Web性能优化[J].电脑知识与技术,2011,7(6):3811-3813.
[2]张正风,强承魁,袁剑锋.Web性能优化前端方案研究[J].软件导刊,2013, 12(5):116-118.
[3]余以胜.移动终端Web页面的优化处理研究[J].电子技术应用,2014,40(7):126-129.
[4]陈宏君.基于Web标准的CSS样式优化分析[J].计算机光盘软件与应用,2013(9):126-127.
[5]王政.Web前端开发技术以及优化研究[J].电脑知识与技术,2013(8):5037-5038.
[6]李雨晨.Web系统前端性能优化方法研究[D].长沙:湖南大学,2013.
[7]张开敏.基于网页结构的自适应Web缓存[J].中国科学技术大学学报,2013,43(10):799-810.
[8]何中林.Web应用系统的优化与实践[J].数字技术与应用,2012(5):67-68.
[9]于海鹏,张旭阳.基于Web的应用系统前端页面性能优化[J].福建电脑,2012,28(5):11-12.
[10]李铁彬.网页界面体验设计研究[D].哈尔滨:哈尔滨工程大学,2011.
[11]张艳,石磊,卫琳.Web缓存优化模型研究[J].计算机工程,2009,35(8):85-87.
[12]刘柳.基于Web前端的性能優化方案研究[D].武汉:华中科技大学,2015.
[13]李蓉蓉,邱林润.前端开发技术与Web性能优化探讨[J].数字通信世界,2015(6):63-65.
[14]尹今朝.高并发访问下的Web性能优化研究[J].城市建设理论研究(电子版),2013(16):48-49.endprint