我在阅读这篇文章 http://stevehanov.ca/blog/index.php?id=95后问这个问题
使用 cgi 代替 fastcgi 也不是一种惩罚吗?
更新:为什么有些人会假装回答“你获得了 20-30% 的性能提升”?这是纯粹的猜测还是这个数字来自可靠的基准?我看过 HipHop 的表现更多的是在 10 倍的规模上。
我在阅读这篇文章 http://stevehanov.ca/blog/index.php?id=95后问这个问题
使用 cgi 代替 fastcgi 也不是一种惩罚吗?
更新:为什么有些人会假装回答“你获得了 20-30% 的性能提升”?这是纯粹的猜测还是这个数字来自可靠的基准?我看过 HipHop 的表现更多的是在 10 倍的规模上。
我用几种语言和框架完成了 webdev,包括 python、php 和 perl。我自己托管它们,我最大的网站每天获得大约 2 万次点击。
任何具有合理速度的语言和框架都可以通过投入资源来扩大到每天 20k 的点击量。有些人比其他人占用更多的资源。(Plone,Joomla。我在看着你)。
我的 Witty 网站(还没有生产中)比我的 python 网站需要更多的(从内存中增加大约 5000%)(使用 seige)。IE。当我尽我所能用 seige 打击他们时,这些诙谐的网站每秒提供更多的页面。
我知道这不是一个真正的一般测试。
机智为您提供的其他速度优势:
多线程
如果您使用内置的 websrever 进行部署(例如,在 ha-proxy 之后)并让您的应用程序是多线程的......它会比 perl 或 php 应用程序加载更少的内存。
通常对于 php 和 perl 应用程序,您将让 Apache 为每个传入连接启动一个进程,每个进程加载整个 php 解释器、所有代码、变量和对象等等。使用 Joomla 和 Wordpress 等重型框架(取决于插件的数量),每个进程的内存消耗都会变得非常庞大。
使用 Wt 应用程序,每个会话都会加载一个 WApplication 实例(一个 C++ 对象),它是整个小部件和东西树。但是无论有多少连接,代码使用的内存都保持不变。
内置的 Web2.0
通常对于传统应用程序,它们仍然围绕旧的“http 请求进入”..“我们提供页面”..“完成”样式构建。我知道他们一直在添加越来越多的 AJAXy 类型的东西。
使用 Wt,它默认尽可能使用 WebSockets,只更新需要更新的页面部分。它回退到标准 AJAX,然后如果不支持 http 请求。使用启用 AJAX 和 WebSockets 的客户端,相同的 WApplication C++ 对象会持续使用..因此在设置新会话等方面不会损失任何速度。
回应“C++ 对 webdev 来说太难了”
C++ 确实有一些学习曲线。九十年代中期,我们用 Java j2ee 做网站。这在当时被认为在商业上是可行的,而且开发起来非常痛苦,但它确实有一个很好的优势,可以鼓励良好的文档和编码实践。
使用脚本网站,很容易走捷径而没有意识到它们的存在。例如,我工作的一个 8 年前的 perl 网站有一些重复的代码,但没有人注意到。每次显示产品列表时,它都会运行相同的 SQL 查询两次。
对于 C++ 站点,我认为机会较少,因为在 perl 站点中,没有那么多编程结构(如函数),它只是 perl 和嵌入式 html。在 C++ 中,您可能会使用带有名称的方法并最终导致名称冲突。
类型
曾经有一种方法采用 int 标识符,后来我们将其更改为 uuid 字符串。Python 代码很棒,我们认为不需要更改它;它运行良好。然而,当你把一根绳子传递给它时,有一条线埋在深处,会产生不同的效果。很难追踪错误,损坏了数据库。(幸运的是只在开发和测试机器上)。
C++ 肯定会抱怨很多,并迫使我们重新编写所涉及的函数而不是懒惰的虫子。
使用 C++ 和 Java,编译器会为您错误并警告很多此类错误。
与脚本语言应用程序相比,我发现 C++ 应用程序通常不需要单元测试(不要拍我)。这是由于语言强制执行了许多您通常会在单元测试中针对 Python 应用程序进行的操作。
概括
根据我目前的经验.. Wt 开发东西的时间确实比现有框架要长.. 主要是因为现有框架有更多开箱即用的东西。然而,在 Wt 中制作极其定制的应用程序比说 Wordpress imho 更容易。
与我交谈过的人从 PHP 迁移到 Wt(一个 C++ Web 框架)报告了显着的改进。从我使用 Wt 创建的小型应用程序来学习它,我发现它比我创建的相同 PHP 类型的应用程序运行得更快。随心所欲地获取信息,但我被卖了。
这让我想起了 20 到 30 年前人们是如何将汇编与 C 相结合的,然后是 10 到 20 年前的 C 与 C++。当然,C++ 会比 PHP/Rails 更快,但构建可维护和可扩展的应用程序需要多 5 倍的努力。
关键是您在牺牲开发资源的同时获得了 20-30% 的性能提升。你宁愿让你的应用程序运行速度提高 30% 还是实现 1/2 的功能?
我当然不卖这个。如果您想获得比 PHP 更高的性能,为什么不使用 Java(或更好的 Scala)框架呢?这些对于 Web 开发来说要好得多,有很好的、相对易于使用的框架,并且避免了 C++ 的许多令人头疼的问题。我一直认为 Web 开发(以及大多数现代非科学/高性能应用程序)的主要优点之一是能够避免 C/C++ 开发带来的麻烦。
大多数 Web 应用程序是网络绑定的,而不是处理器绑定的。除非您进行大量计算,否则用 C++ 而不是高级语言编写应用程序没有多大意义。此外,编写正确的 C++ 程序也很困难。编写应用程序将花费更长的时间,并且由于滥用指针、内存错误、未定义的行为等,程序更有可能以惊人的方式失败。总的来说,我会说这不值得。
每当您消除解释性或操作系统抽象层时,您一定会获得一些性能提升。话虽如此,语言或技术本身并不意味着您的所有问题都已解决。我已经修复了需要花费数小时来处理一组相对简单的记录的 C++ 代码。问题出在实现中,修复与语言的功能或限制无关。
假设一切都正确实施,您肯定会获得更好的性能。问题将在于寻找错误。C++ 的问题之一是许多开发人员目前都“受过训练”或习惯于在对象背后拥有很多与内存管理相关的细节。这样就无需考虑诸如“如果我将此指针传递给多个线程会发生什么?”之类的事情。有时它运作良好,但并非总是如此。无论对象如何隐藏令人讨厌的细节,您仍然需要考虑语言的一些微妙之处。
根据我的经验,您需要几个经验丰富的 C++ 开发人员来监视代码,以防止错误和内存泄漏失控。