|
 3.4 Кб |
|
| Запускаем, смотрим и делаем выводы. | |
|
|
|
|
|
|
|
для: Akira
(02.08.2005 в 21:30)
| | Не стоит забывать что scan_dir при втором запуске работает уже с кэшем, вот в общем результаты первого запуска:
0) scan_dir() - 0.638489
1) scan_dir_glob() - 0.308141
2) list_dir() - 0.405994
3) scandir() - 0.328558
|
Второго:
0) scan_dir() - 0.323847
1) scan_dir_glob() - 0.362860
2) list_dir() - 0.441348
3) scandir() - 0.363610
|
| |
|
|
|
|
|
|
|
для: Akira
(02.08.2005 в 21:30)
| | Абсолютно одинаковые результаты, особенно после многократного прогона, выбивается только list_dir() - на 20% дольше выполняется.
PS В scan_dir_glob() вместо текущей директории указан пустой путь. | |
|
|
|
|
|
|
|
для: cheops
(02.08.2005 в 21:58)
| | list_dir() на самом деле вещь мощная, поэтому тормозит так, можно написать скрипт использующий все что можно из DirectoryIterator-а , при этом скорость выполнения повысится лишь на 10-20% и то что сделать обычными средствами будет трудно ... | |
|
|
|
|
|
|
|
для: isset
(02.08.2005 в 22:05)
| | Вот в общем прицепил, время выполнения:
0) list_dir() - 0.671398
Слабо аналог сделать для PHP4 ?)
Я к тому что list_dir сильно проигрывает в простых задачах, но в более крупных выигрывает | |
|
|
|
|
|
|
|
для: isset
(02.08.2005 в 22:16)
| | Зато у глоб, есть маска поиска :)) | |
|
|
|
|
|
|
|
для: Akira
(02.08.2005 в 22:28)
| | у list_dir тоже есть если захотеть :) | |
|
|
|
|
|
|
|
для: isset
(02.08.2005 в 22:30)
| | Допустимые флаги:
GLOB_MARK - Добавляет слеш к каждому возвращаемому предмету
GLOB_NOSORT - Возвращает файлы в таком виде, в котором они содержатся в директории (без сортировки)
GLOB_NOCHECK - Возвращает шаблон поиска, если с его помощью не был найден ни один файл.
GLOB_NOESCAPE - Обратные слеши не экранируют метасимволы
GLOB_BRACE - Раскрывает {a,b,c} для совпадения с 'a', 'b' или 'c'
GLOB_ONLYDIR - Возвращает только директории, совпадающие с шаблоном | |
|
|
|
|
|
|
|
для: Akira
(02.08.2005 в 22:37)
| | Никто не мешает расширить класс RecursiveDirectoryIterator :) | |
|
|
|
|
|
|
|
для: cheops
(02.08.2005 в 21:58)
| | Подрузомеваеться, что маска ("*") обозначает текущий каталог.
(".") и ("..") он сразу игнорирует. | |
|
|
|
|
|
|
|
для: Akira
(02.08.2005 в 22:30)
| | Мое имхо удобнее из простоты использовать глоб версию для пхп4 и стандартную для хпх5. А вы как думаете? | |
|
|
|
|
|
|
|
для: Akira
(02.08.2005 в 22:32)
| | Зависит от конкретной задачи, если нужно получить только список файлов, то соглашусь . Если необходимо получить кроме списка еще и полную информацию о файле , то легче использовать итераторы (list_dir) | |
|
|
|
|
|
|
|
для: isset
(02.08.2005 в 22:38)
| | !!!!!!!!!!!!!!!!!!
0) scan_dir() - 7.286823
1) scan_dir_glob() - 4.501647
2) list_dir() - 5.539380
3) scandir() - 4.297088
3438 файлов - 3 папки.
Позже проверил на 5 тыс. файлах и около 500 папок.
list_dir вылетел за 10 сек предел.
Остальные держаться в рамках 7 сек. | |
|
|
|
|
|
|
|
для: Akira
(02.08.2005 в 22:49)
| | 0) scan_dir() - 30.432499
1) scan_dir_glob() - 23.175559
2) list_dir() - 27.096471
3) scandir() - 24.190917
Файлов: 18 175, папок: 1 919, общий размер 1,03 гб | |
|
|
|
|
|
|
|
для: isset
(02.08.2005 в 23:31)
| | :) Хех...А не плохо мой глоб себя повел...Только это все теория :) | |
|
|
|
|
|
|
|
для: Akira
(02.08.2005 в 23:43)
| | После долгих раздумий почему же однако глоб так быстро работает нашел ошибку в тесте, в функции scan_dir_glob кусок кода:
if (is_dir($filename)) // если директория - рекурсия
{
scan_dir($filename);
echo "$filename <br />";
}
|
Вызывает почему-то scan_dir вместо scan_dir_glob! Заменив получилось:
if (is_dir($filename)) // если директория - рекурсия
{
scan_dir_glob($filename);
echo "$filename <br />";
}
|
И вот реальные результаты:
Первый запуск:
0) scan_dir() - 1.574023
1) scan_dir_glob() - 1.100256
2) list_dir() - 0.860709
3) scandir() - 0.676903
|
Второй запуск:
0) scan_dir() - 0.674803
1) scan_dir_glob() - 1.269258
2) list_dir() - 0.913654
3) scandir() - 0.833540
|
Немного побольше файлов:
0) scan_dir() - 6.791906
1) scan_dir_glob() - 7.232772
2) list_dir() - 7.063564
3) scandir() - 7.370550
|
| |
|
|
|
|
|
|
|
для: isset
(03.08.2005 в 00:22)
| | Да моя вина :) Сменил.
0) scan_dir() - 6.562161
1) scan_dir_glob() - 4.344995
2) list_dir() - 4.558613
3) scandir() - 4.480896
|
Проверка около 3 тыс файлов.
0) scan_dir() - 2.456326
1) scan_dir_glob() - 2.349604
2) list_dir() - 3.271566
3) scandir() - 2.544668
|
Чуть меньше файло, но больше папок. | |
|
|
|
|
|
|
|
для: Akira
(03.08.2005 в 00:43)
| | не может просто глоб выигрывать так :) Там ведь еще и регулярные выражения используются.. | |
|
|
|
|
|
|
|
для: isset
(03.08.2005 в 00:44)
| | Нет они там не используютсья, там, что-то другое. Просто глоб не использует других функций, как и scandir(). Меня беспокоит, одно. Скадир проигрывает по тестам глобу. Зачем тогда его было делать? | |
|
|
|
|
|
|
|
для: Akira
(03.08.2005 в 00:49)
| | Регулярные...Другого нет :)
Скорее всего эти функции по-разному справляются с разными задачами | |
|
|
|
|
|
|
|
для: isset
(03.08.2005 в 00:52)
| | "... совпадающие с шаблоном pattern согласно правилам, используемым в функции glob() библиотеки libc.." (c)php.net | |
|
|
|
|
 3.5 Кб |
