|
Fedor Vlasenko
|
 |
« : 19.01.2012, 04:05:32 » |
|
Уважаемые форумчане! Для ускорения загрузки Ваших сайтов предлагаю рассмотреть данное решение. Поисковые системы Google и Yandex предлагаюют нам загружать такие библиотеки как MooTools, jQuery идр. с своих серверов. Документация YandexДокументация GoogleОсновные преимущества- обходится лимит на ограничение количества запросов к одному хосту, скрипты загружаются параллельно с другими элементами сайта, что ускоряет загрузку
- обновляться до новой версии библиотеки (или откатываться к старой в случае необходимости): достаточно указать номер нужной версии
- если пользователь до этого побывал на каком-то сайте, который использует эту же библиотеку, то она уже будет у него в кеше, т.е. экономится траффик как сервера, так и пользователя
Вот пример сжатия: https://ajax.googleapis.com/ajax/libs/mootools/1.3.2/mootools-yui-compressed.js 21 кб (86 кб без сжатия) http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js 21 кб (70 кб без сжатия) Загружаем Mootools предварительно отключив скрипт сайта. Вставляем нижеприведенный код в шаблон сайта (index.php) перед <head> <?php $document = JFactory::getDocument(); unset($this->_scripts[$this->baseurl.'/media/system/js/mootools-core.js'], $this->_scripts[$this->baseurl.'/media/system/js/mootools-more.js'], $this->_scripts[$this->baseurl.'/media/system/js/core.js'], $this->_scripts[$this->baseurl.'/media/system/js/caption.js']); $document->addScript('https://ajax.googleapis.com/ajax/libs/mootools/1.4.2/mootools-yui-compressed.js'); ?>
1.4.2 в примере номер версии //Joomla 2.5 Так можно удалить подгрузку скриптов joomla<?php $this->_scripts = $this->_script = array(); ?> Загружаем jquery <?php defined('_JEXEC') or die; $document = JFactory::getDocument(); $document->addScript('https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js'); ?> P.S.Прошу Вас обращать внимание при создании сайта и учитывать основные библиотеки которые вы хотите использовать. В основном это Mootools и Jquery, старайтесь использовать одну из них, и тем более не загружать множество версий этих библиотек . Плагин отключает все скрипты Mootools в Joomla 3 и 2.5
|
|
|
|
« Последнее редактирование: 16.03.2013, 13:06:53 от Fedor Vlasenko »
|
Записан
|
|
|
|
| |
|
ChaosHead
|
 |
« Ответ #1 : 19.01.2012, 12:44:13 » |
|
https://ajax.googleapis.com/ajax/libs/mootools/1.3.2/mootools-yui-compressed.js - это только mootools-core.js без mootools-more.js. Поэтому он столько и весит. Да и как я понял вы предлагаете ещё отключить core.js и caption.js? А их зачем, с фронтенда же не сможете материалы создавать?
|
|
|
|
|
Записан
|
|
|
|
|
Fedor Vlasenko
|
 |
« Ответ #2 : 19.01.2012, 14:59:44 » |
|
https://ajax.googleapis.com/ajax/libs/mootools/1.4.2/mootools-yui-compressed.js - это только mootools-core.js без mootools-more.js. Поэтому он столько и весит. Да и как я понял вы предлагаете ещё отключить core.js и caption.js? А их зачем, с фронтенда же не сможете материалы создавать?
Согласен полностью. Тут стоит вопрос производительности. Многие на сайте документы создают в фронтенде? А по поводу mootools-more.js В этот файл включили все дополнения функций mootols Скажите а знаете вы их? Используете ли вы их? И зачем тягать с собой такой довесок сжатая версия 233кб. Как же поступить кода компонент или модуль плагин использует функции mootools-more.js Вот мое решениеЗапускаем FireBug вкладка консоль. Смотрим какие недоступные функции пытаемся вызвать Идем в MooTools More Builder добавляем нужные нам дополнения, скачиваем файл. Копируем файл скрипта себе на сайт и подключаем примерно так $document = JFactory::getDocument(); $document->addScript('https://ajax.googleapis.com/ajax/libs/mootools/1.4.2/mootools-yui-compressed.js'); $document->addScript('http://Ваш сайт и путь к скрипту mootools-more'); Скрипт можно по желанию обработать packeromИли сжать скрипт здесь Файл скрипта mootools-more будет гораздо меньше
|
|
|
|
« Последнее редактирование: 14.03.2012, 14:00:54 от Poznakomlus »
|
Записан
|
|
|
|
|
ChaosHead
|
 |
