2

我正在考虑用 C 编写一个 PHP 扩展,只是为了提高速度。strpos()等等preg_match()对我的项目来说太慢了。

但它让我印象深刻,strpos()而且preg_match()一定是“最初”用 C 或其他一些原始语言编写的。

所以,我的问题是:我用 C 语言编写一些扩展是否有意义,只是为了提高计算速度?

4

4 回答 4

3

你有兴趣用 PHP 编写一些扩展真的很酷。

请通过以下链接了解有关 Facebook 如何启动 HipHop 项目以提高速度的更多信息。他们通过用 C 等本地语言而不是 PHP 编写一些代码来实现这一点。

http://developers.facebook.com/blog/post/2010/02/02/hiphop-for-php--move-fast/

但与其重写一些已经用 PHP 编写的 ext,不如尝试编写新的,你会发现很多关于用 PHP 编写新扩展的文章。

现有的扩展已经优化,所以如果你想做一些特定的工作,并且有一个好的算法来支持它,那就去写你自己的扩展。

于 2012-08-23T06:54:10.297 回答
3

It might be useful if you can identify a "self-contained" bottleneck. PHP is still a scripting language. There are a lot of lookup operations, some memory operations which can be optimized away in C, maybe a handle/value/memory block from one of the underlying libraries that you could store/use more efficiently in your specific case, and so on and on.

But, make sure that the code block you're touching is worth the effort. I.e. first identify the bottleneck. Run a php profiler (like e.g. xdebug) and then maybe even a C profiler to see where the time is spent in the php runtime. And keep in mind that if you write the extension it's your job to keep it up to date, running and functional (including bug tracking/fixing, quality assurance, ...).

于 2012-08-23T07:25:27.307 回答
1

没有经过验证,但我认为,当您只执行自己的正则表达式或字符串扫描的低级实现时,您无法获得明显更好的速度...... php用 c 编写的并且已经高度优化......

检查您的代码并改进流程...

如果不可能,请查看 facebook 上的“HipHop”...

于 2012-08-23T06:50:28.963 回答
1

strpos()用 C 语言编写or的另一个实现没有意义,preg_match()因为 PHP 已经在C.

而是使您的 PHP 代码优化以便它可以使用这些功能而不是 滥用它们是有意义的

但是如果你真的想通过提供另一个实现来加快速度,当且仅当它足够快时它可能会有所帮助。否则只是浪费时间和劳力。

您可以查看 PHP 源代码并检查这些功能的当前实现,看看您是否真的可以改进。

于 2012-08-23T06:52:19.223 回答