备选的有
1. 静态文件html+keepalive
2. 静态文件html, 无keepalive
3. ssi(服务器端包含, server side include)
4. perl cgi
5. c cgi
6. mod_perl
7. php
8. perl fcgi
9. c fcgi
10. java
最简单的web环境下, 例如只是个hello world, 在每秒处理请求数上, 性能大致如下(越大越慢):
1. x 1
2. x 1.47
3. x 2.66
4. x 168.25
5. x 46.41
6. x 6.73
7. x 7.48
8. x 5.14
9. x 2.68
10. x 2.2
web环境若是复杂起来, 那就没准了, 不过每种语言在复杂web环境下的表现都会各有特色了.
1) 和 2) 两种的问题是如果静态文件非常多, 例如几百万个, 那你的服务器磁盘就吃不消了, 用squid挡前面加上urlHash能消除一些这样的问题, 但更新的时效性就弱了, 哪些页面的数据对或者不对, 也够你审校的. 3) 也受此类影响
3) ssi的问题是高不成低不就, 作为模板或者作为业务数据插入, 都太不够强. 作为往大段静态文本里插入少量动态数据还有点用处, 不过现在都用ajax load了, 所以这种用法也过时了
4) 和 5) cgi也是个过时的东西了, 用作不会大并发的应用还可以, 例如大文件上传
6) 和 7) 都是既简单又效率还行, 配合架构性的其他组件, 更能发挥快速开发的优点. 6) 在国内不够流行, 但比7)强大多了, 例如server级别的cache/数据库连接池/内嵌的cron等, 正儿八经应该有的配件, 7)都没有.
8) 和 9) 性能够赞吧, 前提是你能玩得转. 8 ) 还好些, 只是国内不够流行, perl又日益没落; 9) 由于没有统一且好用的内存管理, 封装和集成, 非侵入的container/collection, 连个string或stringbuffer都没有, 就要自己自己写一大堆的组件, 能借用的太少了.
10) 看起来很诱惑, 但java的问题就是业务复杂以后, 对象数膨胀的太快, 垃圾回收是被动的, 而且java让大多数人写出很脏很不小心的代码, 复杂应用java慢过php一点也不稀奇.
最后再给个非web环境下(没有webIO和connection的消耗)的各语言的性能比较:
(出处是debian的: http://shootout.alioth.debian.org/)
c++ x1
c x1.09
java6-server x1.79
python x43.26
php x44.72
perl x70.67
ruby x124.21
备注一下, c vs java == 1.7x?, 如果计算复杂度是10x, 那 c vs java == pow(1.7, 10) == 201x. c vs php == 44x?, 如果是写web页面, 字符串拼接或字典遍历方面, 10x的复杂度, 可能也就是个10x(不过php是解释执行, 执行时还要load一堆extension, 打开一堆句柄)
1. 静态文件html+keepalive
2. 静态文件html, 无keepalive
3. ssi(服务器端包含, server side include)
4. perl cgi
5. c cgi
6. mod_perl
7. php
8. perl fcgi
9. c fcgi
10. java
最简单的web环境下, 例如只是个hello world, 在每秒处理请求数上, 性能大致如下(越大越慢):
1. x 1
2. x 1.47
3. x 2.66
4. x 168.25
5. x 46.41
6. x 6.73
7. x 7.48
8. x 5.14
9. x 2.68
10. x 2.2
web环境若是复杂起来, 那就没准了, 不过每种语言在复杂web环境下的表现都会各有特色了.
1) 和 2) 两种的问题是如果静态文件非常多, 例如几百万个, 那你的服务器磁盘就吃不消了, 用squid挡前面加上urlHash能消除一些这样的问题, 但更新的时效性就弱了, 哪些页面的数据对或者不对, 也够你审校的. 3) 也受此类影响
3) ssi的问题是高不成低不就, 作为模板或者作为业务数据插入, 都太不够强. 作为往大段静态文本里插入少量动态数据还有点用处, 不过现在都用ajax load了, 所以这种用法也过时了
4) 和 5) cgi也是个过时的东西了, 用作不会大并发的应用还可以, 例如大文件上传
6) 和 7) 都是既简单又效率还行, 配合架构性的其他组件, 更能发挥快速开发的优点. 6) 在国内不够流行, 但比7)强大多了, 例如server级别的cache/数据库连接池/内嵌的cron等, 正儿八经应该有的配件, 7)都没有.
8) 和 9) 性能够赞吧, 前提是你能玩得转. 8 ) 还好些, 只是国内不够流行, perl又日益没落; 9) 由于没有统一且好用的内存管理, 封装和集成, 非侵入的container/collection, 连个string或stringbuffer都没有, 就要自己自己写一大堆的组件, 能借用的太少了.
10) 看起来很诱惑, 但java的问题就是业务复杂以后, 对象数膨胀的太快, 垃圾回收是被动的, 而且java让大多数人写出很脏很不小心的代码, 复杂应用java慢过php一点也不稀奇.
最后再给个非web环境下(没有webIO和connection的消耗)的各语言的性能比较:
(出处是debian的: http://shootout.alioth.debian.org/)
c++ x1
c x1.09
java6-server x1.79
python x43.26
php x44.72
perl x70.67
ruby x124.21
备注一下, c vs java == 1.7x?, 如果计算复杂度是10x, 那 c vs java == pow(1.7, 10) == 201x. c vs php == 44x?, 如果是写web页面, 字符串拼接或字典遍历方面, 10x的复杂度, 可能也就是个10x(不过php是解释执行, 执行时还要load一堆extension, 打开一堆句柄)