如何提高网页运行性能

如何提高网页运行性能,第1张

从编码方面
一、 缓存
缓存是ASPNET中提高性能的重要手段,缓存一般遵循以下原则:
1) 在页面中将静态内容与动态内容分割开来
考虑将动态内容作成用户控件
2) 缓存合理的数据
一般应当缓存应用程序集的数据、多个用户共同使用的数据、静态数据、生成数据需要很大开销的动态数据、DataSet以及自定义对象等。不要缓存数据库连接对象、DataReader。
3) 选择适当的方式
如可以使用页面缓存指令,API等。
二、 视图状态
视图状态放在页面中名为_VIEWSTATE的表单隐藏域里面,随页面一起被发送到客户端,在用户提交页面时,又被提交到服务器
1) 如果不需要视图状态,则禁用
视图状态默认是允许的,如果页面不进行PostBack,如果不处理服务器控件的事件,如果服务器控件的数据每次都需要重新计算等
2) 尽量减少视图状态中存放的对象
三、 关于页面处理(减少页面生成的时间和过程)
1) 应尽量减少页面文件的大小
2) 通过检测PageIsPostBack减少代码执行的数量
3) 禁止使用Debug=“true”,减少页面生成过程中生成额外的调试信息
4) 使用ServerTransfer而不使用ResponseRedirect,减少服务器和客户端间的往返
5) 尽量使用客户端验证,减少服务器和客户端间的往返
6) 在适当的场合使用服务器控件
7) 尽量避免嵌套的服务器控件
四、 避免使用PageDataBind和DataBinderEval
五、 关于Application对象和Session对象
1) 使用静态属性存储数据而不使用Application对象,在Application对象里存储只读类型的数据都将回提高性能
2) 尽量使用InProc模式的Session,这个模式是最快的
3) 在Session里存储基本类型的数据减少序列化的所消耗的资源
4) 如果不用Session变量,使用EnvableViewState=“false”禁用
5) 如果不修改Session变量的值,尽量使用ReadOnly属性设置
六、 关于字符串 *** 作
1) 尽量使用ResponseWrite将结果输出到浏览器,这种方法是最快的。不要将字符串连接在一起一次输出。
2) 在字符串短并且少的情况下可以使用StringConcat方法,而在字符串长度未知,并且字符串大的情况下,使用StringBuilder对象
3) 不要使用strVar==“”来判断字符串是否为“”,这样它会创建额外的字符串,请使用strVar==StringEmpty代替或者使用strVarLength==0来判断
4) 请使用StringCompare方法进行字符串的比较
七、 关于数据访问
1) 尽量使用存储过程返回数据,不要直接在代码中进行查询
2) 在数据库中只返回有用的数据结果,不要选择不使用的数据字段
3) 进行使用DataReader进行数据绑定,DataReader是单向只读的
4) 尽量一次返回多个数据集而不是每个记录集分别打开一次数据库连接进行查询
5) 尽量晚的打开数据库,尽量早的关闭数据库
6) 使用连接池提高性能
7) 使用ExecuteNonQuery方法执行不返回数据的 *** 作,使用ExecuteScalar方法返回单个结果的 *** 作,使用CommandBehaviorSequentialaccess返回二进制数据或者大数据
8) 如果多次相同的查询,请使用CommandPrepare方法
9) 使用GetOrdinal方法预先得到索引值,使用索引值比使用字符串的列名查询数据效率更高
八、 关于代码优化
1) 在解析基本数据类型时,使用Try方法如果解析失败,会抛出异常,使用TryParse方法则只执行Else下的语句。
2) 使用AppendAllText、WriteAllBytes等方法读写文件内容可以优化性能
3) 将循环判定条件放在for语句外
4) 避免在循环里创建对象
5) 尽量减少装箱的次数
6) 不要使用例外控制程序的流程
7) 在循环中不要使用不变的对象属性或者字段
8) 使用for循环代替foreach循环遍历结合内容
9) 数组是所有集合中最快的,如果没有特殊需要,尽量使用数组代替集合
10) 了解各个集合类型的特性,选择合适的类型
11) 使用泛型避免减少装箱、拆箱
大型网站,比如门户网站。在面对大量用户访问、高并发请求方面,基本的解决方案集中在这样几个环节:使用高性能的服务器、高性能的数据库、高效率的编程语言、还有高性能的Web容器。但是除了这几个方面,还没法根本解决大型网站面临的高负载和高并发问题。
上面提供的几个解决思路在一定程度上也意味着更大的投入,并且这样的解决思路具备瓶颈,没有很好的扩展性,下面我从低成本、高性能和高扩张性的角度来说说我的一些经验。
HTML静态化
其实大家都知道,效率最高、消耗最小的就是纯静态化的html页面,所以我们尽可能使我们的网站上的页面采用静态页面来实现,这个最简单的方法其实也是最有效的方法。但是对于大量内容并且频繁更新的网站,我们无法全部手动去挨个实现,于是出现了我们常见的信息发布系统CMS,像我们常访问的各个门户站点的新闻频道,甚至他们的其他频道,都是通过信息发布系统来管理和实现的,信息发布系统可以实现最简单的信息录入自动生成静态页面,还能具备频道管理、权限管理、自动抓取等功能,对于一个大型网站来说,拥有一套高效、可管理的CMS是必不可少的。
除了门户和信息发布类型的网站,对于交互性要求很高的社区类型网站来说,尽可能的静态化也是提高性能的必要手段,将社区内的帖子、文章进行实时的静态化,有更新的时候再重新静态化也是大量使用的策略,像Mop的大杂烩就是使用了这样的策略,网易社区等也是如此。
同时,html静态化也是某些缓存策略使用的手段,对于系统中频繁使用数据库查询但是内容更新很小的应用,可以考虑使用html静态化来实现,比如论坛中论坛的公用设置信息,这些信息目前的主流论坛都可以进行后台管理并且存储再数据库中,这些信息其实大量被前台程序调用,但是更新频率很小,可以考虑将这部分内容进行后台更新的时候进行静态化,这样避免了大量的数据库访问请求。
服务器分离
大家知道,对于Web服务器来说,不管是Apache、IIS还是其他容器,是最消耗资源的,于是我们有必要将与页面进行分离,这是基本上大型网站都会采用的策略,他们都有独立的服务器,甚至很多台服务器。这样的架构可以降低提供页面访问请求的服务器系统压力,并且可以保证系统不会因为问题而崩溃,在应用服务器和服务器上,可以进行不同的配置优化,比如apache在配置ContentType的时候可以尽量少支持,尽可能少的LoadModule,保证更高的系统消耗和执行效率。
数据库集群和库表散列
大型网站都有复杂的应用,这些应用必须使用数据库,那么在面对大量访问的时候,数据库的瓶颈很快就能显现出来,这时一台数据库将很快无法满足应用,于是我们需要使用数据库集群或者库表散列。
在数据库集群方面,很多数据库都有自己的解决方案,Oracle、Sybase等都有很好的方案,常用的MySQL提供的Master/Slave也是类似的方案,您使用了什么样的DB,就参考相应的解决方案来实施即可。
上面提到的数据库集群由于在架构、成本、扩张性方面都会受到所采用DB类型的限制,于是我们需要从应用程序的角度来考虑改善系统架构,库表散列是常用并且最有效的解决方案。我们在应用程序中安装业务和应用或者功能模块将数据库进行分离,不同的模块对应不同的数据库或者表,再按照一定的策略对某个页面或者功能进行更小的数据库散列,比如用户表,按照用户ID进行表散列,这样就能够低成本的提升系统的性能并且有很好的扩展性。sohu的论坛就是采用了这样的架构,将论坛的用户、设置、帖子等信息进行数据库分离,然后对帖子、用户按照板块和ID进行散列数据库和表,最终可以在配置文件中进行简单的配置便能让系统随时增加一台低成本的数据库进来补充系统性能。
缓存
缓存一词搞技术的都接触过,很多地方用到缓存。网站架构和网站开发中的缓存也是非常重要。这里先讲述最基本的两种缓存。高级和分布式的缓存在后面讲述。
架构方面的缓存,对Apache比较熟悉的人都能知道Apache提供了自己的缓存模块,也可以使用外加的Squid模块进行缓存,这两种方式均可以有效的提高Apache的访问响应能力。
网站程序开发方面的缓存,Linux上提供的Memory Cache是常用的缓存接口,可以在web开发中使用,比如用Java开发的时候就可以调用MemoryCache对一些数据进行缓存和通讯共享,一些大型社区使用了这样的架构。另外,在使用web语言开发的时候,各种语言基本都有自己的缓存模块和方法,PHP有Pear的Cache模块,Java就更多了,net不是很熟悉,相信也肯定有。
镜像
镜像是大型网站常采用的提高性能和数据安全性的方式,镜像的技术可以解决不同网络接入商和地域带来的用户访问速度差异,比如ChinaNet和EduNet之间的差异就促使了很多网站在教育网内搭建镜像站点,数据进行定时更新或者实时更新。在镜像的细节技术方面,这里不阐述太深,有很多专业的现成的解决架构和产品可选。也有廉价的通过软件实现的思路,比如Linux上的rsync等工具。
负载均衡
负载均衡将是大型网站解决高负荷访问和大量并发请求采用的终极解决办法。
负载均衡技术发展了多年,有很多专业的服务提供商和产品可以选择,其中有两个架构可以参考。
硬件四层交换
第四层交换使用第三层和第四层信息包的报头信息,根据应用区间识别业务流,将整个区间段的业务流分配到合适的应用服务器进行处理。 第四层交换功能就象是虚 IP,指向物理服务器。它传输的业务服从的协议多种多样,有>如果是用于存储网络文件、数据库存储、WEB服务器、邮箱服务器之类,那建议使用品牌服务器最好,即使组装服务器,一般服务器专用主板是集显的,无需额外增加高性能显卡,这样会拉慢服务器应有的性能(服务器可不像PC机),作为硬盘,最好选用SAS硬盘,这种接口在服务器上还是占主流,它的性能快,并一样可以做陈列,也可支持大容量硬盘。