« Ответ #3 : 19.01.2012, 17:10:38 » |
|
Ну например Kunena форум использует. Но людям же если вы советуете, то нужно обьяснить, что если у вас простенький блог, то убирайте их. Но имейте ввиду, что многие компоненты не будут должным образом работать. А в некоторых случаях mootools можно так вообще совсем отключить.
Сжимать их кстати можно в http://refresh-sf.com/yui/ А если на хостинге ещё и gzip включить то как раз вы и получите эти файлы совсем небольшого размера. И если грамотно настроить заголовки expires, то скрипты будут загружатся пользователем 1 раз, а потом браться из кеша.
В AJAX.googleapis.com так и сделано, из-за этого и ускорение.
И кстати есть ещё yandex api. А у многих провайдеров yandex находится в домашней сети и не имеет ограничений по скорости. Вот в этом плане лучше даже его использовать. Под 1.5 был готовый плагин для этого.
А тема кстати безусловно полезная. Лично меня напрягает, что от версии к версии этот mootools растёт и растёт. А это плохо для пользователей с мобильников.
|
|
|
|
« Последнее редактирование: 19.01.2012, 17:22:00 от ChaosHead »
|
Записан
|
|
|
|
|
flyingspook
|
 |
« Ответ #4 : 19.01.2012, 17:21:05 » |
|
ускорить можно не без лишнего вмешательства 1 требуется выключить всю загрузку js и CSS из всех расширений 2 подключить их в индекс файле 3 оптимизировать 4 включить gzip сжатие как на хосте так и в админке 5 оптимизировать изображения 6 ну и далее... а брать их со стороны смысл не большой, даже если они закешированы будут в браузере, остается в основном обращение к стороннему серверу бесплатного сыра даже в мышеловке нет))) а чтоб ускорить сайт требуется над ним работать, плюс сервер хороший надо
|
|
|
|
|
Записан
|
|
|
|
|
Fedor Vlasenko
|
 |
« Ответ #5 : 19.01.2012, 17:23:50 » |
|
ChaosHead Даже так быстрее обходится лимит на ограничение количества запросов к одному хосту, скрипты загружаются параллельно с другими элементами сайта <?php $document = JFactory::getDocument(); unset($this->_scripts[$this->baseurl.'/media/system/js/mootools-core.js'], $this->_scripts[$this->baseurl.'/media/system/js/mootools-more.js']); $document->addScript('https://ajax.googleapis.com/ajax/libs/mootools/1.4.2/mootools-yui-compressed.js'); $document->addScript('http://Ваш сайт и путь к скрипту mootools-more'); ?>
|
|
|
|
« Последнее редактирование: 16.04.2012, 23:15:37 от Poznakomlus »
|
Записан
|
|
|
|
Makc
Осваиваюсь на форуме
 
Репутация: +10/-0
Offline
Пол: 
Сообщений: 60
|
 |
« Ответ #6 : 20.01.2012, 14:21:16 » |
|
Лично я только начал осваивать оптимизацию, но на своем j 1.7 + K2 я сделал что mootools*всё грузятся только если ты зарегистрирован и хочешь добавлять новости, т.е. для 90% посетителей оно вообще не грузится
|
|
|
|
|
Записан
|
|
|
|
shadowrun
Осваиваюсь на форуме
 
Репутация: +1/-0
Offline
Сообщений: 53
|
 |
