5

我在想。有没有更好的表现:

$value  = preg_replace( array('/_{1,}/', '/-{2,}/'), array('_', '-'), $value);

比这个:

$value  = preg_replace('/_{1,}/', '_', $value);
$value  = preg_replace('/-{2,}/', '-', $value);

这只是一个非常简单的例子。

4

5 回答 5

3

作为我的测试代码:

$value = 'dfkjgnnfdjgnjnfdkgn dnf gnjknkxvjn jkngjsrgn';
$value1 = 'dfkjgnnfdjgnjnfdkgn dnf gnjknkxvjn jkngjsrgn';

$start = microtime(true);
for ($i = 0; $i < 1000000; $i++)
$value  = preg_replace( array('/_{1,}/', '/-{2,}/'), array('_', '-'), $value);
echo microtime(true) - $start.'<br>';

$start1 = microtime(true);
for ($i = 0; $i < 1000000; $i++){
    $value1  = preg_replace('/_{1,}/', '_', $value1);
    $value1  = preg_replace('/-{2,}/', '-', $value1);
}
echo microtime(true) - $start1;

1.4254899024963

1.2811040878296

于 2012-08-08T11:59:01.937 回答
2

使用 PLB 在评论中提到的 microtime() 测试方法,您会看到大约 0.3 秒的性能差异。第二个例子是“更快”。

于 2012-08-08T11:59:55.220 回答
1

为了遵循调用,我创建了一个非常简短的示例,其中替换有一些事情要做:

$value  = '1_2__3___4____5_____6______1-2--3---4----5-----6------';

$s_1    = microtime(true);
    for ($i = 0; $i < 1000000; ++$i) {
        $r_1    = preg_replace( array('/_{2,}/', '/-{2,}/'), array('_', '-'), $value);
    }
$e_1    = microtime(true);

$s_2    = microtime(true);
    for ($i = 0; $i < 1000000; ++$i) {
        $r_2    = preg_replace('/_{2,}/', '_', $value);
        $r_2    = preg_replace('/-{2,}/', '-', $r_2);
    }
$e_2    = microtime(true);

print $r_1;
print $r_2;
print $e_1 - $s_1;
print $e_2 - $s_2;

有了这个结果:

3.69554805756

3.2879319191

正如预期的那样,没有显着差异 - 实际上根本没有差异 - 因为我们正在谈论大约 100 万次通话。有趣的是,第二个版本“稍微”快了一点。我想这是因为创建和运行这些数组。

于 2012-08-08T12:10:55.633 回答
0

有趣的是,我运行了两个脚本,在我的例子中,带有数组的脚本更快。

第一次测试

2.0891699790955

2.2491400241852


第二次测试

3.2192239761353

3.4498269557953


系统

PHP: 5.4.9

操作系统: Ubuntu x64

CPU: i7-3630QM

于 2013-10-18T08:13:11.493 回答
0

挖掘一个旧线程。我刚刚在 MacOS 上运行了测试,并使用 insertnamehere 的函数得到了这些结果:

// Arrays
1.8200218677521

// Individual statements
2.4083371162415

所以这本身很有趣。但是,我想我会更进一步并引入一个新测试,因为在第一个测试中,每个循环都会创建数组。如果我们在循环运行之前创建它们会发生什么?

$find = array('/_{2,}/', '/-{2,}/');
$replace = array('_', '-');

$s_3    = microtime(true);
    for ($i = 0; $i < 1000000; ++$i) {
        $r_1    = preg_replace( $find, $replace, $value);
    }
$e_3    = microtime(true);
1.7364799976349  // Arrays (created)
2.4450128078461  // Individual statements
1.5605390071869  // Arrays (referenced)

结果每次都不同,但自然引用的数组甚至更快。在我的环境中,单个语句要慢得多。

需要注意的是,简单地重新加载页面几次,两个数组匹配速度趋于收敛,直到几乎没有差异。大概这是 PHP 缓存已编译的脚本 - 进行小编辑并保存它会再次提供更多不同的值。

因此,生产环境还有另一个基准——实时脚本中的值如何随时间变化?

于 2019-07-08T07:27:59.767 回答