0 Пользователей и 1 Гость просматривают эту тему.
  • 18 Ответов
  • 2340 Просмотров
*

ruslan13

  • Захожу иногда
  • 153
  • 2 / 0
Для пользователей со слабым интернетом критично количество запросов к серверу. У меня на Joomle на каждый обращение идет скачивание порядка 30 CSS и js файлов, и штук 50 запросов за Google fonts за двумя шрифтами. Даже если всё это закэшировано в браузере локально или на прокси сервере, запросы за 302 кодом идут. Все это (установление соединений) сильно тормозит загрузку.

Возникла идея плагина, который будет на сервере в момент запроса отключать вывод всех CSS и js, собирать их в один файл и выдавать гзипом.
Можно ли перехватить вывод всех выводимых скриптов и стайлшитов?
*

SDKiller

  • Живу я здесь
  • 2706
  • 326 / 5
  • ...ergo sum
У меня на Joomle на каждый обращение идет скачивание порядка 30 CSS и js файлов, и штук 50 запросов за Google fonts за двумя шрифтами.

К гадалке не ходи - у вас клубный шаблон, есть у них такая беда, поскольку им пофиг на оптимизацию, лишь бы красиво продаться.

Возникла идея плагина, который будет на сервере в момент запроса отключать вывод всех CSS и js, собирать их в один файл и выдавать гзипом.

Смысл? Лишний оверхед на обработку событий плагинов.

Просто собирайте все css-js, комбинируйте-минимизируйте и правьте шаблон чтобы выводить то что накомбинировали.

Что касается шрифтов - смотрите - может они и не используются по факту
(по опыту - большинство подключаемых в клубных шаблонах шрифтов банально не имеют кириллицы и фактически подменяются чем-нибудь типа Arial - а тогда нафиг их грузить вообще).
*

flyingspook

  • Живу я здесь
  • 3588
  • 247 / 9
(по опыту - большинство подключаемых в клубных шаблонах шрифтов банально не имеют кириллицы и фактически подменяются чем-нибудь типа Arial - а тогда нафиг их грузить вообще).
Чтоб иконки не рисовать и в спрайты не собирать  ;D и то их там десяток от силы используется.
*

SDKiller

  • Живу я здесь
  • 2706
  • 326 / 5
  • ...ergo sum
Чтоб иконки не рисовать и в спрайты не собирать  ;D и то их там десяток от силы используется.

Ладно бы иконки - с ними проще (де-факто сейчас либо FA либо Material).
А я неоднократно видел что какой-нибудь экзотический шрифт грузится ради одного слова из трёх букв в логотипе - в таком случае проще логотип сделать картинкой вообще.
*

zomby6888

  • Завсегдатай
  • 1473
  • 170 / 3
Скрипты и стили можно пожать и объеденить. Есть плагины для этого. Такое кол-во скриптов на одной странице - это уже плохо. Уверен что большая часть из них не используется. Если шаблон тянет все это, плохой значит шаблон.
интернет-блог: http://websiteprog.ru
*

shurakana

  • Давно я тут
  • 792
  • 49 / 6
Кол-во запросов не влияет на скорость, по вашим словам, если на странице будет 1000 картинок(это отдельный запрос каждая) то можно будет пойти покурить пока загрузится..

Дело не в стилях и скриптах, дело в вашем шаблоне который делает черти че, фреймворк внутри двух других, которые объединяет еще один..

Если у вас возникла идея сделать плагин, почему в начале не возникла идея включить отладку и посмотреть что там происходит?

Я не говорю что сжимать и объединять скрипты не нужно, нужно, очень даже, но никак не на лету..
Эта подпись отображается внизу каждого Моего сообщения. Я также могу использовать BB код и смайлы.
*

ruslan13

  • Захожу иногда
  • 153
  • 2 / 0
Шаблон написан "с нуля" мной конкретно под сайт, ничего лишнего. Грузятся бутстреп, jquery, jcemediabox, Lightbox, несколько модульных, fa, свои - всё только нужное, неубираемое.
Гугл фонт - робото 300,400,500, подключен css-ом по методу на сайте Google. Грузятся 40 файлов по 15 кб. Из них какие-то "вьетнамские" и еще черт знает что.
Проследите у себя за обращениями, увидите то же самое.