« Ответ #7 : 22.01.2012, 01:51:54 » |
|
из моего нубского опыта: на нормально настроеном серваке где вся статика кешируется через nginx, а также настроено минимизация и объединение скриптов - сайт грузится всеже быстрее, чем если выносить мотулзы и джикуери на CDN. Выносить на CDN имеет смысл если хостинг у вас..средней паршивости
|
|
|
|
|
Записан
|
|
|
|
|
|
Master255
Захожу иногда

Репутация: +0/-3
Offline
Сообщений: 16
|
 |
« Ответ #9 : 28.01.2012, 18:25:41 » |
|
Всё проще. В head.php нужно прописать:
if ($app->isAdmin()!=1) { $buffer .='<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"/></script> '; } // Generate script file links foreach ($document->_scripts as $strSrc => $strAttr) { if ((($strSrc != '/media/system/js/mootools-more.js') and ($strSrc != '/media/system/js/mootools-core.js') and ($strSrc != '/media/system/js/core.js')) or (($app->getCfg('debug') ==0) and ($app->isAdmin() == 1))) { $buffer .= $tab.'<script src="'.$strSrc.'"'; if (!is_null($strAttr['mime'])) { $buffer .= ' type="'.$strAttr['mime'].'"'; } if ($strAttr['defer']) { $buffer .= ' defer="defer"'; } if ($strAttr['async']) { $buffer .= ' async="async"'; } $buffer .= '></script>'.$lnEnd; } }
|
|
|
|
|
Записан
|
|
|
|
HiopsNerevar
Завсегдатай
   
Репутация: +63/-0
Offline
Пол: 
Сообщений: 601
Я удобный.
|
 |
« Ответ #10 : 17.02.2012, 15:48:25 » |
|
Случайно наткнулся на этом форуме на подобную тему где smart дал интересный код для шаблона. $user =& JFactory::getUser(); if ($user->get('guest') == 1) { $headerstuff = $this->getHeadData(); $key1 = JURI::base(true). '/media/system/js/mootools.js'; $key2 = JURI::base(true). '/media/system/js/caption.js'; $key3 = JURI::base(true). '/media/system/js/mootools-core.js'; $key4 = JURI::base(true). '/media/system/js/mootools-more.js'; unset($headerstuff['scripts'][$key1], $headerstuff['scripts'][$key2], $headerstuff['scripts'][$key3], $headerstuff['scripts'][$key4]); $this->setHeadData($headerstuff); } (я добавил в код core и more, можете изменять на свое усмотрение) Код убирает скрипты для гостей на сайте. Решение как мне кажется идеальное. На http://www.unshit.com/ru/ после установки скинул 25! кусков. было 35 стало 10. А после авторизации можно спокойно писать с фронта. Проблем с работой сторонних расширений пока не обнаружил. Просьба отписываться если такие будут.
|
|
|
|
|
Записан
|
|
|
|
|
al-teen
|
 |
« Ответ #11 : 17.02.2012, 16:00:14 » |
|
А если к примеру на сайте присутствуют модули работающие на му и видимые для гостей?
|
|
|
|
|
Записан
|
|
|
|
HiopsNerevar
Завсегдатай
   
Репутация: +63/-0
Offline
Пол: 
Сообщений: 601
Я удобный.
|
 |
« Ответ #12 : 17.02.2012, 16:04:01 » |
|
А если к примеру на сайте присутствуют модули работающие на му и видимые для гостей?
Мдя. Ну может ни настолько и идеальное. С другой стороны преимущества кода в том что его можно достаточно гибко переписывать. В любом случае мне кажется что как один из вариантов имеет место быть.
|
|
|
|
|
Записан
|
|
|
|
|
al-teen
|
 |
« Ответ #13 : 17.02.2012, 16:37:47 » |
|
Никто и не спорит. Способов оптимизации достаточно и выбирается обычно оптимальный для отдельно взятого проекта. Панацеи нет
|
|
|
|
|
Записан
|
|
|
|
|
flyingspook
|
 |