服务器是提供计算服务的设备,由于服务器需要响应服务请求,并进行处理,因此在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面要求较高。在网络环境下,根据服务器提供的服务类型不同,分为文件服务器、数据库服务器、应用程序服务器、WEB服务器等。

建议还是买品牌服务器,至少有保障,推荐一款比较好的品牌:“亿万克”,运行快,不卡顿,老品牌,有保障,值得选择。

分布式元数据管理:分布式元数据管理主要通过元数据服务分布式部署的方式,实现了元数据分布式管理,解决一般分布式文件系统的单元数据服务节点导致的响应用户请求效率不高、存储文件数目受限和单点故障等问题,具有降低用户请求处理延迟,提高分布式文件系统的可扩展性和可用性的特性。一般包括完全分布式架构、元数据访问负载均衡、元数据服务器高效索引、元数据服务器d性伸缩等技术点。
多层级存储管理:多层级存储管理用于实现内存 / SSD/HDD 等异构存储设备的池化管理,以及各类存储设备的动态接入管理,通过设备抽象和提供统一命名空间,面向分布式文件系统提供统一的存储资源池,支持热点数据自动感知和智能化存储调度,最大程度提升数据存储与访问的效能。一般包括异构存储设备管理、多存储系统适配、统一命名空间、基于热度的存储资源调度等技术点。
数据一致性保障:数据一致性保障主要解决分布式文件系统中多副本和缓存等在数据存储与访问过程中的一致性问题,通过构建数据一致性模型、进行数据一致性校验等方式,保障数据在存储和访问过程中的一致性,在提升数据访问性能的同时确保数据存储和访问的正确性。一般包括一致性协议优化、一致性检验等技术点。
高并行读写优化:高并行读写优化用于提高分布式文件读写的并行化水平,最大化提升分布式文件系统下的数据访问效率。一般包括分布式数据访问缓存管理和调度算法优化、IO 算法优化和合并 IO 等技术点。
分布式散列与动态均衡:分布式散列与动态均衡实现分布式文件系统下高性能的数据块定位,提高数据访问性能,以及数据块的迁移和再平衡,提升分布式文件系统的稳定性和可持续服务能力。一般包括基于一致性哈希的数据块索引管理、动态数据再平衡等技术点。
存储高可用:存储高可用通过数据多副本技术、状态自检测和自修复、核心服务分布式部署等技术手段,实现自动检测分布式文件系统中的各种错误和失效,并且在文件系统出现错误和失效时可自行进行多副本间的数据修复,最终持续向用户提供正常的数据访问服务。一般包括可配置数据多副本、数据自恢复及自维护等技术点。
海量小文件高性能存储访问:海量小文件高性能存储访问主要采用小文件汇集成大文件进行存储、细粒度二级索引管理等技术,实现在现有分布式文件系统的基础上,扩展对海量小文件的存储与访问的能力,同时解决小文件的随机读写问题,大大提高分布式文件系统对海量小文件的存储访问效率。

