@checky

Насколько затратно так использовать подключения к базе данных sql?

Я использую uikit slideset который преобразует html с специальными атрибутами в свой код
Например
<div data-uk-slideset="{default: 4}">
    <ul class="uk-grid uk-slideset">
        <li>...</li>
        <li>...</li>
    </ul>
    <ul class="uk-slideset-nav">...</ul>
</div>

ul class="uk-slideset-nav".../ul после загрузки страницы будет содержать уже не три точки, а навигацию, созданную в зависимости от количества li.../li и прочих js настроек в data-uk-slideset

Суть в том, что мне нужно чтобы эти элементы появлялись после клика на какой-то объект на странице, но если написать на jquery что-то вроде
$('.myobject').click(function() {
   $(this).html('<div data-uk-slideset="{default: 4}"><ul class="uk-grid uk-slideset"><li>...</li><li>...</li></ul><ul class="uk-slideset-nav">...</ul></div>');
});

то соответственно ничего из этого не выйдет
более того, если даже сначала на какой-нибудь странице это запустить, а потом скопировать уже переделанный html код это слайдсета и попробовать добавить его этим же способом через html() в .myobject, то тоже ничего работать не будет..

единственный вариант - это дать слайдсету создаться при загрузке страницы в каком-нибудь невидимом контейнере, а потом его оттуда переместить и сделать видимым, например так:

<div class="myslideset" style="display:none">

<div data-uk-slideset="{default: 4}">
    <ul class="uk-grid uk-slideset">
        <li>...</li>
        <li>...</li>
    </ul>
    <ul class="uk-slideset-nav">...</ul>
</div>

</div>


$('.myobject').click(function() {
   $(this).html( $('.myslideset') ).children('.myslideset').css("display","block");
});


и это работает, но получается элемент создаётся и подгружаются картинки даже тем людям, которым это не нужно.

Но я знаю каким людям это будет нужно, так как у них перед этим в sql базе данных есть специальное значение. Суть в том, что допустим это супер посещаемый сайт - 100 000 уникальных в день.. Все на одной странице.
Что лучше - сделать проверку у каждого при каждой загрузке страницы на наличие этого значения через php и только им подгружать этот слайдсет, то есть:

ПХП:
> Подключение к базе данных
> Выяснение есть ли у человека это значение

> Если нет - ничего, если есть -
echo 'тут слайдсет (также невидим, но при клике перемещается и делается видимым, но картинки загрузятся сразу, до клика)'

> В конце - закрытие базы данных

Я не знаю насколько это ресурсно затратно, но предполагаю что очень, (1)если нет - то сделаю так.
(2)Если да, то не пожалею людей и не пожалею трафика и буду грузить всем эти картинки, даже если они их никогда и не увидят.

Пока писал, уже почти точно решил не заморачиваться и поступить (2) способом, так как на самом деле сейчас посмотрел что картинок там всего на 300 килобайт, тем более они же будут кешироваться..

Поэтому перепоставлю вопрос, просто ради интереса - Насколько затратно так использовать подключения к базе данных sql при каждой загрузке страницы, если к примеру на сайте 100 000 уникальных людей в день? или если 50 000?)
  • Вопрос задан
  • 773 просмотра
Решения вопроса 1
elevenelven
@elevenelven
Php Dev @ Amadeus
Но я знаю каким людям это будет нужно, так как у них перед этим в sql базе данных есть специальное значение
Вы в любом случае вытаскиваете авторизационные данные и сохраняете в сессию. Заджойните признак (UI-маркер) отображения меню.
Если у вас нет какой-то ролевой/групповой модели доступа, то создайте UI-маркеры - что для этого пользователя отображать.

Конечно подход решил не заморачиваться имеет право на жизнь. Но надо быть дисциплинированным.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Скорее всего, вы экономите на спичках. Да, это съест какие-то милисекунды загрузки страницы и какие-то килобайты памяти, но если у вас сервер не на наручных часах запущен, разницы вы не заметите.
Ну и никто не запрещает кешировать значение в сессии.
Ответ написан
@dmitryKovalskiy
программист средней руки
Почитал немного по диагонали, так что не обижайтесь если совет совет будет перекликаться с вашими излияниями. У вас есть общий перечень элементов и его подмножество - перечень, доступный некому пользователю(по ролям или правам доступа - не важно). п.1) Если эти права доступа хранятся в БД - то просто тащите из БД только то что потенциально необходимо данному клиенту. К слову эти данные довольно статичны, так что можно их спокойно кешировать. п.2) по поводу "всего 300кб". Да, для одного пользователя они закешируются, но первый запуск будет долгим, а для другого нет. и при 100к юников эти 300Кб будут отдаваться первое время каждому, хотя есть риск что они не нужны. п.3) Где хранятся эти изображения? если в базе, то мы опять получаем лишнюю нагрузку на сервак для данных, которые ему не нужны. На мой взгляд одно из главных правил для таких задач по нагрузке на БД - никогда не тащите лишних данных. Пусть лучше база их отфильтрует, чем вы сначала здоровенный пакет данных будете тащить на сервер приложения, затем выяснять какие нужны, а какие нет, затем всю это свалку бросить клиенту "авось пригодится".
Ответ написан
romy4
@romy4
Exception handler
> Суть в том, что допустим это супер посещаемый сайт - 100 000 уникальных в день..
вы сильно льстите себе :)

сначала сделайте сайт, а уже потом точечно оптимизируйте тормозящие запросы. сейчас вы не тем занимаетесь
Ответ написан
Комментировать
@checky Автор вопроса
Ох лол.. Придумал простейшее решение на свою задачу - в общем всё будет создаваться при загрузке страницы, будет спрятано, НО без картинок (пустой src).. просто потом ПРИ КЛИКЕ будет меняться атрибут src у всех image и по id раздаваться нужный путь.

Но всё-таки вопрос про базы данных остаётся открытым, мне просто интересно -

Насколько затратно использовать подключения к базе данных sql при каждой загрузке страницы с учётом огромного количества таких загрузок в день?


ПХП

[подключение к бд
селект значения, проверка

много много кода

закрытие подключения] x ~500к-1 миллион раз в день
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы