file vs file_get_contents vs fopen vs SplFileObject php
Сегодня проведу тестирование на предмет: как быстрее всего открыть файл в php и считать его в строку. Есть методы быстрее, которые сразу отдают файл на страницу, но я ими не пользуюсь. Тестирование буду проводить по отдельности, чтоб уберечься от файлового кэша.. Сам здравомыслием раньше не пользовался, на практике не проверял, в инете где-то понаписано было про file круче ну и использовал implode('',file($file)). Конечно же есть мелкая погрешность из-за нагруженности дисковой системы, брал результат который появлялся чаще..
$file=' 22,7 kb ';
$d1=file_get_contents($file);
$h=fopen($file,'r');
$d2=fread($h,filesize($file));
fclose($h);
$d3=implode('',file($file));
$d4='';
$h=fopen($file,'r');
while(!feof($h)) $d4.=fgets($h);
fclose($h);
$h=new SplFileObject($file,'r');
$d5=$h->fread($h->getSize());
$d6='';
$h=new SplFileObject($file,'r');
while(!$h->eof()) $d6.=$h->fgets();
$h=null;
Компьютер:
| № | время | память | медленнее на | больше памяти на | ||
|---|---|---|---|---|---|---|
| 1 file_get_contents | 0.000076 | 23.15 kb | 0 с. | 0 % | 0 kb | 0 % |
| 2 fopen fread | 0.000080 | 23.31 kb | +0.000004 с. | +5 % | +0.16 kb | +0.69 % |
| 3 implode file | 0.000203 | 23.25 kb | +0.000127 с. | +62.56 % | +0.1 kb | +0.43 % |
| 4 fopen fgets | 0.000255 | 23.28 kb | +0.000179 с. | +70.2 % | +0.13 kb | +0.56 % |
| 5 SplFileObject fread | 0.000282 | 23.31 kb | +0.000206 с. | +73.05 % | +0.16 kb | +0.69 % |
| 6 SplFileObject fgets | 0.000283 | 23.31 kb | +0.000207 с. | +73.14 % | +0.16 kb | +0.69 % |
| № | время | память | медленнее на | больше памяти на | ||
|---|---|---|---|---|---|---|
| 1 file_get_contents | 0.000065 | 23.22 kb | 0 с. | 0 % | 0 kb | 0 % |
| 2 fopen fread | 0.000085 | 23.39 kb | +0.000020 с. | +23.53 % | +0.17 kb | +0.73 % |
| 3 implode file | 0.000207 | 23.33 kb | +0.000142 с. | +68.6 % | +0.11 kb | +0.47 % |
| 5 SplFileObject fread | 0.000255 | 23.39 kb | +0.000190 с. | +74.51 % | +0.17 kb | +0.73 % |
| 4 fopen fgets | 0.000277 | 23.36 kb | +0.000212 с. | +76.53 % | +0.14 kb | +0.6 % |
| 6 SplFileObject fgets | 0.000320 | 23.39 kb | +0.000255 с. | +79.69 % | +0.17 kb | +0.73 % |
Хвалёный SplFileObject, как и ожидалось, тормознее всего..