网络传输
后台数据终要传递给浏览器,减少网络传输的字节也是提高吞吐的重点,简单的说,就是对网络I0处理优化。减少webform中的ViewState信息,或者干脆不用webform,改用MVC,或者直接context自己来控制所有状态信息。我们采用ashx并且为不同的服务开辟不同的ashx通道提高性能。由于ashx不必做一系列动作、不用经过一连串的事件处理、一大堆的控件状态管理(加载并解析ViewState,还原、更新控件的值、保存ViewState等),直接返回操作结果,也就不用耗费更多的服务器资源,返回的格式也非常好灵活,所有用ashx在基于文档型的中我们运用的很好。
另外一点ashx对开发成员的工作隔离也是非常好。
除了编程影响传输,页面需要的图片和css文件,js文件合理的处理减少请求也能提高网络I0效率:比如将图片合并,js、css压缩等简单的方式虽然改变不多,但并发的时候降低服务器的压力总是好的。
页面渲染和体验
优化页面的html结构,有时候为了加快渲染,不必完全符合W3C的规范,减少div嵌套,使用固定宽度,主要的细节可以提高很好的体验。我在chrome中的测试结果可以发现,很多情况下网络的速度远远高于渲染的速度,所以能提高页面的处理,对个体用户的体验是很有效的。
数据提交
在可靠的情况下,多考虑异步模式或多线程。对数据库的提交,web服务的访问都可以使用异步模型,当然是在可靠的情况下。
页面的ajax自然也是异步的一种方式,另外js文件的加载也可以异步的方式。
数据库
数据库是明显的消耗磁盘I0的组件,提高数据的性能有多种,SQL语句写的好,也是减少了表的扫描(明显是I0动作),设计合理的索引又是提高了I0处理能力,将不在变化的历史数据独立的存储也减少了复杂I0的处理,为表设计冗余的字段也是为了减少I0读写提高性能,将数据表分布在不同的磁盘上也是提升I0效率。还有其他的各种方式,比如查询缓存、连接池神马的,原则同样如此。
总之,减少数据库和磁盘之间过度的活动,能尽可能的提升数据库效率。
数据缓存
内存I0的处理效能自然要远高于磁盘I0,数据的缓存就是减少磁盘操作,或至少减少性能更低的数据库操作。对于页面的结果数据缓存我们的通常简单方案是准备两个缓存区:一个内存,一个文件
内存的缓存区,我们直接用Runtime.Cache,在这个缓存区中我们放置特征码和数据(数据往往是页面需要的数据,一般我们放置JS0N格式),过期策略上我们自然选择NoAbsoluteExpiration。
当数据需要从内存缓存区中被撤掉时,我们会将这个过期数据再次处理,我们在Cache中有一个集合,这个集合放置了被撤掉的缓存数据的特征码,而对应的数据写入磁盘上的一个文件中。
用户请求数据时,先检查特征码是否在正常的缓存中,如果不在,则检查是否在过期区,如果是过期区,则去读取磁盘文件(至少减少了数据库开销),都没有,那去查数据库吧。
更多培训课程,学习资讯,课程优惠等学校信息,请进入 北大青鸟沈阳三好校区 网站详细了解,免费咨询电话:400-998-6158