Форум русской поддержки Joomla!® CMS
26.05.2017, 19:17:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: 1 [2] 3 4 5 6   Вниз
  Добавить закладку  |  Печать  
Автор

[FAQ] Ускоряем загрузку сайта (скриптов MooTools, jQuery)

 (Прочитано 72780 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Fedor Vlasenko
Профи
********

Репутация: +702/-5
Offline Offline

Пол: Мужской
Сообщений: 3830


Все начинается с Value


« : 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
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']);
$this->addScript('https://ajax.googleapis.com/ajax/libs/mootools/1.4.2/mootools-yui-compressed.js');
?>
1.4.2 в примере номер версии //Joomla 2.5
Так можно удалить подгрузку скриптов joomla
Показать текстовый блок
Загружаем 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
« Последнее редактирование: 21.12.2013, 05:26:24 от Fedor Vlasenko » Записан
 
vaymohk
Давно я тут
****

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 265


Ingtimes.ru | Новости Ингушетии


« Ответ #31 : 17.06.2012, 06:41:51 »

Случайно наткнулся на этом форуме на подобную тему где 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
Support Team
*****

Репутация: +221/-10
Offline Offline

Пол: Мужской
Сообщений: 2461


im


« Ответ #32 : 17.06.2012, 15:30:31 »

в index.php шаблона
Записан
vaymohk
Давно я тут
****

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 265


Ingtimes.ru | Новости Ингушетии


« Ответ #33 : 20.06.2012, 06:17:49 »

А куда этот куда шаблон вставлять объясните кто нибудь пожалуйста
Тоесть вместо выше описанных мне нужно вставить все скрипты которые находятся в шаблоне?
Записан
Rival
Осваиваюсь на форуме
***

Репутация: +16/-0
Offline Offline

Пол: Мужской
Сообщений: 189



« Ответ #34 : 20.06.2012, 19:14:54 »

Протестировал скорость загрузки, показало 40  из 100 видимо нужно оптимизировать.

Отключил 4  неиспользуемых системных скрипта, оставил только 1 для всплывающих картинок, но по тесту от Google так и осталась скорость 40.


« Последнее редактирование: 20.06.2012, 23:47:07 от Rival » Записан
ViktorMah
Давно я тут
****

Репутация: +27/-0
Offline Offline

Сообщений: 252


« Ответ #35 : 24.06.2012, 21:18:00 »

Протестировал скорость загрузки, показало 40  из 100 видимо нужно оптимизировать.

Отключил 4  неиспользуемых системных скрипта, оставил только 1 для всплывающих картинок, но по тесту от Google так и осталась скорость 40.

Тут ещё сильно влияет:
1 - количество загружаемых CSS + их вес, то есть сжаты они или нет.
2 - количество и качество/степень сжатия картинок
Записан
vaymohk
Давно я тут
****

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 265


Ingtimes.ru | Новости Ингушетии


« Ответ #36 : 15.07.2012, 20:55:21 »

Я делал так http://www.cyber-club.su/servisy/blogi06/entry/joomla-optimizatsiya! Было 170 кусков говна на сайте осталось 40 (http://unshit.com/ru/) и сайт после оптимизации не глючил))
Записан
likrion
Завсегдатай
*****

Репутация: +128/-2
Offline Offline

Пол: Мужской
Сообщений: 756



« Ответ #37 : 15.07.2012, 21:32:42 »

http://extensions.joomla.org/extensions/core-enhancements/performance/site-performance/12088

168 кусков говна сократил до 6
Записан
vaymohk
Давно я тут
****

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 265


Ingtimes.ru | Новости Ингушетии


« Ответ #38 : 16.07.2012, 00:03:07 »

Я подсказал или Вы знали о плагине?)
Записан
Dron79
Давно я тут
****

Репутация: +37/-0
Offline Offline

Пол: Мужской
Сообщений: 321

Век живи - век учись!


« Ответ #39 : 18.08.2012, 14:38:10 »

Вот вариант удаления скриптов не только из шаблона но и из любого компонента, модуля и плагина:
Код
$document = JFactory::getDocument();
 
unset($document->_scripts['/media/system/js/mootools-core.js'],
$document->_scripts['/media/system/js/mootools-more.js'],
$document->_scripts['/media/system/js/core.js'],
      $document->_scripts['/media/system/js/caption.js']);
$document->_script = array();

Естественно удалять нужно только то, что не нужно для работы страницы с данным компонентом модулем и функцией,
или оставить только то что нужно для полноценной работы страницы с данным расширением.
Записан
Langoliers
Завсегдатай
*****

Репутация: +67/-2
Offline Offline

Пол: Мужской
Сообщений: 695


Если б Я изучал людей, то был бы паразитологом


