Skip to content

rtrim equal fast to preg_replace #13710

Closed as not planned
Closed as not planned
@staabm

Description

Description

I am currently doing some micro benchmarks and tried several things to speedup phpunit in some form.

one idea I had when looking at a hotpath of a app was to replace

$string = (string) preg_replace('#\d+$#', '', $name, -1, $count);

with

$string = rtrim($name, '0123456789')

I am wondering why a plain rtrim() is as fast as a preg_replace call which should have some kind of overhead for working with regex etc?

see

mstaab@mst22:/www/www$ hyperfine --warmup 10 'php preg.php' 'php rtrim.php'
Benchmark 1: php preg.php
  Time (mean ± σ):      56.9 ms ±   9.0 ms    [User: 30.6 ms, System: 25.7 ms]
  Range (min … max):    43.8 ms …  80.4 ms    41 runs

Benchmark 2: php rtrim.php
  Time (mean ± σ):      58.7 ms ±   9.2 ms    [User: 34.0 ms, System: 24.0 ms]
  Range (min … max):    43.8 ms …  83.0 ms    46 runs

Summary
  'php preg.php' ran
    1.03 ± 0.23 times faster than 'php rtrim.php'

mstaab@mst22:/www/www$ php -v
PHP 8.1.27 (cli) (built: Dec 21 2023 20:19:54) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.27, Copyright (c) Zend Technologies

mstaab@mst22:/www/www$ cat preg.php
<?php

$name = 'Sets redirect header on 301';

$string = (string) preg_replace('#\d+$#', '', $name, -1, $count);

mstaab@mst22:/www/www$ cat rtrim.php
<?php

$name = 'Sets redirect header on 301';

$string = rtrim($name, '0123456789');


PHP Version

8.1.27

Operating System

ubuntu22.04 lts

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions