file_exists: скорость работы

lumos

Новичок
file_exists: скорость работы

Есть у кого какие-нибудь данные про скорость работы функции
PHP:
file_exists()
?
 

newARTix

Новичок
сдается мне, все зависит от дисковой подсистемы, файловой системы, ОС и структуры директорий (в порядке убывания важности). Хотя реально если у тебя больше 1000 файлов в одной директории - это часто становится причиной тормозов.
Любой "теоретический замер" измерит сферического коня в вакууме.
Есть подозрение что эта функция тормозит в конкретном проекте? Ну так надо измерить и узнать наверняка.
 

lumos

Новичок
что прям time() использовать ? :DDD

-~{}~ 15.09.10 13:17:

Автор оригинала: newARTix
сдается мне, все зависит от дисковой подсистемы, файловой системы, ОС и структуры директорий (в порядке убывания важности). Хотя реально если у тебя больше 1000 файлов в одной директории - это часто становится причиной тормозов.
Любой "теоретический замер" измерит сферического коня в вакууме.
Есть подозрение что эта функция тормозит в конкретном проекте? Ну так надо измерить и узнать наверняка.
Сейчас складывается такая печальность, что эта функция в худшем случае может вызваться аж 4 раза (все из-за переносимости системы) из метода подгрузки, а он в свою очередь может вызываться... много раз. Вот и ищу теоретическую информацию про file_exists(). Чего лишний раз ваять не нужный код.

В крэйсерном режиме у меня система отрабатывает страницу с 11 запросами к СУБД MySQL и алгоритмом построения дерева для 200 сообщений за 0.07 секунды... Многовато. А если к этому ещё бесполезные проверки на ФС... Ну в общем надо действительно провести тесты на разных машинах.
 

Dovg

Продвинутый новичок
lumos
http://374.ru/images/2007-10/08/61_1.jpg

Не надо заниматься преждевременной оптимизацией.
Есть такое классное слово - профайлинг.
Оптимизировать надо то, что тормозит, а не все подряд.
 

lumos

Новичок
> Оптимизировать надо то, что тормозит, а не все подряд.
Не думая, написать штабеля кодов, а после разгребать получившийся винегрет ? Однако...

Есть случаи, которые возникают реже других - и появиться они могут уже в продакшене. Вы их будете там оптимизировать ? А если таких проектов уже великое множество ?

Я с Вами не согласен. Конечно, все случаи предусмотреть нельзя, но не писать же код, не запасаясь желательной теорией и опытом комрадов ?
 

Духовность™

Продвинутый новичок
Не думая, написать штабеля кодов
штабеля кодов по моему лично опыту получаются тогда, когда все пишется бездумно и в спешке. Если код грамотный и корректный, то можно простить и некоторые тормоза.

-~{}~ 15.09.10 14:09:

Не надо заниматься преждевременной оптимизацией
однако это не значит, что не надо ДУМАТЬ и УЧИТЫВАТЬ возможные проблемы.
 

Dovg

Продвинутый новичок
lumos
file_exists с нормальной организацией каталогов тормозить не будет. (ты ведь не хранишь 100500 картинок в папочке img ;) )

>Не думая, написать штабеля кодов, а после разгребать получившийся винегрет ?
Я написал ровно то, что написал. Без всякого тайного смысла.
Еще раз: оптимизировать надо то, что тормозит.

У тебя file_exist самое узкое место? - оптимизируй.
 

lumos

Новичок
Хорошо, возьму на заметку... а заодно ещё все-таки проконсультируюсь насчет подобного подхода :)

Спасибо!
 

MiksIr

miksir@home:~$
file_exist делает один сискол stat в файловую систему.
Влияние этого сискола может быть заметно только при дисковой системе на грани умирания с переполненной памятью в которой не осталось места для кеша.
При этом надо понимать, что пхп сам делает подобные сисколы на каждый подключаемый через include скрипт, причем по каждой директории пути, т.е. выглядит это так

lstat("/storage", {st_mode=S_IFDIR|0755, st_size=184, ...}) = 0
lstat("/storage/project", {st_mode=S_IFDIR|0750, st_size=1504, ...}) = 0
lstat("/storage/project/subproject", {st_mode=S_IFDIR|0755, st_size=512, ...}) = 0
lstat("/storage/project/subproject/src", {st_mode=S_IFDIR|0755, st_size=216, ...}) = 0
lstat("/storage/project/subproject/src/helpers", {st_mode=S_IFDIR|0755, st_size=256, ...}) = 0
lstat("/storage/project/subproject/src/helpers/Helper.class.php", {st_mode=S_IFREG|0644, st_size=1986, ...}) = 0
open("/storage/project/subproject/src/helpers/Helper.class.php", O_RDONLY) = 12

По этому... твой вопрос не несет в себе всех полных данных для оценки влияния время выполнения одного stat вызова на все время работы скрипта.

-~{}~ 15.09.10 15:56:

Но в кратце - забей, скорость очень высокая, влияния на твой скрипт не окажет.
 

pilot911

Новичок
можно узнать, что это такое lstat("/storage", {st_mode=S_IFDIR|0755, st_size=184, ...}) = 0 ?
 

MiksIr

miksir@home:~$
man 2 lstat
These functions return information about a file. No permissions are required on the file itself, but -- in the case of stat() and lstat() -- execute (search) permission is required on all of the directories in path that lead to the file.

stat() stats the file pointed to by path and fills in buf.

lstat() is identical to stat(), except that if path is a symbolic link, then the link itself is stat-ed, not the file that it refers to.
-~{}~ 15.09.10 16:08:

А, если я правильно понял вопрос - это не php инструкция, это трейс системных вызовов, которые делает процесс php в ядро.
 

lumos

Новичок
Автор оригинала: MiksIr
file_exist делает один сискол stat в файловую систему.
Влияние этого сискола может быть заметно только при дисковой системе на грани умирания с переполненной памятью в которой не осталось места для кеша.
При этом надо понимать, что пхп сам делает подобные сисколы на каждый подключаемый через include скрипт, причем по каждой директории пути, т.е. выглядит это так

lstat("/storage", {st_mode=S_IFDIR|0755, st_size=184, ...}) = 0
lstat("/storage/project", {st_mode=S_IFDIR|0750, st_size=1504, ...}) = 0
lstat("/storage/project/subproject", {st_mode=S_IFDIR|0755, st_size=512, ...}) = 0
lstat("/storage/project/subproject/src", {st_mode=S_IFDIR|0755, st_size=216, ...}) = 0
lstat("/storage/project/subproject/src/helpers", {st_mode=S_IFDIR|0755, st_size=256, ...}) = 0
lstat("/storage/project/subproject/src/helpers/Helper.class.php", {st_mode=S_IFREG|0644, st_size=1986, ...}) = 0
open("/storage/project/subproject/src/helpers/Helper.class.php", O_RDONLY) = 12

По этому... твой вопрос не несет в себе всех полных данных для оценки влияния время выполнения одного stat вызова на все время работы скрипта.

-~{}~ 15.09.10 15:56:

Но в кратце - забей, скорость очень высокая, влияния на твой скрипт не окажет.
Отлично! Вот это ценная информация! :) Спасибо :)
 
Сверху