Я несколько раз читал, что использование функций ctype_xyz быстрее и лучше, чем использование регулярных выражений. Но я провел несколько тестов, и регулярные выражения стали намного быстрее.
См. Пример ниже:
PHP Version: 7.2
OS: Windows
<?php
$foo = '112312312312323';
$start_time = microtime(true);
for ($i = 0; $i < 10000; $i++) {
$foo = $foo.'1';
preg_match('/^[a-zA-Z0-9]+$/', $foo);
// ctype_alnum($foo);
}
$end_time = microtime(true);
echo 'Result: ' . ($end_time - $start_time);
С preg_match('/^[a-zA-Z0-9]+$/', $foo); на выходе будет Result: 0.094325065612793
С ctype_alnum($foo); вывод будет: Result: 1.8465659618378
Может кто-нибудь мне это объяснить?
Я запустил ваш скрипт на моей виртуальной машине, php 7.2 - регулярное выражение 0.06, ctype_alnum 0.02, поэтому в моем случае - ctype_alnum в 3 раза быстрее.
Похоже, на HHVM все наоборот, про 3v4l.org/fjSaZ#vhhvm-3220 я ничего не знаю. Прокрутить вниз.
Поэтому мне следовало добавить, что я запускаю это в Windows. Так может в этом разница? В Unix / Linux ctype быстрее, а в Windows preg_match. Странный...
Честно говоря, вы бы когда-нибудь запускали PHP в производственной среде в Windows?
Конечно, я бы не стал, но вопрос не в этом;) Мне, к сожалению, приходится разрабатывать под windows
Oracle Virtualbox + Vagrant + Homestead, простой vagrant up, и вы можете разрабатывать под Windows, используя все замечательные вещи, которые дает нам Linux. Понятия не имею, можете ли вы это сделать, или, если вы знаете об этом, просто оставьте это на случай, если вы сочтете это полезным.
У меня есть WSL или VMware Workstation, а также ПК с Linux - в любом случае спасибо. Но опять же: мой вопрос только в том, ПОЧЕМУ он так себя ведет в Windows.






Пробовал разные версии и ctype примерно вдвое быстрее sandbox.onlinephpfunctions.com/code/…