about meWedia Ajax
群组Blog系统开发 ... Bing ... ASP.NET ... 1 /355 ... 6 months 12 days ago
单个Blog系统开发和群组Blog系统的开发有着天壤之别,关键的关键还在于访问量,对于CSDN这样的Blog群,如何高效的运行,并具有很好扩展性和可维护性也是我们在做构架设计时考虑的重点。下面就如何在单台服务器上做到高效和高扩展性我做如下阐述:

高效:
对于应用程序,在每天上百万的访问量足以将我们少的可怜的服务器拖垮,效率成为我们关注的重点,如何有效减少和数据库的连接次数以及IO流是我们遇到的主要瓶颈。对于目前的CSDN Blog前端系统,我们将做如下优化:
  • 使用标准的XHTML,并使用优化的CSS,减少HTML生成量,并能减少相应的缓存量。将所有的CSS合并到一个CSS文件,将所有的JS文件也合并到同一个JS文件,并进行压缩,这样对客户是比较负责的处理方法。
  • 替换掉浏览器端的Calender控件,使用Javascript制作浏览器端控件,并使用Ajax获取后端数据进行动态填充,减少回发。
  • 将页面动态数据进行提取,比如主页面文章显示的评论次数,在每次加载的时候使用Ajax获取后端数据进行动态填充,这样能在一定程度上的减少们服务器端的IO流写操作。
  • 页面采用分割成控件的方式进行HTML静态化处理,并在请求链接的时候生成缓存,这能极大的提高运行程序的整体效率。
  • 尽可能的减少缓存所存的数据为复杂类,而是字符串。这样能减少对内存的占用,并减少装箱和拆箱操作,提高运行效率。
  • 直接处理Request请求,除去所有的.ascx用户控件文件和.aspx文件,然后Response.End()。这样能极大的减少我们的IO文件流读取,并在很大程度优化我们的程序,因为除去读取IO流后,我们的页面或用户控件页面将不存在,也就是不存在反序列化以及在数据绑定时涉及到的反射。反序列化和反射经过我们的测试是非常耗性能的过程。
高扩展性:
在追求效率的时候,扩展性往往并不能得到很好的发挥,甚至有时被人误认为是一对天生的矛盾。当然扩展性提升的时候,毫无疑问效率会有损失,然而好的设计能使损失降到很低的水准,却能使整个构架看上去一目了然,具有很好扩展性,并能很好的进行维护。对于目前的CSDN Blog系统,我们有如下考虑:
  • 尽量将功能单一的功能模块化。提取出来的功能可以作为一个黑匣子,处理来自各方的请求,比如Cache处理和HTML静态化处理。
  • 模块化的开发。尽量做到对于前端和后端的开发互不影响,调用各自的DLL文件。
  • 使用抽象工厂,做到可插件化开发。通过对配置文件的设置,生成应用程序运行时的实体类,通过抽象基类调用实体方法可以调用完全不同的处理方式,比如使用SQL数据库访问和Oracle数据库访问。
由于个人目前研究时间和天赋有限,现在只能有这些领悟,如有更好的想法可以交流啊,明天清明节,能回家的朋友尽量回家好好聚一聚吧!
clingingboy ... 6 months 12 days ago
写的不错. blog静态化也存在着动态.前端页面在后端数据操作完成后进行html页面生成,比如发表一篇随笔,直接io操作生成一个静态的html文件.css 文件与js文件通过文件压缩以后,其实还可以通过gzip压缩算法进行再次压缩,比如jQuery文件90多k,可以压到17k左右,但这需要配置httphandler来做,按访问流量来讲,每次请求js等文件都需要服务器端的处理,但减少了传输量. 当然静态化还有其他问题,比如blog换了个模板,侧边栏添加了一个模块,你就得在后端重新生成所有的html. 像csdn这样多用户的blog,应该是不允许用户上传js这些文件的,这也就等于说开发是你们的事情,用户是参与不到开发,也不能帮你们做插件.可以考虑做一些api接口给用户,方便用户自己开发也是不错的. 虽然反射耗性能,但其实大家都一直在用:) 没有反射的话,有些东西还真做不好.像抽象工厂,微软的membership的provider模式.

可以尝试抛弃aspx页面,直接采用模板的方式开发,放弃服务器端控件,使用模板语言.不过有利有弊. 想着办法减少与服务器端的交互,把前端的css,html,javascript发挥极致:) 个人意见.说完了睡觉去了,最近我们还是被界面搞死.
Name*
Email
Website
BoldItalicUnderlineJustify LeftJustify CenterJustify RightIndentOutdentBulled ListNumbered ListInsert LineCreate LinkUnlinkInsert Face
Submit