FiRеFоX
V.I.P.
- Регистрация
- 07.08.2010
- Сообщения
- 744
Дело было вечером, делать было нечего, я как обычно сидел за компом и пил кофе тупо смотря в код. Нужно было делать кое-что важное в этом коде (хотя это делать и до сих пор надо), но мне было не охото. Искал в коде какую-нибудь недоделку или ещё-что, что можно было переделать или исправить. Ну да, мне больше нравится исправлять ошибки в коде и искать всякие баги, чем делать что-то новое. Короче, дернул меня черт залезть в функцию, отвечающую за авторизацию. Была она примерно она такая:
Глянул я сюда и вижу, что при каждом обращении к страницам сайта идет авторизация через сессию(если юзер был авторизован до этого через куку или пост) и там запрос к базе. Думаю: "Нах..я при каждом обращении юзера к сайту делать запрос к базе? Закешируем ка мы это дело куда-то в отдельный файл или сессию". Ну и сделал вот так:
Тестанул на паре страниц, вроде все ок и работает. Закрыл нотепад и пошел спать. Утром встаю - тут баг, там баг. Думаю, да че мл.. за фигня то, вчера же всё было нормально. Хотя это даже не баги. Ну, например, Пишу сам себе письмо с разных аккаунтов, а оно приходит только через ~ 60с. Я как кусок идиота полез в скрипт писем, из головы вообще вылетело, что я вчера сделал это кеширование. Около часа сидел в коде писем и искал баг, но так и не нашел его. За одно пока искал баг, ещё и доделал подписку на форуме, про которую спрашивал тут на форуме уже давненько. Потом, правда, вспомнил, что сделал это супер-кеширование запроса.
Итак. сам вопрос:
Забить болт на этот запрос к базе и оставить как есть и пускай будет запрос или же доделать это якобы кеширование запроса до нормального состояния?
Вроде бы 1 запрос, но с 1к юзеров, это 1к запросов. В моей прошлой игре, некоторые юзеры, кто сидел с компов умудрялись обновлять страницы по 1 разу в секунду. Ну да, там важно время в боях было, типа когда использовать эликсир, когда умение или ещё что-то. Секунды имели значение.
P.S Возможно, что это можно было бы как-то решить на уровне MYSQL-кеширования, но в кешировании MYSQL я тупой как пробка.
P.P.S Вот только не надо в меня тыкать пальцем и кричать "Кешировать надо ресурсоемкие участки кода и тяжелые запросы mysql или данные которые, редко изменяются". Сам знаю Но вот про эту авторизацию у меня как-то мнение разделилось: Вроде бы и можно закешировать в сессию, а с другой стороны нафиг оно надо. Запрос же не такой уж и гигантский.
Вобщем поделитесь своими мнениями
Код:
function user_autoriz($post_id_login = false, $post_pass = false) {
if($post_id_login && $post_pass) {
//обработка переменных
$res = select("SELECT ... WHERE `id` = $id AND `pass` = $pass");
}
elseif($_SESSION['id']) {
$res = select("SELECT ... WHERE `id` = ".intval($_SESSION['id']));
}
elseif($_COOKIE['id'] && $_COOKIE['pass']) {
//Почти тоже самое что в первом if()
}
else {
$res = false;
}
return $res;
}
Код:
if($_SESSION['data_scan_mysql'] >= time() && is_array($_SESSION['user_info'])) {
$res = $_SESSION['user_info'];
}
else {
$res = select("SELECT ... WHERE `id` = ".intval($_SESSION['id']));
$time_tmp = 60;
$_SESSION['user_info'] = $res;
$_SESSION['data_scan_mysql'] = time() + $time_tmp;
}
Итак. сам вопрос:
Забить болт на этот запрос к базе и оставить как есть и пускай будет запрос или же доделать это якобы кеширование запроса до нормального состояния?
Вроде бы 1 запрос, но с 1к юзеров, это 1к запросов. В моей прошлой игре, некоторые юзеры, кто сидел с компов умудрялись обновлять страницы по 1 разу в секунду. Ну да, там важно время в боях было, типа когда использовать эликсир, когда умение или ещё что-то. Секунды имели значение.
P.S Возможно, что это можно было бы как-то решить на уровне MYSQL-кеширования, но в кешировании MYSQL я тупой как пробка.
P.P.S Вот только не надо в меня тыкать пальцем и кричать "Кешировать надо ресурсоемкие участки кода и тяжелые запросы mysql или данные которые, редко изменяются". Сам знаю Но вот про эту авторизацию у меня как-то мнение разделилось: Вроде бы и можно закешировать в сессию, а с другой стороны нафиг оно надо. Запрос же не такой уж и гигантский.
Вобщем поделитесь своими мнениями