Плагин нужен, чтоб можно было апдейтить стайлшиты "на лету" в процессе перманентной разработки. Для релиза можно всё руками собрать в кучу и минимизировать.

shurakana
Сядьте на edge или перегруженный g3 и потом говорите мне, что количество запросов не влияет на скорость загрузки страницы. У моего сайта такая аудитория.
*

shurakana

  • Давно я тут
  • 792
  • 49 / 6
Эта подпись отображается внизу каждого Моего сообщения. Я также могу использовать BB код и смайлы.
*

ruslan13

  • Захожу иногда
  • 153
  • 2 / 0
По поводу оптимизации загрузки Google fonts нашел очень интересные статьи, может кому пригодится:
http://css-live.ru/articles-css/bystraya-zagruzka-veb-shriftov-na-adaptivnyx-sajtax.html
https://htmlacademy.ru/blog/61
*

flyingspook

  • Живу я здесь
  • 3588
  • 247 / 9
Как обычно очередной бред описан.
Цитировать
... достаточно подключать веб-шрифты лишь для тех браузеров, которые поддерживают WOFF или WOFF2 форматы
Зачем тогда вообще их подключать, там еще есть фраза на счет если не поддерживаются то будут применены стандартные шрифты.
*

ruslan13

  • Захожу иногда
  • 153
  • 2 / 0
В общем, поймать все стайлшиты и скрипты из шаблона оказалось невозможно, а из плагина вполне красиво вышло:

Код
public function onBeforeCompileHead() {
        foreach (JFactory::getDocument()->_styleSheets as $strSrc => $strAttr) {
            unset(JFactory::getDocument()->_styleSheets[$strSrc]);
            if (strrchr($strSrc, "?")!== false) {
                $strSrc = substr($strSrc, 0, strpos($strSrc, "?"));
            }
            $txt = $txt . "\n\n" . file_get_contents(JPATH_SITE . "/" . $strSrc);
        }
        file_put_contents(JPATH_SITE . '/templates/' . JFactory::getDocument()->template . "/css/style.css", $txt);
    }

В итоге все стили в одном файле.
Бутстрепы, мутулзы и прочее ненужное так же модно отключать.
Может кому пригодиться.
*

dialit

  • Захожу иногда
  • 69
  • 1 / 0
а из плагина вполне красиво вышло
какой плагин?
*

SDKiller

  • Живу я здесь
  • 2706
  • 326 / 5
  • ...ergo sum
для данного события должен быть системный
*

ruslan13

  • Захожу иногда
  • 153
  • 2 / 0
SDKiller

Тоже так думал, но добавил эту функцию в свой контентный плагин, и она заработала.
*

Филипп Сорокин

  • Сорокин Band
  • 1865
  • 153 / 4
  • разработчик.москва
JS прекрасно чувствует себя при загрузке с атрибутом defer, поэтому фанатизм в вырубании всех скриптов не оправдан. Можно спокойно оставить до 10 скриптов, если они загружаются в режиме отложенной загрузки. А вот с CSS и шрифтами сложнее — их действительно заколебёшься оптимизировать, при том что компоненты Joomla могут выводить стили в разном количестве и порядке.
« Последнее редактирование: 07.05.2016, 04:50:03 от Филипп Сорокин »
*

ruslan13

  • Захожу иногда
  • 153
  • 2 / 0
Усовершенствованный код. Теперь можно указать в отдельном файле forbidden-ss-js.txt скрипты и стайлшиты (и шрифты, привязываемые через стили), которые запрещено подключать.


