Дмитрий
ты не имеешь доступа к доступу к веб серверу и не можешь оборвать сетевое соединение
Denis
Откуда ты берёшь эту информацию ?
Давайте я где-то через полчаса до дома доеду и распишу, как это работает, раз интересно.
Vladimir
Этим занимается mpm в апаче
Vladimir
Ну и скажем так лезть в это не следует
Дмитрий
интересно
Denis
У меня вопрос по кешу, чем твой кеш отличает от скажем полностраничного?
Это кэш такого типа и есть, только в отличие от плагина System-Cache, он начинает работу ДО того, как Joomla инициализируется и подсоединится к базе данных.
Denis
Про процессы. Mobile 3.0 в процессе оптимизации страницы сохраняет в БД список микро-задач, которые потом нужно будет выполнить (например, оптимизировать изображение, миифицировать js-Файл, скачать файл с удаленного сервера для оптимизации и раздачи его локально, и т.д.). А php-скрипты (в коде они называются "воркеры"), которые их будут выполнять, запускаются или через cron ("php -f /path/to/joomla/administrator/components/com_mobilejoomla/cli/cron.php &" каждую минуту) или через ajax-запрос (index.php?option=com_mobilejoomla&task=cron от каждого посетителя). При запуске каждый воркер в цикле перебирает номера от 1 до N (максимального количества одновременных воркеров, заданного в настройках) и пытается создать файл, имя которого соответствует этому номеру. Если это сделать не удалось (все такие файлы открыты и заблокированы другими воркерами), значит нужное количество воркеров уже достигнуто, и скрипт завершает свою работу. А если удалось, то устанавливаем set_time_limit и memory_limit, и начинаем брать задачи из БД и выполнять их. При этом учитывается, что задача может не завершиться успехом, поэтому считается суммарное количество попыток ее выполнения, и если их стало больше 5, то такая задача помечается как "неудачная" и больше не запускается.
Denis
В итоге получилось что-то вроде брокера сообщений, сделанного на php, но с рядом нюансов (таких как повтор попыток выполнения задач).
Denis
А что с роутингом?
Хранится соответствие "исходный нормализованный URL"=>"html-код". Под "нормализованный" понимается, что оттуда удалены utm- и прочие метки. Плюс, проверются куки (например, залогинен ли пользователь).
Дмитрий
просто оптимиация изображений
Дмитрий
их же тысячи может пойти
Дмитрий
сразу
Дмитрий
просто елси пустить паука и он сразу по всем пойдет
Дмитрий
то как это будет себя ощущать
Дмитрий
только вопрос. причем тут ядра процессеора?
Дмитрий
как это вообще связано
Дмитрий
у тебя крон работает в однопотоке
Дмитрий
ну порождаешь ты процессы в линуксе допустим несколько кронов
Дмитрий
ну кто сказал что они на разные ядра идут или на одно
Denis
а нафига базу напрягать на это?
Удобство и атомарность (нужно исключить возможность, что два скрипта начнут выполнять одну и ту же задачу). Можно реализовать такое на атомарных операциях с файловой системой (mkdir) или блокировках (flock), но это гораздо сложнее в отладке (если скрипт вылетел - кто-то должен за ним всё подчистить и т.д.).
Vladimir
Путаница в терминах
Denis
ну кто сказал что они на разные ядра идут или на одно
Если не заморачиваться с affinity, то linux их сам распределит по ядрам наилучшим образом.
Дмитрий
просто хз, в разумнсоти вообще всего подхода в таком виде
Denis
ну вообще тогда уж надо завести демона того же, и допустим он с sqlite работает
И требовать от пользователей кроме mysql/pogtgresql устанавливать php-sqlite?
Дмитрий
ну и как бы демона тоже отдельно надо запустить =)
Дмитрий
и крон твой тоже надо проставить в задачи отдельно
Дмитрий
сам ты не пропишешь от пыхи
Дмитрий
и тот еж sqlite он идет в стандратных модулях если не ошибаюсь во всех дистрах
Denis
Тогда к чему говорить о ядрах процессора?
К тому, что при невысокой нагрузке сервера они все-таки будут разбросаны по разным ядрам.
Vladimir
Будут или нет
Denis
и крон твой тоже надо проставить в задачи отдельно
Да, но это опционально. Можно запускать по ajax, а можно всю оптимизацию делать внутри исходного запроса. Ситуации бывают разные.
Дмитрий
то есть загоняем паука
Дмитрий
у меня допустим 100к товаров с картинками
Дмитрий
робот пошел все гнать
Дмитрий
твоя система выдержит это?
Дмитрий
как вот будет работать
Дмитрий
опиши
Дмитрий
все картинки кидаются на пхп скрипт, который кидает в базу микрозадачу
Дмитрий
а потом php скрипт в виде аякса еще какой-то или крон запуаскает исполнение микрозадач
Дмитрий
так?
Denis
твоя система выдержит это?
Вот в том числе как раз для этой схемы и было сделано разделение на "всё что можно - делаем быстро в запросе" и "всё остальное - отдельно с ограничением на количество воркеров", тем более, что скорее всего уникальных задач между страницами будет не так много.
Denis
Denis
Например, у меня двухядерный сервер, я задаю максимальное количество воркеров в 1 и могу быть уверен, что у меня всегда останется свободное ядро для обработки запросов, т.е. такая схема не так сильно повлияет на web vitals, Как если бы все оптимизации делались одновременно и разбросаны по всем ядрам.
Дмитрий
ок. денис, понятно
Дмитрий
спасибо
Дмитрий
там любой триггер елси идет, то к базе идет
Дмитрий
чтобы узнать включен плагин или нет
Дмитрий
даже если у тебя хоть на onAfterInit
Дмитрий
поэтому ничем это отличаться от кеша джумлы не будет по сути
Дмитрий
там разница копеечная и может быть заметная только на высоких нагрузках начинаться
Denis
в плагине у тебя? а плагин всегда идет после базы
У меня кэш запускается хитро, через defines.php в корне сайта.
Дмитрий
то естб ты влезаешь в их файлы?
Дмитрий
или как
Дмитрий
какой механизм
Denis
Joomla загружает настройки (пути) из includes/defines.php, но перед этим проверяет наличие файла defines.php в корне, чем я и воспользовался. Конечно, если вдруг у кого-то такой файл есть, то он перезаписываться не будет, но это очень маловероятно.
Дмитрий
подожди
Дмитрий
как ты запускешь свой код еще раз
Дмитрий
я не понял
Дмитрий
проверяет, да
Дмитрий
и какой мезанизм
Vladimir
Он создает файл defines.php
Vladimir
В корне
Дмитрий
@dryabov хорошо, а как ты хранишь файлы?
Дмитрий
по какой структуре
Дмитрий
я посомтрел, понял про что ты