首页 > 范文大全 > 正文

基于Asp.net的网站开发前端技术优化研究

开篇:润墨网以专业的文秘视角,为您筛选了一篇基于Asp.net的网站开发前端技术优化研究范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:随着微软.net的流行,技术越来越为广大开发人员所接受。在用开发网站时,性能优化又是极为重要的一个因素。如果一个网站仅有美观的页面设计和完善的服务功能,但网站性能却无法满足要求,导致页面延迟过长,最终仍会被用户放弃。从Web前端技术、控件运用以及数据库等方面的优化进行了分析研究。

关键词:;前端技术;网站开发

中图分类号:TP319 文献标识码:A 文章编号:1672-7800(2013)005-0107-02

1、Web前端优化

前端技术是庞大的,包括html、CSS、Javascript、Image、Flash等各种技术与资源。Web前端优化是复杂的,针对每个资源都有不同的优化方式。从用户角度而言,优化能够让页面加载得更快,对用户的操作响应更及时,给用户的体验更友好。从服务器角度而言,优化能够减少页面请求数,减小请求所占带宽,节省服务器资源。Web前端优化的途径有很多,按粒度大致可以分为两类:第一类是页面级别的优化,例如http请求数、脚本的无阻塞加载、内联脚本的位置优化等;第二类则是代码级别的优化,例如Javascript中的dom操作优化、CSS优化、html结构优化,以及后台C#代码优化等。

1.1 页面级优化

(1)减少http请求数,这条策略基本上是最重要最有效的。一个完整的请求都需要经过DNS寻址、与服务器建立连接、发送数据、等待服务器响应、接收数据这样一个“漫长”而复杂的过程。每个请求都包含时间成本和资源成本,时间成本就是用户看到或者“感受”到这个资源需要花费的时间,资源成本是每个请求都因携带数据而占用的带宽。另外,由于浏览器进行并发请求的数量是有上限的,请求数多了,浏览器就需要分批请求,因此会增加用户的等待时间,形成站点响应速度慢的印象。

减少http请求数的主要途径包括:①从设计实现层面简化页面,保持页面简洁、减少资源的使用。一个网页不可避免地需要引入一些外部文件,如js、CSS、背景图片等,由于http协议的无状态性,用户的每一次访问,都需重新向服务器请求所有文件,而大量http请求的累加,正是影响网站速度的最主要原因;②合理设置http缓存。缓存无处不在,有浏览器端的缓存、服务器端的缓存、服务器的缓存、页面缓存、对象缓存等。http中具有缓存功能的是浏览器缓存,以及缓存服务器。当Web请求抵达缓存时,如果本地有“已缓存的”副本,就可以从本地存储设备而不是从原始服务器中提取该文档。这样减少了冗余的数据传输,加快了客户端加载网页的速度,减少了服务器的负担,大大提高了网站的性能;③资源的合并与压缩。如果可以的话,尽可能将外部的脚本、样式进行合并,多个合为一个。另外,CSS、Javascript、Image都可以用相应的工具进行压缩,压缩后往往能省下不少空间。

(2)将外部脚本置底。浏览器是可以并发请求的,这一特点使其能够更快地加载资源,然而外链接脚本在加载时会阻塞其它图片样式脚本等资源,直到脚本加载完成后才会开始加载其它资源。如果将脚本放在较前的位置,势必会影响整个页面的加载速度。解决这一问题最简单的方法就是将脚本尽可能往后移,减少对并发下载的影响。

(3)异步执行inline脚本。inline脚本对性能的影响与外部脚本相比更为严重。首先,与外部脚本一样,inline脚本在执行时一样会阻塞并发请求;其次,浏览器在页面处理方面是单线程的,当inline脚本在页面渲染之前执行时,页面的渲染工作则会被推迟。因此,可选择异步执行时间较长的inline脚本。

(4)采用LazyLoad延迟加载Javascript。随着Javas-cript框架的流行,越来越多的站点也使用起了框架。如今,一个框架往往包括了太多功能,许多功能并不是每一个页面都需要的,这样既浪费了带宽又浪费了执行时间。目前的做法主要有两种:一种是定制一个专用的mini版框架;另一种则是Lazy Load模式,这种模式最初只加载核心模块,其它模块可以等到需要使用时才加载。

(5)减少不必要的http跳转。对于以目录形式访问的http链接,很多人都会忽略链接最后是否带“/”,假如服务器对此是区别对待,则需要注意,这其中很可能隐藏了301跳转,增加了多余请求。

(6)避免重复的资源请求。这种情况主要是由于疏忽或页面由多个模块拼接而成,然后每个模块中请求了同样的资源时,会导致资源的重复请求。出现的几率不大,但是还是要注意排查。

1.2 代码级优化