Код
    public function processResources(&$resArr, $resFileName) {
        // forbidden-ss-js.txt file in the template root dir contains file names
        // of stylesheets and javascripts, that should not be loaded.
        // each filename on a separate string without spaces
        // EXACTLY like they go in the HTML page source
        // example:    
        //      /media/jui/css/bootstrap-responsive.min.css
        //      /plugins/system/jcemediabox/js/jcemediabox.js

        $forbiddenRes = file_get_contents(JPATH_SITE . '/templates/' . JFactory::getDocument()->template . "/forbidden-ss-js.txt");
        $forbiddenArr = explode(PHP_EOL, $forbiddenRes);
        foreach ($resArr as $strSrc => $strAttr) {            
            unset($resArr[$strSrc]);
            if (strrchr($strSrc, "?")!== FALSE) {
                $strSrc = substr($strSrc, 0, strpos($strSrc, "?"));
            }
            if (in_array($strSrc, $forbiddenArr)) {
                continue;
            }
            $strSrc = str_ireplace("http://" . $_SERVER["SERVER_NAME"] , "", $strSrc);
            $strSrc = str_ireplace("https://" . $_SERVER["SERVER_NAME"] , "", $strSrc);
            $txt = $txt . "\n\n" . file_get_contents(JPATH_SITE . "/" . $strSrc);
        }
        $resFile = JPATH_SITE . '/templates/' . JFactory::getDocument()->template . "/$resFileName";
  
        //  if the ss's or js's are all the same - do not change resulting resource file
        //  (for internet caching purposes)
        if (strlen($txt)!= filesize($resFile)) {
            file_put_contents($resFile, $txt);
        }
    }

    public function onBeforeCompileHead() {
        $this->processResources(JFactory::getDocument()->_styleSheets, "css/style.css");
        $this->processResources(JFactory::getDocument()->_scripts, "js/script.js");
    }


Филипп Сорокин
Я уже писал, что для меня каждый килобайт и каждый запрос важен - такие обстоятельства.
Но оптимально пришел к решению всё-таки отдельной легкой версии сайта. Этот плагин позволит использовать тот же Joomla движок для этого легкого шаблона.
« Последнее редактирование: 07.05.2016, 07:26:18 от ruslan13 »
*

Филипп Сорокин

  • Сорокин Band
  • 1865
  • 153 / 4
  • разработчик.москва
Понятно. Тогда могу порекомендовать JCH Optimize. Выполняет эту же функцию, и делает это безопасно. Может пригодится. А ещё есть Nginx + PageSpeed — самый лучший вариант для таких целей (он делает всё и ещё немного).
*

ruslan13

  • Захожу иногда
  • 153
  • 2 / 0
Да, то, что надо, спасибо. Только я ее уже, получается, написал. Минифаить, единственно, руками собирался, через сервис.

В Joomla, на самом деле, руками всё-равно много что заоптимизировать можно. Я вот на код свой посмотрел, а там ExtraVote установлен - оценка статей, звездочки. Так он в самом html'e блога от 20% до 50% текста сжирает (в зависимости от модулей). 40Кб из 150Кб. Можно его через Javascript убрать почти полностью.
*

Филипп Сорокин

  • Сорокин Band
  • 1865
  • 153 / 4
  • разработчик.москва
Цитировать
Минифаить, единственно, руками собирался, через сервис.
Через сервис неудобно, но зато качественно. Для скриптов Uglify.js — сжимает хорошо, работает безошибочно, т.к. по-моему он на Node.js сделан. Ещё можно Closure Compiler от Google на собственном серваке развернуть, который будет автоматически сжимать скрипты. Последний работает на Java.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Переустановка Joomla

Автор detective-SB

Ответов: 2
Просмотров: 183
Последний ответ 19.07.2018, 17:50:54
от detective-SB
Найти админку у Joomla 3

Автор vovchikku

Ответов: 15
Просмотров: 373
Последний ответ 12.07.2018, 08:58:30
от vovchikku
Не работает админка Joomla 3.

Автор AngryUser

Ответов: 7
Просмотров: 686
Последний ответ 02.07.2018, 08:02:08
от AngryUser
Не обновить "Joomla! Update Component Update"

Автор stardel

Ответов: 0
Просмотров: 144
Последний ответ 28.06.2018, 19:16:38
от stardel
Скрыть <script type="application/json" class="joomla-script-options new">

Автор romagromov

Ответов: 4
Просмотров: 474
Последний ответ 27.06.2018, 22:21:24
от dmitry_stas