Длительное ожидание перед загрузкой страницы

День добрый!
Друзья, помогите решить одну проблему. У одного сайта наблюдается длинная задержка в загрузке станиц товаров. Изначально грешил на опции товаров, но с помощью сервисов проверки скорости загрузки выяснил, что у станицы происходит какое-то ожидание длительностью в 3 с лишним секунды, потом все залетает махом.
Сначала грешил на изображения, коих на странице также достаточно, но вот сервис показал что изображения вроде как нормально загружаются…
Или дело все же в большом количестве изображений на странице? Размер страниц показывает 3,4 Мб. Из них почти 3Мб — изображения. Он действительно ждет пока все картинки не прогрузяться или дело тут еще в чем-то?
Андрей
25 октября 2016, 20:50
modx.pro
1 572
0

Комментарии: 11

Sergey Pozhidaev
26 октября 2016, 05:46
+2
Установите DebugParser и посмотрите его лог, думаю сразу станет понятно что у вас тормозит.
    Андрей
    26 октября 2016, 08:24
    0
    Спасибо. Воспользовался debugParser. Вывел 10 самых медленных тегов. Самыми медленными со скоростью загрузки почти в секунду является вывод опций, в которых как раз присутствуют картинки.

    Вот код этого вывода (для примера самый первый один)
    [[!msOptions?name=`colour_housing` &tplRow=`tpl.msOptions.radio.row3` &tplOuter=`tpl.msOptions.outer3`]]
    Код ttpl.msOptions.radio.row3
    <div class="ch cb" style="height: 227px;">
            	<div id="total_price2"><span class="circle"></span><span class="pr_changeHid"><i></i></span><span class="circle right"> <i class="fa fa-rub" aria-hidden="true"></i></span></div>
            	<div class="ffRadioWrapper">
            		<div class="ffCheckbox"></div>
            		<input type="radio" name="options[[[+name]]][0][value]" value="[[+value]]" rel="9750" class="product_option product_option_input" style="">
            	</div>
            	<div align="center">
            		<a class="fancybox" rel="gallery1" href="[[!msoptiongetfield? &fileld=`photo` &name=`[[+name]]` &value=`[[+value]]` &array=`[[*properties]]`]]" title="[[+pagetitle]]">
    	<img src="[[!msoptiongetfield? &fileld=`photo` &name=`[[+name]]` &value=`[[+value]]` &array=`[[*properties]]`]]" width="120" height="90" alt="[[+pagetitle]]"></a>
            	</div>
            	<p>
            		<label style="text-align:center;display:inline-block;width:100%;">[[+value]]</label> 
            	</p>
            	<div class="price" style="text-align:center;">[[!msoptiongetfield? &fileld=`price` &name=`[[+name]]` &value=`[[+value]]` &array=`[[*properties]]`]] [[%ms2_frontend_currency]]</div>
            </div>
    На данным момент я вижу одним из решений со скоростью — использовать phpthumbon для изображений. А как мне их подвязать к такому выводу картинок?
    [[!msoptiongetfield? &fileld=`photo` &name=`[[+name]]` &value=`[[+value]]` &array=`[[*properties]]`]]
    А также — почему так долго генерится тег [[*pagetitle]]?
      Василий Наумкин
      26 октября 2016, 09:22
      0
      На странице вызывается 10 раз msOptions, он оформляет свою работу в чанк tpl.msOptions.outer3, внутри которого еще 3 вызова msoptiongetfield.

      Итого, 30 вызовов msoptiongetfield на странице для вывода картинок, которые зачем-то запиханы в опции, когда у товаров есть своя галерея. Да и вообще, что это за сниппет такой — msoptiongetfield? Он не из miniShop2, а какой-то самописный.

      Еще и цена в опциях! Что это вообще за прикол?

      Неудивительно, что всё это жутко тормозит.
        Андрей
        26 октября 2016, 09:31
        0
        Да, Василий, сниппет самописный. Необходимо было реализовать опции товаров с картинками и ценами. Я конечно понимаю, что там все сделано, мягко говоря, через одно место. Мне так написал программист, потом я еже пару недель разбирался как там все работает.
        Готов предоставить доступы ко всему этому делу и хочу попросить о помощи или хотя бы подсказать, как реализовать тот же функционал, но без этих самописных штуковин, пускай даже на основе каких-то платных модулей — это будет работать в любом случае быстрее и лучше, чем сейчас.
          Василий Наумкин
          26 октября 2016, 10:37
          +1
          Есть же готовые решения, например msOptionsPrice2.

          У меня, пардон, времени разбираться с чужими проблемами нет. Просто указываю на очевидные тормоза, когда на странице запускаются 10ки сниппетов неизвестного содержания.
            Андрей
            26 октября 2016, 10:47
            0
            Понимаю Вашу занятость. Но как реализовать с помощью msOptionsPrice2 такой вид опций как на скрине? Возможно ли это?
    Андрей
    26 октября 2016, 08:39
    0
    UPD: Добавил phpThumbOn в вызовы опций, с генерацией нужного размера фото (поменьше), плюс сами фото сделал вызывать кешируемыми.
    Общая длительность после снизилась на 1 секунду примерно. Но ведь тут мы имеем тормоза после очистки кеша? Да и в целом картина все еще не ахти. Подскажите, как можно еще снизить время загрузки?
    <div align="center">
            		<a class="fancybox" rel="gallery1" href="[[phpthumbon? &input=`[[msoptiongetfield? &fileld=`photo` &name=`[[+name]]` &value=`[[+value]]` &array=`[[*properties]]`]]` &options=`&w=400&h=400&zc=1`]]" title="[[+pagetitle]]">
    	<img src="[[phpthumbon? &input=`[[msoptiongetfield? &fileld=`photo` &name=`[[+name]]` &value=`[[+value]]` &array=`[[*properties]]`]]` &options=`&w=120&h=90&zc=1`]]" width="120" height="90" alt="[[+pagetitle]]"></a>
            	</div>
      Sergey Pozhidaev
      26 октября 2016, 08:48
      0
      Ну как вариант попробуйте переписать все на Fenom (в послденем Minishop2 там все переписано именно на нем) + обычно если универсальные решения по скорости не устраивают, пишется свой сниппет, где происходит вся обработка и отдавать все данные плейсхолдерами в шаблон..
        Андрей
        26 октября 2016, 08:50
        0
        Переписать на Fenom все я думаю трудоемко?
        И почему pagetitle так долго грузится?
          Sergey Pozhidaev
          26 октября 2016, 09:09
          1
          0
          Ну переписывать или нет, конечно ваше дело. Нужна скорость — перепишите. А +pagetitle, наверное слишком часто у вас вызвается т.к. в доках
          Если на странице какой-то тег вызывается несколько раз, то эти вызовы суммируются.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    11