« Ответ #40 : 28.08.2012, 17:31:12 »

Надеюсь меня не закидают камнями, если Я скажу, что это несколько неправильный вариант исключения скриптов из сайта... К тому же если использовать фреймворк он и вовсе не будет работать...
Изначально файлы подключаются в файле /libraries/joomla/html/html/behavior.php
Там есть строки на подобии
Код:
JHtml::_('script', 'system/core.js', false, true);
Чтобы отключить загрузку тех, или иных скриптов нужно true заменить на false (если значений true два, из оба нужно изменить на false)
Чтобы полностью отключить mootools код должен выглядеть так:
Код:
JHtml::_('script', 'system/mootools-' . $type . '.js', false, false, false, false, $debug);
JHtml::_('script', 'system/core.js', false, false);
self::$loaded[__METHOD__][$type] = true;

Единственный у меня вопрос: как разрешить загрузку тех, или иных скриптов только для авторизованных пользователей?
« Последнее редактирование: 28.08.2012, 17:56:11 от Langoliers » Записан
wfedin
Живу я здесь
******

Репутация: +102/-0
Offline Offline

Пол: Мужской
Сообщений: 1295



« Ответ #41 : 28.08.2012, 18:34:28 »

наверное
Код:
$user =& JFactory::getUser();
if ($user->get('guest') == 1) {
JHtml::_('script', 'system/core.js', false, true);
...
} else {
JHtml::_('script', 'system/mootools-' . $type . '.js', false, false, false, false, $debug);
JHtml::_('script', 'system/core.js', false, false);
self::$loaded[__METHOD__][$type] = true;
}
Записан
Langoliers
Завсегдатай
*****

Репутация: +67/-2
Offline Offline

Пол: Мужской
Сообщений: 695


Если б Я изучал людей, то был бы паразитологом


« Ответ #42 : 28.08.2012, 20:15:20 »

wfedin, спасибо! Работает. Итак вот что получилось у меня:
Код:
$user =& JFactory::getUser();
if ($user->get('guest') == 1) {
JHtml::_('script', 'system/mootools-core.js', false, true, false, false, $debug);
JHtml::_('script', 'system/core.js', false, false);
JHtml::_('script', 'system/mootools-more.js', false, false, false, false, $debug);
self::$loaded[__METHOD__][$type] = true;
}else {
JHtml::_('script', 'system/mootools-' . $type . '.js', false, true, false, false, $debug);
JHtml::_('script', 'system/core.js', false, true);
self::$loaded[__METHOD__][$type] = true;}
И
Код:
$user =& JFactory::getUser();
if ($user->get('guest') == 1) {
JHtml::_('script', 'system/caption.js', false, false);
} else {
JHtml::_('script', 'system/caption.js', true, true);
}
Такой код запрещает вызов core.js mootools-more.js и caption.js если пользователь не авторизован на сайте. Если авторизован - они загружаются для него... Однако кое какой функционал конечно порежется...
Похоже придется вернуть загрузку mootools-more.js для гостей, чего не хочется... 200 килобайт однако... У меня все остальные скрипты на сайте весят 175 (включая другие мт)

P.S. пошел курить мануалы, какой js за что отвечает...
« Последнее редактирование: 28.08.2012, 20:20:39 от Langoliers » Записан
wfedin
Живу я здесь
******

Репутация: +102/-0
Offline Offline

Пол: Мужской
Сообщений: 1295



« Ответ #43 : 28.08.2012, 20:21:03 »

у меня после отключения caption.js ошибки сыпались и где-то нарыл я:
Код:
    // Вычищаеи остатки кода инициализации caption.js:
        if( isset($this->_script['text/javascript']) ) {
            $this->_script['text/javascript'] = preg_replace('%window\.addEvent\(\'load\',\s*function\(\)\s*{\s*new\s*JCaption\(\'img.caption\'\);\s*}\);\s*%', '', $this->_script['text/javascript']);
            if( empty($this->_script['text/javascript']) )
            unset( $this->_script['text/javascript'] ); }
Записан
Langoliers
Завсегдатай
*****

Репутация: +67/-2
Offline Offline

Пол: Мужской
Сообщений: 695


Если б Я изучал людей, то был бы паразитологом


« Ответ #44 : 28.08.2012, 20:53:03 »

у меня после отключения caption.js ошибки сыпались и где-то нарыл я
Вот полезная инфа
http://forum.joomla.org/viewtopic.php?t=691239
http://www.acuit.com.au/Blogs/removing-jcaption-in-joomla2.5.html
А Вы куда код разместили?

P.S. так и не нашел какие js за что отвечают =\
Записан
wfedin
Живу я здесь
******