« Ответ #14 : 17.02.2012, 17:48:22 » |
|
каждая оптимизация индивидуальна, и ни как не зависит от того где скрипты на CDN или у себя много зависит от сервера/хоста где сайт расположен, и еще от многих факторов
|
|
|
|
|
Записан
|
|
|
|
Sulpher
Support Team
   
Репутация: +339/-10
Offline
Пол: 
Сообщений: 1489
Миграция на Joomla 2.5 / 3.0
|
 |
« Ответ #15 : 20.02.2012, 03:35:54 » |
|
Решение на уровне плагина JB Library plugin от клуба Joomlabamboo
|
|
|
|
|
Записан
|
|
|
|
Makc
Осваиваюсь на форуме
 
Репутация: +10/-0
Offline
Пол: 
Сообщений: 60
|
 |
« Ответ #16 : 20.02.2012, 17:48:15 » |
|
при отключении mootools не будет работать ReCAPTCHA
я когда делел добавлял проверку на страницу регистрации, чтоб там подрубать их
|
|
|
|
|
Записан
|
|
|
|
Langoliers
Завсегдатай
   
Репутация: +61/-2
Online
Пол: 
Сообщений: 731
Если б Я изучал людей, то был бы паразитологом
|
 |
« Ответ #17 : 11.03.2012, 19:39:54 » |
|
Честно говоря меня пугает размер плагина в пол метра о_О
|
|
|
|
|
Записан
|
|
|
|
|
pedrosoft
|
 |
« Ответ #18 : 02.04.2012, 22:37:44 » |
|
|
|
|
|
|
Записан
|
|
|
|
Yura Vakulenko
Осваиваюсь на форуме
 
Репутация: +6/-1
Offline
Пол: 
Сообщений: 152
|
 |
« Ответ #19 : 16.04.2012, 22:38:24 » |
|
Люди! Помогите. Нужно тоже отключить Мутелз и другие скрипты, но что-то не выходит. Вставляю туда, куда написали вы - а они не отключаются. Вот страница http://butique.hourb.com/ Проверяю пр и помощи http://tools.pingdom.com/fpt/#!/yPmbJR6uj/http://butique.hourb.com/$document = JFactory::getDocument(); unset($this->_scripts[$this->baseurl.'/media/system/js/mootools-core.js'], $this->_scripts[$this->baseurl.'/media/system/js/mootools-more.js'], $this->_scripts[$this->baseurl.'/media/system/js/core.js'], $this->_scripts[$this->baseurl.'/media/system/js/caption.js']); так же еще пробовал unset($this->_scripts[$this->URLbase().'/media/system/js/mootools-core.js'] и вот такое unset($this->_scripts[('http://butique.hourb.com/media/system/js/mootools-more.js')] Вставляю ваш код в самое начало index.php шаблона после <?php // No direct access. defined('_JEXEC') or die; - не выходит Вставляю ваш код в <head></head> перед <jdoc:include type="head" /> - не выходит Ничего не выходит! Нужна ваша помощь. Может вы посмотрите в чем причина. Я и читил кеш в админпанели и кеш браузера и в разных браузерах открывал. Шаблон от ГАВИКА. Жомла 2,5 Фреймворк Cavern HEAD of template <head> <?php if($this->getParam("chrome_frame_support", '0') == '1') : ?> <meta http-equiv="X-UA-Compatible" content="chrome=1"/> <?php endif; ?> <meta http-equiv="X-UA-Compatible" content="IE=9" /> <jdoc:include type="head" /> <?php $this->loadBlock('head'); ?> </head> Start of Tamplate <?php // No direct access. defined('_JEXEC') or die; if($this->getParam("cwidth_position", 'head') == 'head') { $this->generateColumnsWidth(); } $this->addCSSRule('.gkWrap { width: ' . $this->getParam('template_width','1240px'). '!important; }');
|
|
|
|
« Последнее редактирование: 16.04.2012, 22:50:39 от Yura Vakulenko »
|
Записан
|
|
|
|
|
Fedor Vlasenko
|
 |
