Получение в чанке ссылки на текущую страницу с изм
Предположим, url текущей страницы имеет несколько параметров. В чанке указывается ссылка, которая должна загрузить эту же страницу, но с одним изменённым параметром
href="[[~[[*id]]? &page=`1`]]"Можно ли что-нибудь такое сделать, чтобы все прочие параметры здесь не перечислять (их придётся передавать черех плейсхолдеры), а указать только тот, который меняется? Комментарии: 29
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Через parse_str можно распарсить параметры в массив
Поменять в массиве нужные значения и собрать обратно в строку через http_build_query
Затем собрать URL.
Можно использовать http_build_url, но нужно PECL ставить
Кодом, кодом и ещё раз кодом:
Вот исходник метода makeUrl — там есть ровно один запрос для получения alias ресурса, и то, только в том случае, если запрошенного ресурса нет в текущей карте сайта.
А даже если и нет — что за бред, ты 0.0001 сек экономишь?
Результат 0.0001220703125 — очень долго, да.
Да ладно? Добавь к коду выше
и увидишь, что хоть с генерацией url, что без неё выполняется ровно 3 запроса в БД.
В общем, предложенный метод через request самый верный.
300 случайных ссылок — 0.04 сек.
Давай ты дальше рассказы про обращения к диску, БД и страшных тормозах будешь иллюстрировать цифрами?
Сам сниппет:
100 вызовов — 0.09 сек., 300 вызовов — 0.24 сек.
Даже если сайт так необычно устроен, что на одной странице необходимо вызвать 100 сниппетов — один фиг это лишь плюс 1 десятая секунды.
На мой взгляд, это никак нельзя назвать «ощутимыми тормозами».
0.78527092933655
Ну а если вызывать через $modx->runSnippet — секунд 5 будет.
Можно вызвать сниппет 1 раз, чтобы он выставил плейсхолдер со строкой параметров для всех ссылок.
300 вызовов makeUrl — 0.7-0.8 сек, 300 вызовов runSnippet — 1.2-1.4 сек.
Вообще, сабжевую задачу я уже решил. makeURL вызываю 1 раз, чтобы получить текущий URL. Далее меняю параметр через parseUrl, собираю обратно unParseUrl. А вызываемым чанкам передаю весь url.
1 Гб памяти, CPU 1500 МГц. Впрочем, эти ресурсы здесь погоды не делают. В основном — скорость работы с диском на VPS. У вас, похоже, дисковые операции летают на первой космической…
s195.h1.simpledream.ru/manager
Ну а переходить на simpledream — не вариант. Там маловато оперативки (хотя, 384 Мб, наверное, вполне достаточно) + дисковой памяти совсем нет (нужно от 100 Гб).
modx.pro/hosting/3335-hosting-simple-dream-a-new-ruler-of-tariffs/
И вопрос. Эти тормоза зависят исключительно от ПО хостера, разделяющего ресурсы диска по VPS, или можно оптимизировать сам VPS?
Так вот в чём дело — у вас там SSD стоят. Тогда всё понятно ))
Запрос будет только если id ресурса, для которого строится url, нет в этой карте. Такого обычно не бывает.
Вот, проверь.
300 вызовов makeURL у вас занимает 0.04 сек, у меня — 0.75 сек. Разница — в 20 раз.
4-х кратный тормоз объясняется процессором (согласно тесту). Но остаётся объяснить ещё 5-кратный тормоз. Из-за диска?
Ни шины, ни скорости ОЗУ, ни пропускной способности, ни платформы виртуализации — только HDD.
А нихрена. Нету там всей строки:
[REDIRECT_QUERY_STRING] => q=page.html
[REDIRECT_URL] => /page.html
[QUERY_STRING] => q=page.html
[REQUEST_URI] => /page.html
Всю жизнь $_SERVER['QUERY_STRING'] использовал. А сейчас как будто на другую планету попал. зелёные человечки полезут…