读陈皓文有感
我个人感觉,真的程序性能优化十分重要,所以在这里我想在这里做一个总结,需要干货的朋友可以移步,抱歉!~
一、系统性能
- Throughput(吞吐量)
- Latency(系统延迟)
前者是针对Web应用,其实后者也有很大用处(纯属个人总结),比如利用大量后台脚本构建的系统(豆瓣就是如此,发现自己好喜欢拿豆瓣说事)。但是其实豆瓣更关注的是系统IO,这后面会讲到
- MIPS(每秒处理的百万级的机器语言指令数)
- Speedup(加速比)
正如陈皓所说,吞吐量和系统延迟有着一些关系:
Throughput越大,Latency会越差。
Latency越好,能支持的Throughput就会越高。
而MIPS这个估计用电脑的都知道,每个CPU单元能处理的指令是有限的,一般而言我们不会考虑这个指标,因为它是成本,它的更新得花一大笔钱。而在程序语言高级优化让其更贴近原始机器指令则是比较多,这就像GNU里面的O1、O2、O3优化操作。当然,性能最高的是机器语言,如果还有人会写的话…
Speedup可能就比较抽象了,这个表示了程序的并行性能。同一个任务在单处理器系统和并行处理器系统中运行消耗的时间的比率,如果该程序语言在并行处理系统能有更好的表现的话,一定要选用并行系统。因为在单处理器系统内使用并行操作其实不是一个明智的选择,相反,它会导致程序进入性能瓶颈。
性能测试方面的工具也比较多
最富有盛名的:LoadRunner
强力推动的:Apache JMeter
颇受好评的:Grinder
下面我们来拿这几个东西说事
抱歉,下面挪用一下测评数据
关键参数:
次要参数
一般
![image image](https://images.cnblogs.com/cnblogs_com/jianjungki/201206/201206222229122133.png)
代理能力
控制器
大家要对其做出对比见仁见智,个人比较喜欢Apache JMeter,因为个人喜欢Apache,哈哈,不要喷我…
二、程序性能
前面已经说过,其实我们很多时候耗在的不是处理数据,而是获取并且呈现数据上。因为一个大型的Web应用或者网站,它更关注的已经不是系统的处理能力,而是IO
很多Web网站用各种方案来处理这种问题,下面我总结一下,也以备我以后使用
IO处理能力提升依靠的都是缓存
这一点估计很多人都会赞同,不管是硬件上的还是软件上的,缓存都是对IO最好的支持
硬件
RAID (磁盘冗余阵列)由于实际应用上则以RAID5或RAID6为主,所以我就在下面列出RAID5和RAID6的图
高速硬盘(不值得,因为性价比不搞)
高速缓存(超贵…但是性能算是最好的)
某些解决方案
英特尔® I/O 加速技术(不是卖广告,纯粹举例)
软件
存取系统
memcached(分布式的快取系统)
一套分布式的快取系统,当初是Danga Interactive为了LiveJournal所发展的,但目前被许多软件(如MediaWiki)所使用
文件系统
TFS(Taobao FileSystem)
是一个高可扩展、高可用、高性能、面向互联网服务的分布式文件系统,其设计目标是支持海量的非结构化数据。
数据库系统
MongoDB(分布式文档存储数据库)
一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型
三、前台性能
前台性能其实很多时候被别人忽略,但是这却是很重要的一个指标,因为你的用户所看到的,就是前台,他们不关心技术,不关心系统是否崩溃,更不关心你是否能挣钱。
人很现实,他要什么,你给他什么就好了…
所以做前台的,很多时候做的就是怎么满足客户要求,并以最快速度让其获得这些信息。
我赞同统一框架的说法,因为好维护嘛
但是我绝对不赞同一直依赖框架,要什么功能就找它相应的插件(有很多时候这些插件并不合适你自己),然后套上去,不惜为了实现插件的一个功能,而向后兼容,加了很多别的脚本文件
好了,功能你实现了,前台则变得越来越重,甚至出现一些错误的时候,你根本处理不了,因为你已经不知道是那个脚本文件引起的错误(多个脚本文件的功能重叠)
我们需要的是精简系统
这里先声明一下,我们这里讨论的是Web站点,而不是外包项目的Web应用或者Web平台(很多时候,为了利益最大化,在项目外包中会抛弃性能问题而直接实现功能)
less css
强大神器,它让你的css可以缩少20%以上(当然,不排除你的站点就几句css,那我就没辙了)
lesscss最强大的不单单是这个,它可以支持很多别的CSS框架,缩小css文件负重,这样我们就能实现高效果、小文件量
但是,由于它不是原生的css,所以其实它会消耗一部分运算资源,但是其实在客户端,客户是很难发现的(js那么多还不是照样活过来了)。
jquery
这个我不说,大家都知道…它的好处很多,但是也因此搞到别人太依赖它了。
很多时候jquery几句就能写出来的功能就不要去用插件,这样非常耗费资源,并且这些资源耗费是不必要的。
更何况在使用别人的东西的时候,我们了解也是一个周期,我们更加需要关注的是实现,不要为了芝麻丢了西瓜