我正在考虑从C编写一个PHP扩展,只是为了提高速度。CCD_ 1和CCD_ 2等对我的项目来说太慢了。
但我突然想到,strpos()
和preg_match()
一定是用C或其他原始语言"最初"编写的。
所以,我的问题是:为了提高计算速度,我用C写一些扩展,这有意义吗?
如果您能够识别"自包含"的瓶颈,可能会很有用。PHP仍然是一种脚本语言。有很多查找操作,一些可以在C中优化的内存操作,也许是一个来自底层库的句柄/值/内存块,您可以在特定情况下更有效地存储/使用它,等等
但是,请确保您所接触的代码块是值得的。即首先确定瓶颈。运行php探查器(例如xdebug),然后甚至可能运行C探查器,以查看php运行时的时间。请记住,如果您编写扩展,您的工作就是保持它的最新、运行和功能(包括错误跟踪/修复、质量保证等)。
您对用PHP编写一些扩展很感兴趣,这真的很酷。
请通过以下链接了解更多关于Facebook如何启动HipHop项目以提高速度的信息。他们通过用C而不是PHP等母语编写一些代码来实现这一点。
http://developers.facebook.com/blog/post/2010/02/02/hiphop-for-php--move-fast/
但是,与其用PHP重写一些已经编写好的文本,不如试着编写新的文本,你会发现很多关于用PHP编写新扩展的文章。
现有的扩展已经优化,所以如果你想做一些特定的工作,并有一个好的算法来支持它,那就去写你自己的扩展吧。
虽然没有经过验证,但我认为,当你只执行自己的正则表达式或字符串扫描的低级实现时,你无法获得明显更好的速度。。。php是用c编写的,并且已经进行了高度优化。。。
检查您的代码并改进流程。。。
如果这是不可能的,看看脸书上的"嘻哈"。。。
在C中编写strpos()
或preg_match()
的另一个实现没有意义,因为PHP已经在C
中实现了它们。
相反,优化PHP代码是有意义的,这样它就可以使用这些函数,而不是滥用它们
但是,如果你真的想通过提供另一个实现来加快速度,它可能会有所帮助,前提是它足够快。否则就是浪费时间和精力。
您可以查看PHP源代码,检查这些函数的当前实现,看看是否真的可以改进。