Статьи,обзоры,справочники по PHP

Для чтения файла file() быстрее, чем fopen+цикл - ускорение %


Чтобы прочитать в массив $x файл размером 1Мб (100 000 строк по 10 байт) можно воспользоваться двумя вариантами: чтение файла с помощью file(), либо традиционным методом fopen/fgets. Разумеется, для файлов разного объема и содержимого скорость может меняться. Но в данном примере статистика такова: file("1Mb_file.txt")

работает на 40% быстрее, чем:

$f=fopen("1Mb_file.txt","r") or die(1); while($x[]=fgets($f,1000)); fclose($f);

Аналогичные варианты

$f=fopen("1Mb_file.txt","r") or die(1); while($s=fgets($f,1000)) $x[]=$s; fclose($f);

или

$f=fopen("1Mb_file.txt","r") or die(1); while(!feof($f))) $x[]=fgets($f,1000); fclose($f);

работают еще медленнее (во втором случае лишняя функция feof() заметно снижает скорость). Тот же тест, но на 15Мб файле (100 000 строк по 150 байт) показывает разницу в 50%, в пользу file(). Тест проводился так, чтобы исключить фоновый своппинг во время работы из-за предшествующих команд создания/чтения таких больших файлов. Подсчитать тоже самое на очень маленьких файлах в 1-2 Кб не представляется возможным, т.к. операцию чтения нельзя повторять в течении одного теста, операции чтения будут кешироваться...





Содержание раздела