所以我正在开发一个用旧式(无OOP)PHP编写的项目,在不久的将来没有完全重写.目前的一个问题是它的速度很慢 - 大部分时间都花费require在100多个文件上,这取决于它在引导过程中的位置.
我想知道我们是否可以将这个(部署,而不是开发)压缩成一个或两个文件,内置所有require'd文本.但是,因为有很多代码行没有用于每个页面,我想知道这样做是否会适得其反.
我认为,它的核心是,是否:
<?php
echo 'hello world!';
?>
Run Code Online (Sandbox Code Playgroud)
比任何更快
<?php
if(FALSE) {
// thousands of lines of code here
}
echo 'hello world!';
?>
Run Code Online (Sandbox Code Playgroud)
如果是这样,速度会慢多少?
(另外,如果由于某些其他原因我上面概述的是一个坏主意,请告诉我.)
两者之间的差异可以忽略不计.如果当前花费大部分执行时间需要文件,那么使用像APC这样的optcode缓存可能会显着提升,如果你还没有.
除此之外 - 基准测试,找出确切的瓶颈所在.根据我的经验,要求通常是旧式程序PHP应用程序中最慢的部分,但即使有很多包含的文件,如果这些都添加到"慢"应用程序,我会感到惊讶.
编辑:好的,一个快速的脏基准.我创建了三个'hello world'PHP脚本,就像这个例子一样.第一个(basic.php)只是回显字符串.第二个(complex.php)包含一个if false语句,其中包含从另一个应用程序粘贴的~5000行PHP代码.第三个(require.php)包含相同的if语句,但在另一个文件的~5000行代码中需要.
basic.php和complex.php之间的页面生成时间(由microtime()测量)大约为0.000004秒,所以实际上并不重要.来自apache bench的一些更全面的结果:
without APC with APC
req/sec avg (ms) req/sec avg (ms)
basic.php: 7819.87 1.277 6960.49 1.437
complex.php: 346.82 2.883 352.12 2.840
require.php: 6819.24 1.446 5995.49 1.668
APC在这里没有做太多但是耗尽内存,但它可能是真实世界应用程序中的不同画面.