FastCGI C++与脚本语言(PHP/Python/Perl)比较
使用FastCGI的C++和PHP/Python/Perl来完成同样的工作,各自有哪些优缺点呢?
在性能或者设计上,有没有什么问题是使用其中一种语言时需要注意的?你的看法也很欢迎哦。(告诉我为什么其中一种更好,或者为什么另一种不太行)。
16 个回答
用C++开发的应用程序通常会比用PHP、Perl或Python写的要快很多,甚至比C#或Java也要快一些,前提是它大部分时间不是在等数据库。如果应用程序大部分时间都在等待数据库的响应,那速度上就没什么区别了。这种情况其实是最常见的。
但是,正如benhoyt提到的,使用C++开发网页应用会花费更多时间,而且后期维护起来也会更麻烦。此外,C++的应用程序更容易出现严重的安全漏洞。现在大家最担心的通常是SQL注入和XSS攻击,但如果他们用C++写网页应用,可能会遇到缓冲区溢出的问题,这样就可能导致整个网络被攻陷,而不仅仅是数据被盗。
所以现在几乎没有人会用C++来写网页应用了。
脚本语言可能比C语言慢,但这真的是个问题吗?几乎没有。如果性能真的成了问题,你可以只把关键部分换成更快的代码。
推特使用Ruby就是个好例子;Ruby确实比较慢。Ruby的一些特性(让它一开始就很不错的那些)会限制不同类型的优化(有一篇很棒的文章是jruby的作者写的……好像是ola bini?记不太清楚了)。
尽管如此,推特还是用Ruby,因为Ruby的速度是足够快的。不久前,“博客”们报道推特为了性能原因迁移到Scala……其实只是消息队列(还有其他后端部分)迁移到了Scala。雅虎则使用多种语言;前端用PHP,性能要求高的地方则用其他更快的语言。
那么,为什么性能不是那么重要呢?有几个原因:
- 数据库瓶颈:慢的不是脚本,而是数据库。
- 客户端瓶颈:浏览器渲染的时间比请求的时间还长。优化服务器端,大家都不会注意到。
- 横向扩展:增加一台服务器,三倍的请求每秒,通常比优化应用程序便宜。
- 开发者的时间和维护成本是项目中最贵的部分。你能找到更多便宜的Python开发者来维护你的应用,而不是花时间找会C语言的开发者。
- 没有编译,开发周期短。
另一个支持脚本语言的理由是:很多脚本语言支持嵌入或包含快速的(C语言)代码:
- Python可以嵌入C代码。
- PHP可以用C语言写扩展。
- 服务器端的JavaScript通过Rhino可以直接访问Java/JVM (一个很好的例子是orf.at,这是奥地利最大的一个网站之一,使用的是helma - 服务器端的JVM解释的JavaScript!)
我认为,特别是在网页开发中,高级脚本语言的优点远远超过缺点。
几年前,我在工作中差不多学会了网页应用编程。我主要会用C语言,所以我用C写了一个(相对大型的)网页应用。这是个大错误。因为C语言在处理字符串和管理内存方面非常麻烦,加上我对网页应用的经验不足,项目很快就变得难以维护。
如果用C++会好很多,主要是因为std::string
比char*
好用得多。
不过现在我每次都会选择Python(虽然PHP也不错,可能更容易上手)。Python在处理字符串方面非常出色,而且对Unicode的支持也很顺畅。Python比C++有更好的网页工具和框架,它的正则表达式处理和标准库(比如urllib、email等)都很好用。而且你不需要担心内存管理的问题。
我可能只会在内存非常有限的情况下(比如在嵌入式微控制器上)或者如果我在谷歌工作,正在编写一个需要每秒处理成千上万查询的搜索引擎时,才会使用C或C++来做网页应用。