(1)Javascript优化。DOM操作应该是脚本中最耗性能的一类操作,例如增加、修改、删除DOM元素或者对DOM集合进行操作。如果脚本中包含了大量的DOM操作则需要注意以下几点:需要遍历html collection的时候,尽量将它转为数组后再访问,以提高性能。DOM操作还需要考虑浏览器的reflow和repaint,因为这些都是需要消耗资源的。Javascript代码还应避免使用eval和{unc-tion构造函数,减少作用域链查找等。

(2)CSS优化。CSS代码优化可以减少占用网页字节,缩短浏览器下载CSS代码的时间,也便于日后维护。优化时应注意缩写CSS代码,同属性提取共用CSS选择器。尽量避免使用*通配符,避免使用过小的背景做平铺,避免使用expression等。

(3)html优化。在整个前端的构成中,html是必不可少的一部分,而且是真正地展示“前端”。虽然与十几K的Javascript相比,html的大小在整个页面资源中一般不会占太多的比重,而且还有Gzip,但事实表明,大多数页面都有较大的压缩余地,即使是Gzip过后仍然能减小可观的体积,如使用相对URL、删除http或https、删除注释、压缩空白符、删除元素默认属性等。

(4)后台C#代码改进。避免或减少装箱拆箱操作,避免使用ArrayList,可用泛型代替;捕获指定的异常,不要使用通用的System.Exception;避免使用递归调用和嵌套循环,使用它们会严重影响性能,在不得不用时才使用等。

2、技术或控件的合理使用

技术或控件的合理使用主要表现在如下方面:

(1)不使用不必要的服务器控件(Server Control)。在中,大量的服务器端控件方便了程序开发,但也可能带来性能上的损失,因为用户每操作一次服务器端控件,就与服务器端发生一次往返过程,在有些情况下呈现或数据绑定比使用服务器控件更有效。因此,若非必要,应当少使用Server Control,尽量选择html控件。能在客户端实现的功能就在客户端实现,减少服务器的压力。

(2)不使用不必要的ViewState。默认情况下,对所有的Server Control都启用了ViewState(视图状态)。视图状态管理是服务器控件的功能,该功能使服务器控件的视图状态在隐藏的窗体字段中,可以在往返服务器过程上重新填充它们的属性值,所以该功能确实会对性能产生影响。ViewState需要在客户端保存一些信息,这会造成性能上的消耗,只在必要时保存服务器控件视图状态才启用ViewState。

(3)避免与服务器发生不必要的往返过程。通常,只有在查询或者修改保存数据操作时,才需要与服务器发生交互。有些数据操作可在客户端上进行。例如,从html窗体验证用户输入经常可在数据提交到服务器之前在客户端进行。通常,如果不需要将信息传递到服务器以将其存储在数据库中,那么就不应该编写导致往返过程的代码。使用Page.IsPostBack可以避免在往返过程中执行不必要的处理,减少信息被不必要地发送到Web服务器的次数,在page_load函数及一些只需要初始化一次的事件函数中均可以使用该属性来提高应用程序性能。

(4)当不使用会话状态时禁用它,并且程序开发中尽量少用Session。并不是所有的应用程序或页面都需要针对于具体用户的会话状态,应该对任何不需要会话状态的应用程序或页面禁用会话状态。

3、数据库端性能优化

数据库端的优化目标可以概括为:①减少数据访问(减少磁盘访问);②返回更少数据(减少网络传输或磁盘访问);③减少交互次数(减少网络传输);④减少服务器CPU开销(减少CPU及内存开销);⑤利用更多资源(增加资源)。本节从技术及控件出发考虑数据库性能优化问题。

(1)用完马上关闭数据库连接。访问数据库资源需要创建连接、打开连接和关闭连接等操作步骤。这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源。中提供了连接池(connection pool)来改善打开和关闭数据库对性能的影响。系统将用户的数据库连接放在连接池中,需要时取出,关闭时收回,等待下一次连接请求。连接池的大小是有限的,如果超过连接池的最大限度后仍要求创建连接,必然大大影响性能。因此,在建立数据库连接后只有在真正需要操作时才打开连接,使用完毕后马上关闭,从而尽量减少数据库连接打开的时间,避免出现超出连接限制的情况。

(2)尽量使用存储过程。存储过程是存储在数据库服务器上的一组预编译的SQL语句,使用存储过程可以避免对命令的多次编译,在执行一次后其执行规划就驻留在高速缓存中,以后需要时只需直接调用缓存中的二进制代码即可,因此,其处理速度非常迅速。在.net Framework提供的所有数据访问方法中,基于SQLServer的数据访问是生成高性能、可缩放Web应用程序的较佳选择。使用托管SQL Server提供程序时,可通过使用编译的存储过程而不是特殊查询获得额外的性能上的提高。另外,存储过程在服务器端运行,它可以减少数据库操作语句在网络中的传输。

(3)优化查询语句。中ADO连接消耗的资源相当大,SQL语句运行时间越长,占用系统资源的时间也越长。因此,尽量使用优化过的SQL语句以减少执行时间。比如,不在查询语句中包含子查询语句,只返回必需的数据、字段,充分利用索引等。

(4)减少数据绑定DataBinder的使用。用DataBind-er.eval绑定数据时不必考虑数据来源,不必关心数据的类型,eval会把这个数据对象转换为一个字符串。在底层绑定做了很多工作,使用了反射性能,因此影响了数据性能。如将数据源直接转换成DataRowView,将会带来性能上的较大提升。