|
|
для: Akira
(02.08.2005 в 21:30)
| | немного подправленая версия. Кстати глоб еще и сортировал массив, данную фишку я отключил. Читает как есть на сервере. | |
|
|
|
|
|
|
|
для: Akira
(03.08.2005 в 00:54)
| | Какая разница в данном случае между шаблоном и регулярным выражением? | |
|
|
|
|
|
|
|
для: isset
(03.08.2005 в 01:13)
| | Используються символы * и ? :) | |
|
|
|
|
|
|
|
для: Akira
(03.08.2005 в 01:35)
| | В исходниках glob.c:
#define DOLLAR '$'
#define DOT '.'
#define EOS '\0'
#define LBRACKET '['
#define NOT '!'
#define QUESTION '?'
#define QUOTE '\\'
#define RANGE '-'
#define RBRACKET ']'
#define SEP DEFAULT_SLASH
#define STAR '*'
#define TILDE '~'
#define UNDERSCORE '_'
#define LBRACE '{'
#define RBRACE '}'
#define SLASH '/'
#define COMMA ','
|
типа это просто так висит там?) Там можно задавать шаблон [0-9]{2} например... | |
|
|
|
|
|
|
|
для: isset
(03.08.2005 в 01:59)
| | Думаю был смысл называть это шаблоном , а не рег. выражением. | |
|
|
|
|
|
|
|
для: Akira
(03.08.2005 в 02:05)
| | шаблон == рег. выражение | |
|
|
|