Репутация: +102/-0
Offline Offline

Пол: Мужской
Сообщений: 1295



« Ответ #45 : 28.08.2012, 20:57:25 »

сразу после отключения
Код:
$user =& JFactory::getUser();
if ($user->get('guest') == 1) {
JHtml::_('script', 'system/mootools-core.js', false, true, false, false, $debug);
JHtml::_('script', 'system/core.js', false, false);
JHtml::_('script', 'system/mootools-more.js', false, false, false, false, $debug);
self::$loaded[__METHOD__][$type] = true;
СЮДА КОД ОЧИСТКИ СТАВИМ
}
Записан
Langoliers
Завсегдатай
*****

Репутация: +67/-2
Offline Offline

Пол: Мужской
Сообщений: 695


Если б Я изучал людей, то был бы паразитологом


« Ответ #46 : 28.08.2012, 21:26:31 »

сразу после отключения
Код:
$user =& JFactory::getUser();
if ($user->get('guest') == 1) {
JHtml::_('script', 'system/mootools-core.js', false, true, false, false, $debug);
JHtml::_('script', 'system/core.js', false, false);
JHtml::_('script', 'system/mootools-more.js', false, false, false, false, $debug);
self::$loaded[__METHOD__][$type] = true;
СЮДА КОД ОЧИСТКИ СТАВИМ
}
Только наверное после обработки caption.js?
Записан
Shustry
Группа развития
*****

Репутация: +729/-3
Offline Offline

Пол: Мужской
Сообщений: 6673


Рисую дизайны


« Ответ #47 : 28.08.2012, 21:36:31 »

у меня после отключения caption.js ошибки сыпались и где-то нарыл я:
Код:
    // Вычищаеи остатки кода инициализации caption.js:
        if( isset($this->_script['text/javascript']) ) {
            $this->_script['text/javascript'] = preg_replace('%window\.addEvent\(\'load\',\s*function\(\)\s*{\s*new\s*JCaption\(\'img.caption\'\);\s*}\);\s*%', '', $this->_script['text/javascript']);
            if( empty($this->_script['text/javascript']) )
            unset( $this->_script['text/javascript'] ); }
Я вот так юзаю. Немного короче, но регулярка та же.
Код
$this->_script = preg_replace('%window\.addEvent\(\'load\',\s*function\(\)\s*{\s*new\s*JCaption\(\'img.caption\'\);\s*}\);\s*%', '', $this->_script);
Записан
Langoliers
Завсегдатай
*****

Репутация: +67/-2
Offline Offline

Пол: Мужской
Сообщений: 695


Если б Я изучал людей, то был бы паразитологом


« Ответ #48 : 29.08.2012, 15:51:48 »

у меня после отключения caption.js ошибки сыпались и где-то нарыл я:
Код:
    // Вычищаеи остатки кода инициализации caption.js:
        if( isset($this->_script['text/javascript']) ) {
            $this->_script['text/javascript'] = preg_replace('%window\.addEvent\(\'load\',\s*function\(\)\s*{\s*new\s*JCaption\(\'img.caption\'\);\s*}\);\s*%', '', $this->_script['text/javascript']);
            if( empty($this->_script['text/javascript']) )
            unset( $this->_script['text/javascript'] ); }
Хм... получил такую ошибку:
Цитировать
Fatal error: Using $this when not in object context in /libraries/joomla/html/html/behavior.php on line 34
На 34 строке как раз начинает код очистки... Код Shustry тоже пробовал...
Вставлял и после mootools- файлов и core.js и после caption.js и отдельно и вместе
Записан
Shustry
Группа развития
*****

Репутация: +729/-3
Offline Offline

Пол: Мужской
Сообщений: 6673


Рисую дизайны


« Ответ #49 : 29.08.2012, 16:46:06 »

Вот начало шаблона, каким я его использую вот уже год на различных проектах и, практически, без изменений. Ни разу ни одной ошибки естессно.
Код
<?php defined('_JEXEC') or die;
if (JRequest::getVar('ajcom')) {?>

<jdoc:include type="component" />
<?php } else {
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'],
$this->_scripts[$this->baseurl.'/media/system/js/validate.js']
);
$this->_script = preg_replace('%window\.addEvent\(\'load\',\s*function\(\)\s*{\s*new\s*JCaption\(\'img.caption\'\);\s*}\);\s*%', '', $this->_script);
$templ = $this->baseurl."/templates/".$this->template;
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $this->language; ?>" lang="<?php echo $this->language; ?>" dir="<?php echo $this->direction; ?>" >
<head>
<jdoc:include type="head" />
...
Ты из шаблонов компонентов не забыл выпилить всякие...
Код
JHtml::_('behavior.tooltip');
JHtml::core();
... и тому подобное?
Записан
Efanych
Группа развития
*****