« Ответ #20 : 16.04.2012, 22:54:25 » |
|
Я же написал в шапке как можно отключить все и надолго Но потом если компоненты будут нуждаться, то вручную прописывать придется. Причем не понятно зачем Вам их там отключать когда Вы ими пользуетесь. А вот в модулях некоторых посмотрите повторную загрузку одних и тех же скриптов. И какое отношение Ваше сообщение имеет к данной теме?
|
|
|
|
|
Записан
|
|
|
|
Yura Vakulenko
Осваиваюсь на форуме
 
Репутация: +6/-1
Offline
Пол: 
Сообщений: 152
|
 |
« Ответ #21 : 16.04.2012, 22:58:59 » |
|
Я же написал в шапке как можно отключить все и надолго Но потом если компоненты будут нуждаться, то вручную прописывать придется. Причем не понятно зачем Вам их там отключать когда Вы ими пользуетесь. А вот в модулях некоторых посмотрите повторную загрузку одних и тех же скриптов. И какое отношение Ваше сообщение имеет к данной теме?
отключать - потому что хочу использовать библиотеки Мутулза и Джейквери Google, а для этого нужно мои отключить!! А у меня не получается. вот, вы писали Загружаем Mootools предварительно отключив скрипт сайта. Вставляем нижеприведенный код в шаблон сайта (index.php) перед <head> Я этот код и перед ней вставлял и после и в начале страницы и в Блоке head.php - у меня все-равно ничего не вышло. Просто хочу попросить помощи у вас. Вот так сейчас у меня в шаблоне <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:og="http://ogp.me/ns#" xmlns:fb="http://www.facebook.com/2008/fbml" xml:lang="<?php echo $this->API->language; ?>" lang="<?php echo $this->API->language; ?>"> <?php defined('_JEXEC') or die; $document = JFactory::getDocument(); unset($this->_scripts[$this->baseurl.'/media/system/js/mootools-core.js'], $this->_scripts[$this->baseurl.'/media/system/js/mootools-more.js'], $this->_scripts[$this->baseurl.'/media/system/js/core.js'], $this->_scripts[$this->baseurl.'/media/system/js/caption.js']); ?> <head> <?php if($this->getParam("chrome_frame_support", '0') == '1') : ?> <meta http-equiv="X-UA-Compatible" content="chrome=1"/> <?php endif; ?> <meta http-equiv="X-UA-Compatible" content="IE=9" /> <jdoc:include type="head" /> <?php $this->loadBlock('head'); ?> </head> И все-равно не работает!
|
|
|
|
« Последнее редактирование: 16.04.2012, 23:06:42 от Yura Vakulenko »
|
Записан
|
|
|
|
|
flyingspook
|
 |
« Ответ #22 : 16.04.2012, 23:09:30 » |
|
как вариант по удаляй все в ручную а от googl подключи 
|
|
|
|
|
Записан
|
|
|
|
|
Fedor Vlasenko
|
 |
« Ответ #23 : 16.04.2012, 23:14:12 » |
|
перед </body> как вариант
|
|
|
|
|
Записан
|
|
|
|
Yura Vakulenko
Осваиваюсь на форуме
 
Репутация: +6/-1
Offline
Пол: 
Сообщений: 152
|
 |
« Ответ #24 : 16.04.2012, 23:17:16 » |
|
как вариант по удаляй все в ручную а от googl подключи  А вам смешно!! А мне нет! Я уже несколько часов сижу с этой, на первый взгляд, ерундой долбаюсь! Мои нервы уже не выдерживают! Не все же такие умные и профессиональные...
|
|
|
|
|
Записан
|
|
|
|
Yura Vakulenko
Осваиваюсь на форуме
 
Репутация: +6/-1
Offline
Пол: 
Сообщений: 152
|
 |