电子商务网站高负载,简单可以分为前端和后台:
前端主要是(应该没有文件下载吧),因为是电子商务网站,少不了大量的,用户集中的情况下,网页加载就会变的极其缓慢。
解决思路:1、压缩,使产品图不失真的情况下尽可能的减少体积,节省宽带。2、增大服务器带宽。3、优化网页代码,尽量采用异步加载方式。4、CDN
后台则是数据处理和数据库负载,电子商务网站后台除了庞大的用户数据要处理意外,还有大量订单,和结算数据。
解决思路:增大数据库服务器配置。
高并发,是所有访问量大的网站都会遇到的问题,并发数是指同一时刻,服务器能接受多少次同时访问,比如服务器配置并发数为200,则这一刻只能允许200个用户同时访问,超过并发数,轻则用户打不开网站,严重的则是服务器宕机。
解决思路:1、CDN。2、增加服务器配置
注:CDN是现在网站普遍使用的加速方案,对减轻服务器负载,避免高并发,缓解恶意攻击都有很好的效果,其主要原理就是将服务器上的数据分发给多个服务器,用户访问的是CDN服务器,从而减轻和保护了网站服务器,也就是常说的云服务器。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/13258053.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-06-27
下一篇 2023-06-27

发表评论

登录后才能评论

评论列表(0条)

保存