从程序角度分析网站,都是我的拙见,记录看看。前端
一、网站打开体验,速度慢的优化方案:
@ 优化方案
前端架构优化;调整浏览器缓存、并发、异步特性;使用CDN服务;反向代理等;等。
@ 后端方案
缓存数据加速数据获取;使用集群改善请求吞吐量;请求使用异步消息队列加快相应;代码优化;等。
@ 运维方案
网络运营商的带宽能力及稳定性;服务器硬件的配置;数据中心的网络架构;虚拟化技术优化资源利用;等。算法
二、网站的性能分析要从这几个点分析:
@ 响应时间
执行一个操做的时间,包括从发出请求开始到收到最后响应数据所须要的时间。
@ 并发数
指系统可以同时处理请求的数目,即网站的并发用户数,指同时提交请求的用户数目。
@ 吞吐量
指单位时间内系统处理完的请求数量,体现系统的总体处理能力。
@ 性能计数器
描述服务器或操做系统性能的数据指标。包括对象与线程数、内存使用、CPU使用、磁盘与网络I/O等指标。
实际开发中,可依据以上几个点的测试结果针对性的对网站进行优化方案。数据库
三、Web前端性能优化
@ 浏览器访问优化方案
* 减小HTTP请求:合并CSS,合并图片,合并JavaScript 等手段减小浏览器对网站的请求次数。
* 使用浏览器缓存:对于静态文件资源,更新率比较低的资源能够缓存到浏览器中,用来减小请求次数。
* 使用压缩:服务器端对文件进行压缩,浏览器端对文件解压缩,以此减小通讯传输的数据量。
对HTML、CSS、JavaScript文件启用GZip压缩能够达到很好的效果。
* CSS放页面最上面,JavaScript放在页面最下面:依据两种文件执行的时间原理分析便可。
* 尽可能减小cookie的传输,太大的cookie会严重影响数据传输。
@ CDN方案
* 内容分发网络:CDN可以缓存的通常是静态资源,如图片、文件、CSS、JavaScript脚本、静态网页等,并且这些文件访问频率很高,
将其缓存在CDN可极大改善网站的打开速度。
@ 反向代理
* 代理服务器:合理有效的分配资源到相应的服务器,实现负载均衡的效果。
此外反向代理服务器也能够将静态资源缓存起来,当请求网站时,第一时间将资源返回相应客户端。后端
四、应用服务器性能优化
网站的业务代码都部署在这里,也是网站变化最多的,开发最复杂的地方。
@ 分布式缓存
* 网站性能优化第必定律:优先使用缓存优化性能
缓存主要用来存放那些读写比很高、不多变化的数据,读数据优先在缓存中获取,失效的状态再去访问数据库。
依据二八定律,即80%的访问落在20%的数据上,便可将这20%的数据缓存起来,以此改善数据访问的响应时间。
* 合理使用缓存须要考虑的问题
不要频繁修改数据;
对于不遵循二八定律的数据没有必要使用;
对数据不一致的问题预设解决方案;
* 防范缓存穿透
将不存在的值也缓存起来,将其值设置NULL,防止恶意访问数据库为目的的操做;
* 分布式缓存架构
这里不细讲你们应该也知道原理,简单介绍三种。
# JBoss Cache:须要更新同步,代价大,多用于企业,中等数据量;
# Memcached(互不通讯)、Redis(互不通讯),Redis是我本身加上的感受也是能够这样使用的,多台架构时,缓存的逻辑可添加到应用程序中,
记录对应一个算法结果将数据存放到不一样的缓存服务器中,取得时候经算法后去对应的缓存中获取结果;
@ 集群
多台服务器分布,配合负载均衡使用。
@ 异步
使用消息队列,将调用异步化,进而改善性能。
注意:异步化以后,要针对业务流程进行分析,不须要异步的业务须要进行应对方案,以防产生很差的体验或纠纷问题。
@ 代码优化
合理的优化业务代码,能够很好的改善网站的性能
这里相对要注意的几个问题:
* 多线程
多线程并发对某个资源修改操做,会致使数据错乱。
* 资源复用
尽可能减小开销大的资源建立/销毁,好比数据库链接、线程、复杂对象等。
能够适当使用单例模式和对象池。
* 合理的使用数据结构 改善数据读写和计算特性 进而优化程序的性能。
* 垃圾回收机制浏览器
五、存储服务器性能优化
@ 固态硬盘 > 机械硬盘
@ 存储服务 在数据方面的优化,详细可查看数据库优化方面的文章。缓存
在以上的优化方案中,涉及集群方面的方案,分布式能够改善网站并发特性,可是也会带来通讯延迟的问题,设计架构的同时内心有数,合理调整该方案的预期。
性能优化