Репутация: +605/-0
Offline Offline

Пол: Мужской
Сообщений: 4373



« Ответ #50 : 29.08.2012, 17:29:59 »

Цитировать
Вот начало шаблона, каким я его использую вот уже год на различных проектах и, практически, без изменений. Ни разу ни одной ошибки естессно.
А пустого скрипта в head нет?
Записан
Langoliers
Завсегдатай
*****

Репутация: +67/-2
Offline Offline

Пол: Мужской
Сообщений: 695


Если б Я изучал людей, то был бы паразитологом


« Ответ #51 : 29.08.2012, 18:37:36 »

Ты из шаблонов компонентов не забыл выпилить всякие...
Забыл Grin
Записан
Shustry
Группа развития
*****

Репутация: +729/-3
Offline Offline

Пол: Мужской
Сообщений: 6673


Рисую дизайны


« Ответ #52 : 29.08.2012, 18:58:44 »

Efanych, нет. Вообще, плагин JB Library от Joomla Bamboo всё это умеет, если не хочецо заморачиваться с шаблоном.
Записан
Efanych
Группа развития
*****

Репутация: +605/-0
Offline Offline

Пол: Мужской
Сообщений: 4373



« Ответ #53 : 29.08.2012, 19:03:46 »

Efanych, нет.
А у меня есть. Остаётся от
Цитировать
<script type="text/javascript">
window.addEvent('load', function() {
            new JCaption('img.caption');
         });
  </script>
Записан
Shustry
Группа развития
*****

Репутация: +729/-3
Offline Offline

Пол: Мужской
Сообщений: 6673


Рисую дизайны


« Ответ #54 : 29.08.2012, 19:10:44 »

А у меня есть. Остаётся от
Внизапно! А ведь и у меня остаёцо О_о. А я и не замечал. Надо регулярку переписывать.
Код:
<script type="text/javascript">
</script>
Вот. Пустая строка остаётся.
Записан
Fedor Vlasenko
Профи
********

Репутация: +702/-5
Offline Offline

Пол: Мужской
Сообщений: 3830


Все начинается с Value


« Ответ #55 : 01.09.2012, 00:50:11 »

Решил отказаться от <jdoc:include type="head" />
Маленькая строчка а проблем с скриптами и тегами по горло. Smiley
Показать текстовый блок
Скрипты вывожу внизу сайта. Переписываю некоторые под себя
Показать текстовый блок
« Последнее редактирование: 01.09.2012, 02:03:38 от Poznakomlus » Записан
Langoliers
Завсегдатай
*****

Репутация: +67/-2
Offline Offline

Пол: Мужской
Сообщений: 695


Если б Я изучал людей, то был бы паразитологом


« Ответ #56 : 01.09.2012, 10:56:22 »

И на сколько скорость загрузки возрасла?
Записан
Fedor Vlasenko
Профи
********

Репутация: +702/-5
Offline Offline

Пол: Мужской
Сообщений: 3830


Все начинается с Value


« Ответ #57 : 01.09.2012, 11:05:55 »

И на сколько скорость загрузки возрасла?
Что вы имеет ввиду. Выше был приведен корректный вывод заголовков Html5
В Joomla такого не предусмотрено по умолчанию. Далее предложен вариант ручного управления скриптами где в процессе обработки циклов foreach возможно вставить свой обработчик этих файлов для минимизации. объединения и кеширования.
Записан
al-teen
Support Team
*****

Репутация: +221/-10
Offline Offline

Пол: Мужской
Сообщений: 2461


im


« Ответ #58 : 01.09.2012, 15:11:36 »

Внизапно! А ведь и у меня остаёцо О_о. А я и не замечал. Надо регулярку переписывать.
Код:
<script type="text/javascript">
</script>
Вот. Пустая строка остаётся.
Я ж приводил код с регуляркой, чтою его не оставалось. В теме промала. Даже не посмотрели, как оказывается.
Записан
Efanych
Группа развития
*****

Репутация: +605/-0
Offline Offline

Пол: Мужской
Сообщений: 4373



« Ответ #59 : 01.09.2012, 15:27:17 »

И в этой теме есть.
Цитировать
if( empty($this->_script['text/javascript']) )
            unset( $this->_script['text/javascript'] );
Записан
vaymohk
Давно я тут
****

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 265


Ingtimes.ru | Новости Ингушетии


« Ответ #60 : 01.09.2012, 15:34:07 »

Может кто оценить насколько оптимизирован вот этот сайт 1.cyber-club.su! Шаблон очень легкий сам делал
Записан
Страниц: 1 [2] 3 4 5 6   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet