严格的服务器端处理(没有web浏览器交互):Java或PHP更适合这种情况吗?

严格的服务器端处理(没有web浏览器交互):Java或PHP更适合这种情况吗?,java,php,server-side,websocket,Java,Php,Server Side,Websocket,情况如下: 我目前有一个web应用程序,它使用PHP提供HTML/CSS/JS,并与MySQL数据库通信。完全香草和普通的。PHP是表示逻辑(HTML生成等)和业务逻辑(应用程序广泛使用Ajax来请求数据或告诉服务器对某些内容进行更改)的混合体 作为该系统重新设计的一部分,我将从PHP中删除所有表示逻辑。相反,我将使用(一个基于javascript的窗口工具包/应用程序)连接到服务器上的(一个允许双向通信的COMET/AJAX替代品)。让我们挥动魔杖一分钟,忘记ExtJS4是如何传送到浏览器的,

情况如下:

我目前有一个web应用程序,它使用PHP提供HTML/CSS/JS,并与MySQL数据库通信。完全香草和普通的。PHP是表示逻辑(HTML生成等)和业务逻辑(应用程序广泛使用Ajax来请求数据或告诉服务器对某些内容进行更改)的混合体

作为该系统重新设计的一部分,我将从PHP中删除所有表示逻辑。相反,我将使用(一个基于javascript的窗口工具包/应用程序)连接到服务器上的(一个允许双向通信的COMET/AJAX替代品)。让我们挥动魔杖一分钟,忘记ExtJS4是如何传送到浏览器的,以及它是如何与web套接字网关通信的

剩下的是一个web套接字网关(用Java编写,并在特定端口上持续监听web套接字连接)和一些当前用PHP编写的业务逻辑/DB交互

在这一点上,我看到了两种选择之一:

  • 将业务逻辑/DB交互保留在PHP中,并通过从命令行调用PHP或让PHP/Apache在不同的端口上侦听来执行它,仅用于来自web套接字网关的通信

  • > p>编写一个新的java或C++应用程序,它将持久化,并在特定端口上监听来自Web套接字网关的通信。业务逻辑/DB集成是用java或C++代码重新编写的,是应用程序的一部分。

    java或C++中的重写会比一遍又一遍的调用PHP提供更好的性能吗?(PHP代码编写得非常干净:使用CodeIgniter和Doctrine等包面向对象)

    性能优势是否会超过重新编写所有业务逻辑的麻烦?显然取决于许多因素,比如代码的数量,但你的直觉是什么

    如果它可能影响您的想法/反馈,您应该知道web套接字网关(Kaazing)支持JMS、Stomp、AMQP、XMPP或您自己构建的自定义内容

    让我知道,如果有任何其他信息,我可以提供,以帮助您与您的答案


    谢谢

    >编译语言(java或C++,在你的例子中)的写作几乎可以比PHP这样的解释性语言提供更好的性能。性能方面的好处几乎肯定不会超过重写所有代码的麻烦。

    我知道我在这里提到的很多解决方案都是“难看的”,但你听起来像是一个想要得到结果和重构的人,所以我希望没问题

    先用简单的方法(如果我理解正确的话,用PHP)完成。然后进行一次现实的压力测试。因为您正在进行PHP调用,所以只需创建一个真实的序列(登录、更改此项、执行此项、注销)并运行您认为真实的任意多个序列。100? 10000? 这取决于你对这件事的期望压力有多大,以及它是否会发生

    这一步比听起来容易。不要认为是“终极测试框架”,想想20行的python脚本,它可以运行任意多的线程,执行几行代码,让应用程序保持忙碌。如果要花40分钟以上,停下来简化。你花的时间是值得的

    如果CPU达到100或您耗尽了一些资源,那么可能是时候进行重写了,或者您可以猜测最长的时间是什么,然后用C编写。如果您确实使用C/C++并且您对它不是100%满意,请避免进行重大重写,因为这是一种危险的语言,有很多引入错误的机会。如果适合您的应用程序,甚至可以从PHP调用编译后的代码

    我曾经编写过生成C代码的服务器端HTML。这不完全是适合这项工作的工具。PHP可能很粗糙,但它完成工作很快。除非实际需要,否则我会避免优化

    祝你好运,别忘了告诉我们进展如何

    编辑:如果您选择混合语言解决方案,请不要忘记在之后清理它!标准化您在PHP中快速执行的操作,以通用格式执行,或者编写简短的自述。同样,这15分钟将为你或下一个人节省几天和许多头发。

      <> >如果你的业务逻辑具有高的处理成本,java或C++会给你带来更好的性能。 如果您只是从数据库中获取一些结果,那么不要期望有任何巨大的性能提升

    • 我会做一些原型设计/测试来确定性能瓶颈

    • 我认为PHP对于处理海量数据集来说太慢了,如果你有很多10000个对象来分析C++的岩石和java从热点JIT性能优化器中获益。 热点效应非常特定于在Java中进行数字运算。你真的可以看到JRE正在推动加速器,消除检测到的瓶颈。在一些罕见的情况下,HotSpot JIT优化的Java甚至可以比C更快

      在一些非常罕见的情况下,热点性能巫毒会使代码变慢

      你有没有想过把PHP应用程序变成更快的java或C++应用程序? 也许HipHop php2cpp编译器就是您想要的:

      Quercus是一个php4java运行时,它可以帮助您更便宜地迁移到Java。

    • 去年约书亚·布洛赫(Joshua Bloch)关于“表现焦虑”的演讲非常有趣。

      (32分钟视频)


    在我的搜索中找到了这个。不确定它是否有用/相关:@Paul-Java也是一种解释语言!但是我同意在许多任务中,C++和java比PHP快,正如公开的java基准所证明的那样。@感知:Java不是一种解释语言。Java被编译成字节码;字节码可以被解释,但也可以被JIT