Нагрузка при file_exists()

Тема в разделе "PHP", создана пользователем yeaahhh, 5 сен 2011.

Модераторы: latteo
  1. yeaahhh

    yeaahhh

    Регистр.:
    8 май 2008
    Сообщения:
    278
    Симпатии:
    11
    Друзья.
    На сайте стоит функция, которая делает проверку через file_exists() на наличие фото у пользователя по его login'у..
    (Если !file_exists(), то выводится стандартный аватар noavatar.png)

    Но, заметил, что при обилии народа на сайте, процесс открытия страницы очень сильно замедляется.
    ФОто пользователей грузятся достаточно долго. Предполагаю, что дело в file_exists().
    Данная функция работает на странице примерно 80 раз за 1 открытие.

    Ресурсозатратна ли данная функция? Есть ли аналоги?
    Заранее спасибо.
     
  2. aligarh

    aligarh Создатель

    Регистр.:
    18 авг 2007
    Сообщения:
    42
    Симпатии:
    2
    Можно попробовать функцию is_file, но много из этого выжать не удастся, гораздо быстрее было бы хранить переменную в БД и проверять по ней
     
  3. Delk0

    Delk0

    Регистр.:
    26 мар 2010
    Сообщения:
    284
    Симпатии:
    47
    Что за глупости, скорее будет тормозить об БД при большой загрузке, чем об проверку файла
     
  4. dino

    dino

    Регистр.:
    28 май 2009
    Сообщения:
    550
    Симпатии:
    204
    Если кроме картинок подгружается и другая инфа о пользователях из БД, то есть смысл хранить в БД путь к аватару пользователя и оттуда его подгружать(один хрен обращаешься к базе). В этом случае путь к картинке по умолчанию прописывается пользователю при регистрации и изменяется при манипуляциях пользователя с аватарой в профиле...
    Но если из БД ничего не берется, то нужно ковырять код дебагерами (смотреть на что именно уходит много времени при загрузке страниц)
     
  5. yeaahhh

    yeaahhh

    Регистр.:
    8 май 2008
    Сообщения:
    278
    Симпатии:
    11
    Я бы с радостью сделал считку аватара из БД, но дело в том, что нужно будет считывать из 2 таблиц..
    Идёт вывод сообщений из бд. Каждая аватарка отображается: $otpravitel.".jpg?".rand(1,99999);
    Рандомное число подбирается для того, чтобы обновлять кеш при загрузке, так как после смены аватара без рандомного числа срабатывает кеш и аватар не меняется.

    Может быть есть что-то ресурсозатратное в том, что я описал выше?
    Как оптимальнее сделать, не подскажете?
     
  6. dino

    dino

    Регистр.:
    28 май 2009
    Сообщения:
    550
    Симпатии:
    204
    А у тебя в таблице сообщений хранится имя отправителя а не его id?
     
  7. yeaahhh

    yeaahhh

    Регистр.:
    8 май 2008
    Сообщения:
    278
    Симпатии:
    11
    и id и его login
     
  8. dino

    dino

    Регистр.:
    28 май 2009
    Сообщения:
    550
    Симпатии:
    204
    А если пользователь сменит ник после написания некоторого количества сообщений, эти сообщения с каким логином и аватаркой будут показаны?
     
  9. yeaahhh

    yeaahhh

    Регистр.:
    8 май 2008
    Сообщения:
    278
    Симпатии:
    11
    ник сменить невозможно)
    а к чему вы клоните?)
    просто от темы немного отошли))
     
  10. dino

    dino

    Регистр.:
    28 май 2009
    Сообщения:
    550
    Симпатии:
    204
    Просто для того чтобы что-то советовать, для начала нужно понять что и как у Вас работает...
    P.S. Предлагаю такой вариант: При регистрации пользователя, создавайте файл с изображением noavatar.png и именем login.jpg При выборе пользователем новой аватарки, старый файл просто заменить... так у вас всегда будет файл $otpravitel.".jpg" и необходимость использовать file_exists() в принципе отпадет...
     
    yeaahhh нравится это.