思考ASP.NET网站静态化的利与弊
最近在思考网站要不要进行静态化的问题,在网上收集和整理了有关静态化利与弊的资料,于是写下此博文分享到网络上。由于本人是一名asp.net开发人员,所以本文的观点可能无法涉及到全部方面,但是比较注重于使用ASP.NET所开发的网站,毕竟网站开发技术种类繁多,并且各有特点。下面会从多个方面对网站静态的利与弊进行分析。
PS:博文中不包含相关静态化实现方法的内容,只对ASP.NET网站静态化的优点与缺点进行思考和分析。
从搜索引擎优化的角度考虑
根据网上的资料来看,网站静态化考虑最多的就是SEO了,事实上静态页面确实十分有利于搜索引擎蜘蛛的抓取,另外早期的ASP.NET Web Form网站对于SEO则不是太友好。
PS:SEO(搜索引擎优化)的重要性,这里就不再多加叙述,这可是提高网站流量的重要手段!
那么为什么静态化会有利于SEO呢?这里主要从URL进行分析,对于搜索引擎蜘蛛来说,动态的URL往往是十分不友好的,虽然现在搜素引擎的技术已经可以抓取到动态页面的内容,但是相比静态URL简短、美观、稳定的性质,动态URL地址中过多且复杂的参数会使蜘蛛难以理解和区分。
动态页面本身是依靠传入的参数来查询显示数据库的内容,对于引擎蜘蛛来说,相同名称的.aspx页面都是同一个页面,不同的只是参数,搜索引擎只能根据这些复杂的参数来判断URL是否为不同的页面,所以动态URL对于搜素引擎来说是十分不友好的。
而静态页面则不同,由于静态页面的URL对应的是服务器上页面所在的磁盘路径,搜索引擎很容易区分和理解页面的地址,而且静态URL一般也不会带有复杂的参数。
对于ASP.NET Web Form网站来说,如果只是想优化URL,那么倒是可以考虑使用伪静态的方法。幸运的是,对于使用ASP.NET MVC开发的网站来说,就没有这个烦恼了,ASP.NET MVC的路由机制就为我们提供了对seo十分友好的URL,甚至可以考虑不对网站进行静态化操作。
另外静态页面访问的速度比动态页面快,从SEO的角度来看是十分有利的。毕竟对于搜索引擎蜘蛛,如果一个页面响应速度慢并且经常打不开,那么就等于释放出两个信号:1、网站用户体验不好。2、网站内容很难抓取。这样会对网站排名造成极大的负面影响。
从网站服务器压力和访问速度考虑
这里先从访问速度进行对比,静态页面的访问速度确实比动态页面快,毕竟静态页面只需从硬盘读取页面文件就可以将内容呈现给用户,而动态页面比如asp.net网站一般还需要经过程序处理相关的业务逻辑,以及从数据库中读取数据才能渲染页面并呈现出来,一定程度上会拖慢页面的访问速度。在遇到高强度访问压力的时候,静态页面快速和稳定的优势将会完全体现出来。
这里再从服务器资源角度来看,对于站长来说服务器配置越好所需的费用越高,那么静态化的网站在服务器资源方面又是如何呢?这么说吧,静态页面消耗硬盘的资源较多,一般在磁盘空间容量方面,主要是大量的页面文件和分级文件夹。另外静态页面在生成时候,对于硬盘的IO读写操作和CPU消耗也是十分巨大的,特别是遇到有大量的页面要进行静态化的时候,CPU运算和IO操作将会更加显著的降低服务器性能。
而ASP.NET这类的动态网站一般比较消耗服务器的内存资源,这里需要开发人员注意对网站进行优化,尽量避免将大量数据保存至会话中,以及在使用缓存方面也需要额外注意。另外有些动态网站对CPU使用率也是十分高的,比如一些提供图片处理的服务网站。此外需要对数据库进行大量增删改操作的动态网站,对服务器压力非常的大,例如最常见的论坛类网站(WEB2.0),甚至有的服务器商在出租服务器时,会有额外的提示服务器可承受的压力数据。
总体来说,静态化后的网站确实有利于降低服务器压力。在生成静态页面时所造成的服务器性能影响,是可以通过一定的手段进行优化。另外大家也可以了解下CDN技术,即内容分发网络,对于静态页面来说,一旦使用了这个技术,外加上浏览器缓存,那么用户访问网站的响应速度就像火箭一样快!访问速度快了,从另一个角度来看又是有利于搜索引擎对网站内容的抓取。
从技术角度分析
作为一个ASP.NET开发人员,曾经在对网站进行静态化的时候遇到过许多问题。首先从网站程序的复杂度进行分析,一个具有静态化功能的网站必是非常复杂的,因为静态化一个网站要考虑的技术性问题十分多(这里不包括伪静态)。
进行静态操作的时候,不仅要考虑到单个页面的操作,还需要注意整体与单个之间的复杂关联,有种牵一发而动全身的压迫。就拿最常见的上一页和下一页来说,如果当前网站的某一篇文章删除了,那么这篇文章对应的上下页就必须要重新进行静态化,否则链接的地址将会出现404。简单的页面尚且如此,更别说那些大型的网站了,每个页面中超级复杂的关系就够喝一壶了。
再从进行静态操作的时机来看,一般开发人员要实现相应的触发开关功能,用于判断是否要进行静态化操作,以及要进行什么样的静态化操作。是局部还是整体?静态页面文件是否存在?静态页面的数据是否过期?这些问题都说明了生成的时机是很重要的,否则会造成用户看到的数据不是最新的内容。
此外静态化操作对服务器性能的影响也是煎熬开发人员的难题之一,我们不可能频繁的进行静态化操作,对磁盘的IO操作以及大量的逻辑处理都会消耗大量CPU的资源,服务器性能随之受到影响。在进行批量操作时,一定要考虑使用线程进行处理,千万不能阻塞网站的整体进程。
老实话,对于网站开发者来说,静态功能也许是一个头疼的问题,开发难度加大了,同时维护难度和管理难度也通用加大,在网站备份的时候还得考虑是否要备份这些静态文件!特别是大型的网站,静态化往往需要进行复杂的架构设计!
总结ASP.NET静态化的利弊
是否是需要静态化,还是得看整体的需求,俗话说只有最适合自己的才是最好的(有点废话的赶脚 ^^)。
一般来说一些不经常更新内容的页面就可以考虑进行静态操作,比如新闻页面,小说的章节页面,毕竟这些内容一旦发布了,就很少会进行改动。而且可以使用CDN技术进行加速。
优点:
1、利于SEO,体现在友好的URL路径和快速的访问速度,asp.net mvc网站可以忽略URL的影响。
2、一个字:就是快!!!静态页面访问速度快,用户体验好,结合CDN技术、缓存和相应的架构,提速效果更加明显!
3、相比动态页面一定程度上减轻服务器压力
缺点:
1、可能需要使用大量硬盘空间
2、增加网站开发复杂度,不利于程序维护和管理。
3、不太灵活,静态化操作是需要触发开关的,不可能频繁的进行操作,可能导致数据更新慢,需要进行相应的设计。
网页静态化的实现方法: