我的大多数应用程序都是用PHP编写的((前端和后端)。
有一部分工作得太慢,我需要重写它,可能不是在PHP中。
什么会给我以下内容:
1.大多数速度
2.最快的发展
3.易于维护。
我想在CPP中将这段代码重写为PHP扩展,但是我可能会被锁定在这个解决方案上而错过了一些更简单/更好的解决方案?
每次运行时,算法都是几个MB数据上的PorterStemmerAlgorithm。
答案 0 :(得分:9)
答案实际上取决于它是什么样的过程。
如果是一个长时间运行的过程(至少几秒钟)那么用C ++编写的外部程序可能会非常容易。它不会有PHP扩展的复杂性,它的稳定性不会影响PHP / apache。您可以通过管道,共享内存或排序进行通信......
如果是一个短暂的运行过程(以毫秒为单位),那么您很可能需要编写PHP扩展。这样就可以非常快速地调用它,几乎没有每次调用的开销。
另一种可能性是自定义服务器,它侦听Unix域套接字,并在PHP要求提供信息时快速响应PHP。那么你的每次调用开销基本上就是创建一个套接字(不错)。服务器可以是任何语言(c,c ++,python,erlang等等),客户端可以是使用socket _ *()函数的50行PHP类。
在做出此决定之前,需要评估大量信息。在您进入非常紧密的循环或数千次重复的函数调用之前,PHP通常不会显示减速。换句话说,HTTP请求和网络延迟的开销通常会使PHP延迟无关紧要(除非上述情况适用)
通过提交自定义PHP扩展,您可以显着增加维护它所需的知识基础(甚至高于C ++)。但是在必要时它是一个很好的选择。
欢迎使用更多详细信息更新您的问题,我相信Stack Overflow会很乐意提供帮助。
答案 1 :(得分:3)
<强>建议强>
PorterStemmerAlgorithm在http://tartarus.org/~martin/PorterStemmer/c.txt
处有 C 实现将此C程序绑定到数据源并使其成为独立的可执行文件应该是一件容易的事。然后,您可以使用其中一个proc函数(例如proc_open()
)从PHP调用它除非你需要多次调用这个程序PER php请求,否则这种方法可以节省你构建和集成PHP扩展的工作量,更不用说辛苦工作(在c中)已经完成了。
答案 2 :(得分:0)
我不确定PorterStemmerAlgorithm是什么。但是,如果您可以使您的流程并行运行并一起收集信息,那么您可以查看在JAVA中轻松实现的并行运行流程。不确定如何在PHP中调用它,但绝对可以维护。
您可以查看此框架。看起来很容易实现
https://computefarm.dev.java.net/
此致 富兰克林。
答案 3 :(得分:0)
如果您出于速度原因绝对需要用其他语言重写,那么我认为gahooa的答案很好地涵盖了选项。但是,在您这样做之前,如果PHP实现,您是否已经完全确定已经尽力提高性能?