« Ответ #25 : 16.04.2012, 23:20:14 » |
|
перед </body> как вариант
Сейчас.. дело в том, что я пробовал поставить перед <!DOCTYPE - но так тоже не работает. у меня там такой код.. <?php // No direct access. defined('_JEXEC') or die; if($this->getParam("cwidth_position", 'head') == 'head') { $this->generateColumnsWidth(); } $this->addCSSRule('.gkWrap { width: ' . $this->getParam('template_width','1240px'). '!important; }');
$tpl_page_suffix = '';
-----------------------------------); // defines if register is active define('GK_REGISTER', ($this->modules('register')? $userID == 0 : false)); // defines if login is active define('GK_LOGIN', $this->modules('login')); // defines if com_users define('GK_COM_USERS', $option == 'com_users' && ($view == 'login' || $view == 'registration'));
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> Не выходит!
|
|
|
|
« Последнее редактирование: 16.04.2012, 23:32:15 от Yura Vakulenko »
|
Записан
|
|
|
|
|
Fedor Vlasenko
|
 |
« Ответ #26 : 16.04.2012, 23:26:41 » |
|
Да и чтобы не мучатся предложили варианты с использованием плагинов
|
|
|
|
|
Записан
|
|
|
|
Yura Vakulenko
Осваиваюсь на форуме
 
Репутация: +6/-1
Offline
Пол: 
Сообщений: 152
|
 |
« Ответ #27 : 16.04.2012, 23:37:22 » |
|
Да и чтобы не мучатся предложили варианты с использованием плагинов
Что это за варианты - есть какие-то другие варианты отключения яваскриптов и подключение своих версий?? Возможно не использую unset ?? Я уже не знаю, что делать! Ну просто с такой ерундой столько просидеть! Я и использовал еще $user = & JFactory::getUser(); if ($user->get('guest') == 1) { $headerstuff = $this->getHeadData(); $key1 = JURI::base(true). '/media/system/js/mootools.js'; $key2 = JURI::base(true). '/media/system/js/caption.js'; unset($headerstuff['scripts'][$key1], $headerstuff['scripts'][$key2]); $this->setHeadData($headerstuff); } Но этот вариант выдает ошибку на странице и ничего не грузится.. Fatal error: Call to undefined method GKTemplate::getHeadData() in /home/u295850766/public_html/templates/gk_game_magazine/layouts/default.php on line 46 сдесь еще какой-то вариант бы - но я его потерял.. И еще - как явно указать путь к скриптав в этой структуре unset($this->_scripts[$this->URLbase(). '/media/system/js/mootools-core.js'], Как нужно написать код unset($this->_scripts[('SCRIPT_PATH')] ?
|
|
|
|
« Последнее редактирование: 17.04.2012, 00:12:43 от Yura Vakulenko »
|
Записан
|
|
|
|
|
Fedor Vlasenko
|
 |
« Ответ #28 : 16.04.2012, 23:41:43 » |
|
<?php $this->_scripts = $this->_script = array(); ?> Нет скриптов :-)
|
|
|
|
« Последнее редактирование: 17.04.2012, 21:48:57 от Poznakomlus »
|
Записан
|
|
|
|
Yura Vakulenko
Осваиваюсь на форуме
 
Репутация: +6/-1
Offline
Пол: 
Сообщений: 152
|
 |
« Ответ #29 : 16.04.2012, 23:44:23 » |
|
И еще - как явно указать путь к скриптав в этой структуре Код:
unset($this->_scripts[$this->URLbase(). '/media/system/js/mootools-core.js'],
Как нужно написать код Код:
unset($this->_scripts[('SCRIPT_PATH')]
? Вот с этим подскажите и где его точно нужно вставлять!! Вот так я убрал загрузку системных скриптов.. <?php $document =& JFactory::getDocument(); $document->_scripts=array(); $document->_script=array(); ?> Как удалить из этих масивов только отдельные скрипты?? unset почему-то не работает.
|
|
|
|
« Последнее редактирование: 17.04.2012, 01:09:27 от Yura Vakulenko »
|
Записан
|
|
|
|
|