Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
<img src="/avatar/%user_id%.png" onerror="this.onerror=null;this.src='/server/images/avatar_bg.png';">
Интернет у всех давно шустрый, за трафик никто не платит.
Решение «в лоб» будет тоже простым — писать в базу, загрузил пользователь аватар или нет. Но это потребует каждый раз обращаться в базу.потому что вы работаете с БД как с массивом. Типичная беда многих начинающих «web-разработчиков».
select
nick_name, ifnull(avatar,'аватарка по умолчанию'), title, message
from users
inner join messages on users.id=messages.user_id
where 'условие выборки сообщений'Точно так же можно «заполнить» другие поля: например, если не указан ник, показывать реальное имя, а если нет и его — логин:select ifnull(nick_name,ifnull(real_name,login)), ... from ...Если используется 5ый MySQL — лучше вообще создать представление (view) для выборки основных данных пользователя.
ifnull
лучше вообще создать представление
не слежу за эволюциями ANSI SQLcoalesce входил в стандарт, когда Вы еще в школе учились и вряд ли помышляли об SQL'е.
толку от него как от «семиуровневой модели OSI» — чисто академический, т.е. слабо применимый на практике.Зачем придумывать отговорки? Так и скажите — никогда не знал про coalesce и мануал не читал.
Он закрыт — почитать можно только за денежку.Пользуйтесь, это бесплатно.
Вьюха позволяет разработчику абстрагироваться от реализацииДа что Вы говорите? Следующие Ваши слова, видимо, будут про ORM.
if ($request_uri ...) {location ^~ /img/avatar/ {
error_page 404 =200 /img/avatar/default.gif;
expires -1;
access_log off;
}
location ~* ^.+\.(jpg|jpeg|gif|png|js|txt|css|ico|zip|rar|xml|swf)$ {
expires 7d;
access_log off;
}location = /img/avatar/default.gif {
expires -1;
access_log off;
}if ($request_uri ...) {location *~ { оптимальнее if( $request_uri ) {?напиши хоть один положительный коммент, а лучше пост, подчеркну, положительный. Достал плакаться.Положительные посты — это не ко мне.
Мой способ не юзает базу, работает отдельно, по сути не требует её наличияВ Вашем способе, как и в способах, предложенных в этом топике, присутствует хранилище. Хоть база, хоть мемкеш, хоть файловая система — суть одно. Эффективность доступа к любому из них будет разная в разных проектах. И выбирать конкретный метод — дело архитектора.
данный [способ]… не создает лишней нагрузки.На сервер — практически не создает, да. На сеть и клиента — создает. Второе даже более критично. Юзер будет ждать пока загрузятся несуществующие аватары (открою секрет — они не могут грузиться браузером все одновременно, существуют ограничения на соединения с одним хостом). Считайте это законом сохранения нагрузки — если где-то нагрузки убывает, значит где-то ее прибывает. Вы и перекладываете с больной головы на здоровую.
Уважаемый И.Сысоев писал о том, что nginx сопобен выдержать 10 000 запросов в секундуТут ко мне на собеседование приходил один товарищ, утверждал, что написал софт, который выдерживает до 70 тысяч запросов в секунду… А еще я слышал, что Петя Зайцев Мускулом Оракл порвал… Дальше-то что? По-любому, если нгинксу надо выдерживать не N запросов, а 10*N, то эт несколько хуже. Даже если не отражается на нагрузке.
Опираясь на ваш коммент, вы знаете 2 способаЭт я Вам по доброте душевной два рассказал. Могу больше. Консультации оплатите?
Решение «в лоб» будет тоже простым — писать в базу, загрузил пользователь аватар или нет. Но это потребует каждый раз обращаться в базу.А вы, простите, данные пользователя где храните? Может в файлах, или прямо в html коде?
А вы, простите, данные пользователя где храните?
некешируемые
ErrorDocument 404 /img/avatars/0.gif
Полезный совет: Аватары