当初建立这个博客的时候,是考虑做全站静态化的,为了朝这个目标发展我为博客开发了许多静态化功能。但时至今日,我却取消了博客大部分的静态化操作,本文就当是一个总结,记录本博客在静态化方面遇到的一些问题和经验。
博客早期静态化的方案及存在的问题
最早建博客是2013年的时候,刚开始租的是虚拟主机,网站是用ASP.NET WEB WebForm 写的。由于服务器的条件限制,特别是CPU有限制使用上限,在考量了很多方案后,决定采用全站静态化的方法,这样做可以缓解服务器压力和加快页面的访问速度,减轻过多的数据库访问所带来的CPU消耗。此外当初也学了点SEO的皮毛,也觉得这样有利于SEO。
由于博客刚刚开始建立,功能都做的比较简单粗糙,静态化用的是字符串占位符替换法,也就是 《ASP.NET MVC使用HTML模板进行静态化操作》这篇文章提到的方法。当初博客用这种方法是存在很大的问题,大概有两点比较头疼:
- 不方便扩展和维护,需要同时维护动静两套模板。网站数据结构一旦更改,将会导致静态模板和相关业务代码修改极其繁琐。
- 灵活性差,没有自动化操作,受限于虚拟主机无法直接操作服务器。而且没有一个完善的过期机制,全靠自己判断并手动操作静态化。
另外还遇到即时数据的刷新显示问题,比如新的评论、文章浏览数、文章上下篇关联链接等。后面的解决方法是这部分数据采用ajax进行覆盖,流程大概如下:用户首先访问已经生成的静态页面,然后对于这部分数据容易变动的页面区域使用ajax进行更新,后面在根据情况进行更新操作,防止用户看不到自己刚刚发布的评论。
这阶段博客写文章的流程是这样的:
写文章并保存发布>进入静态模块,选择哪些页面要静态化>干看着屏幕等静态化操作完成。其实现在国内一些cms的静态化后台也是这样的操作流程,如果有条件还是需要自己搞自动化功能。静态化操作肯定要在后台有个专门的模块进行控制,可以选择操作哪些页面或模块。
总的来说,这期间算是初出茅庐,见识和经验都太缺乏,解决方案比较粗糙,只能满足最基本的博客功能。
使用云服务器后静态化方案的改变
直到2015年2月份,在经历了云服务器一段时间的宣传和发展,我从性价比和其他方面考虑,决定将博客迁移到了某云的服务器,并且做了备案。
更换服务器后,静态化方案得以改进和优化,主要原因有两点,一个是服务器性能得到显著的提升,我可以直接操作服务器,以便我开发一些自动化操作的工具和程序。
另外一个是技术的进步,这期间我将网站代码全部进行重构,使用ASP.NET MVC进行重新开发博客,这样就可以利用MVC的视图引擎做静态化操作,具体方法当年我也写了篇文章:《ASP.NET MVC 使用视图引擎实现页面静态化》。我通过ASP.NET MVC自带的视图引擎实现静态模板和动态模板相结合,实现灵活和方便扩展维护的静态模板!后面在搭配自定义操作过滤和自己编写的自动化服务程序,解决手动操作静态化的问题。另外包括模板和URL都实现了动静合一,算是一个大进步!
这阶段的静态化流程就比较给力了,原本的后台模块保留(就是手动静态化功能),然后我还编写了windows服务程序以实现自动化操作,并且加入了自己的过期更新机制,服务程序会根据条件触发静态化操作,而且每天凌晨也会自动全站静态化一遍。除了服务程序,我也在过滤器那添加了判断,如果用户访问的页面没有静态文件或者文件过期了,就会先访问动态网页,后台在异步进行静态化操作。
PS:网站迁移服务器是一件即开心又烦躁的事情,换服务器就像游戏装备升级,从访问速度和服务器稳定性上都得到了质的飞跃。但是由于当初经验不足,迁移过程中遇到了许多大大小小的问题,包括
域名更换、转移、备案等,特别是备案这块,导致网站有2个月处于关闭状态,虽然当时网站也没什么流量。当初工作的时候这部分主要还是由运维人员去处理,自己倒是较少去接触,也算是涨涨经验,现在就轻车熟路了。
现阶段博客已经取消大部分静态化
就像开头所说的,十有三博客现在已经取消了包括首页和文章在内的大部分静态化功能,只保留404和500错误页面、RSS文件和sitemap.xml的静态化操作。这部分文件都是改动较少,更新并不那么频繁的,一般每隔一天自动重新生成一次即可。
最主要的是博客已经开始使用缓存技术,缓存与静态化相比更加方便和灵活,性能比较上不好说,但是代码比较好维护。此外ASP.NET MVC的路由机制对URL结构十分友好,URL变得更加清晰明了,参数也很自然融入到URL中,并不会像以前那样问号后面接一串长长的参数。当然这部分只是我个人的理解,我是觉得现阶段静态化对SEO的影响比较小,也没啥必要在对页面做这部分的功能。
个人对静态化的一点看法
目前我所接触的都是小规模网站的静态化方案,大型网站这方面我也不怎么了解。基本上我理解的静态化实现方案都是这样的:先给模板引擎填充数据,再通过IO操作生成静态文件。主要是就是模板>数据库>文件IO之间的交互操作,稍微对比下国内比较热门的CMS,基本的静态化思路都是这样的。貌似一些大网站采用XML+XSLT的方式做静态,具体就没去了解,感兴趣的朋友自己可以搜索下。
根据我自己的经历,感觉小网站并不是那么需要静态化,可以使用缓存进行替换。除非从SEO角度上考虑认为这种方式比较好,我个人是觉得没啥差别。其实15年的时候我还写了篇文章记录了当时的想法:思考ASP.NET网站静态化的利与弊 , 不过文章受限于当时自身的技术水平,看法还是有些片面和不足。网站的静态化方案如果真的要搞起来和搞好并不是那么容易的,我的感受是特别繁琐,无论方案如何改进都是不利于后期维护!
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/98907.html