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

Войти
   
   Начало   Поиск Joomla 1.7 FAQ Joomla 1.5 FAQ Joomla 1.0 FAQ Правила форума Новости Joomla Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор Тема: Оптимизацич JS и переписывание <jdoc:include type="head" />  (Прочитано 5032 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Varyag0488
Осваиваюсь на форуме
***

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

Сообщений: 76


« : 15.02.2010, 12:59:15 »

Здравствуйте форумчане!

Тема сто раз обсуждалась понятное дело. Но хочу поделиться тем что уже есть и тем что хочу сделать. (первое полезно для новичков, второе и для меня) - как говорится - авось кому пригодится

Ситуация такая: есть сайт в инете, возникла проблема в долгой загрузке - думаю не у меня одного такая проблема  Smiley

Начал я оптимизировать. Несколько статистики: запрашивалось файлов 48, сейчас 26, загрузка сайта значительно ускорилась. Кто понимает в количестве загружаемых файлов, в важности этого - знает, а кто не знает сейчас объясню: браузеры одновременно моут загружать 2 файла (как правило) т.е. представьте что браузер будет грузить 48 файлов - сколько ему надо сделать зпросов - это очень долго, а для сайта это плохо.

Еще включил кеш в Joomla, установил: webo site speed up, включил gzip сжатие - всеравно недостаточно.

если Вы собираетесь оптимизировать то найдите хороший сайт в интеренете который проверит скорость загрузки вашего сайта, а также напишет статистику и что грузится - это важно, к тем более вы сможете проверить прогресс.

Итак дальше: под прессинг попал мой шаблон - т.к. мне не требовался вывод определнных позиций для модулей, то я удалил все эти позиции (параллельно с ними удалил ненужный CSS)

Следующий попал CSS: просмотр HTML-кода, который генерировала Joomla выявил пару лишних CSS файлов (которые рекомендуют подключать все инструкции по созданию шаблона) как вы догадались это system.css и general.css. ВЫ уже знаете что браузер качает два файла одновременно- а эти CSS тоже качает. Решение: объединить их с файлом вашего шаблона - минус 2 запроса.

во время объединения файлов вы увидите, что в файле general.css есть куча строк вида background: url(../images/j_button2_right.png) 100% 0 no-repeat;. Честно не знаю зачем они нужны, но все эти изображения, как я понял, подгружает броузер (так и показывал мой сайт проверки загрузки сайта) - Решение: удалить все эти строки + удалить все стили, в которых эта строка одна - так мы получим минус 10 запросов (или больше) + уменьшение CSS файла в размере. Здесь и мне интересно: кто скажет зачем они нужны эти картинки?

Следующая оптимизация CSS: убрать все пробелы в шаблоне (имею в виду в CSS файле), отступы - так Вы уменьшите вес файла + по максимуму сократить описание, например заменить вот такую штуку: /*--------------- system ----------------------------*/ на /* system */ или просто их поудалять если вы хорошо знаете свой шаблон. Например мне такая чистка помогла снизить шаблон на байт 500 (а может и больше). Кроме того, по мере приобретения опыта в CSS я перебрал CSS своего шаблона (он один без генерал и систем весил 8 кб). сократил его до ! 4 кб! подключил генерал и систем в него, весит файл сейчас 6,5 кб - я офигел  Grin

Таже процедура полезна для index.php шаблона (у меня этот файл после обработки весит 1,2 кб Grin)

Такс, ну про ручной труд я закончил, хотя нет - если Вы хотите (есть время) и если вы используете редактор TinyMCE -то просмотря HTML код вы обнаружите кучу лишнего HTML кода, который он создает - ужос! Sad Я создал свои стили оформления и руками все делаю в HTML - так сокращаю код, хотя не на много.

НУ свои наработки высказал, теперь перейдем к теме:

кто знает какой PHP код генерирует строка <jdoc:include type="head" />, как его можно уменьшить (убрать лишнее). кароче записать этот ПХП код в шаблон, но без лишнего

И второе: каким образом Joomla! прикрепляет JS к страницам, какие JS файлы, и как избавиться отлишних файлов? (У меня в кеше они весят в куче порядка 100 кб - ужас)


Заранее благодарю  Smiley
Записан
beliyadm
Профи
********

Репутация: +1438/-61
Offline Offline

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


Севастополь==Россия


« Ответ #1 : 15.02.2010, 13:11:45 »

Цитировать
кто знает какой PHP код генерирует строка <jdoc:include type="head" />, как его можно уменьшить (убрать лишнее). кароче записать этот ПХП код в шаблон, но без лишнего
libraries\joomla\document\html\renderer\head.php
Цитировать
И второе: каким образом Joomla! прикрепляет JS к страницам, какие JS файлы, и как избавиться отлишних файлов? (У меня в кеше они весят в куче порядка 100 кб - ужас) 
Обычно крепятся по умолчанию файлы mootools\caption и зачастую они совершенно не нужны http://joomlaforum.ru/index.php/topic,62089.0.html
Записан
Varyag0488
Осваиваюсь на форуме
***

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

Сообщений: 76


« Ответ #2 : 15.02.2010, 15:15:08 »

beliyadm, благодарю, поработал в head.php отключил мутулс и кэптион таким кодом:

      // Generate script file links
      foreach ($document->_scripts as $strSrc => $strType) {

         if (($strSrc == '/media/system/js/mootools.js') or ($strSrc == '/media/system/js/caption.js')){
            } else {
         $strHtml .= $tab.'<script type="'.$strType.'" src="'.$strSrc.'"></script>'.$lnEnd;
                  }
      }

beliyadm, не знаешь использует ли форум кунена эти скрипты?

И вопрос 2, как мне можно подключить этот файл (head.phph) непосредственно в мой index.php ?  

вот блин, даже не обратил внимание что админ панель использует мутулс и крепит через этот файл к себе, нужно как-то придумать чтобы только в админке цеплялось
« Последнее редактирование: 15.02.2010, 15:33:55 от Varyag0488 » Записан
beliyadm
Профи
********

Репутация: +1438/-61
Offline Offline

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


Севастополь==Россия


« Ответ #3 : 15.02.2010, 15:32:47 »

beliyadm, не знаешь использует ли форум кунена эти скрипты?
не знаю
По поводу отключения мутулза - я дал ссылку как убрать на уровне шаблона без вмешательства в ядро
И вопрос 2, как мне можно подключить этот файл (head.phph) непосредственно в мой index.php ? 
Этот файл и все прочие обрабатывается конструкцией  <jdoc:include type="head" />. В том числе подключение файлов в хедер\изменение титлов\ключевых слов\описания в стандартных и сторонних расширениях, потому из шаблона убирать эту строку нельзя
Записан
Varyag0488
Осваиваюсь на форуме
***

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

Сообщений: 76


« Ответ #4 : 15.02.2010, 15:35:39 »

beliyadm, все понял, значит копаем в другом направлении:)

попробовал вставить тот код по ссылке http://joomlaforum.ru/index.php/topic,62089.0.html, куда не лепил выдает ошибку 500, файл head.php восстановил не пойму что хочет
« Последнее редактирование: 15.02.2010, 15:47:21 от Varyag0488 » Записан
marvic
Захожу иногда
**

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

Сообщений: 10



« Ответ #5 : 15.02.2010, 16:10:11 »

Кстати убрать mootools.js и caption.js без редактирования файлов ядра можно добавив в шаблоне в файле index.php в конец следующий код:

      $headerstuff=$this->getHeadData();
      reset($headerstuff['scripts']);
      foreach($headerstuff['scripts'] as $key=>$value){
        unset($headerstuff['scripts'][$key]);
      }      
      $this->setHeadData($headerstuff);
Записан
SmokerMan
Профи
********

Репутация: +520/-20
Offline Offline

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



« Ответ #6 : 15.02.2010, 16:17:56 »

Кстати убрать mootools.js и caption.js без редактирования файлов ядра можно добавив в шаблоне в файле index.php в конец следующий код:

      $headerstuff=$this->getHeadData();
      reset($headerstuff['scripts']);
      foreach($headerstuff['scripts'] as $key=>$value){
        unset($headerstuff['scripts'][$key]);
      }      
      $this->setHeadData($headerstuff);
после таких манипуляций боюсь не только уберутся mootools.js и caption.js, а и все остальные JS, которые могут подключаться сторонними расширениями Azn
Записан
beliyadm
Профи
********

Репутация: +1438/-61
Offline Offline

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


Севастополь==Россия


« Ответ #7 : 15.02.2010, 16:26:23 »

Код
$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);
}
Записан
Varyag0488
Осваиваюсь на форуме
***

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

Сообщений: 76


« Ответ #8 : 15.02.2010, 16:45:15 »

Ура заработало! не знаю почему не работало!! beliyadm , благодарю!
Записан
magwar
Гость
« Ответ #9 : 19.05.2010, 10:07:52 »

во время объединения файлов вы увидите, что в файле general.css есть куча строк вида background: url(../images/j_button2_right.png) 100% 0 no-repeat;. Честно не знаю зачем они нужны, но все эти изображения, как я понял, подгружает броузер (так и показывал мой сайт проверки загрузки сайта) - Решение: удалить все эти строки + удалить все стили, в которых эта строка одна - так мы получим минус 10 запросов (или больше) + уменьшение CSS файла в размере. Здесь и мне интересно: кто скажет зачем они нужны эти картинки?

Это кнопки редактора статьи, если заходить на сайт под администратором или автором. Я так понял что для обычных пользователей они не нужны.
Записан
neket
Осваиваюсь на форуме
***

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

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



« Ответ #10 : 10.06.2010, 09:12:12 »

А каким образом в файле /libraries/joomla/document/html/renderer/header.php вставить свой JS-файл в этот код ?
Код:
// Generate script file links
foreach ($document->_scripts as $strSrc => $strType) {
$strHtml .= $tab.'<script type="'.$strType.'" src="'.$strSrc.'"></script>'.$lnEnd;

}
Записан
MuraDweb
Support Team
*****

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

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



« Ответ #11 : 10.06.2010, 10:51:05 »

neket, не надо трогать файл ядра.
Подключить можно через index.php шаблона, к примеру если скрипт расположен в папке js шаблона, то:
Код
<?php $doc =&JFactory::getDocument();
        $doc->addScript($this->baseurl.'/templates/'.$this->template.'/js/moiscript.js');
?>
Записан
SmokerMan
Профи
********

Репутация: +520/-20
Offline Offline

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



« Ответ #12 : 10.06.2010, 13:11:18 »

или так
Код
<?php JHTML::_('script', 'moiscript.js', $this->baseurl.'/templates/'.$this->template.'/js/', false  ); ?>
Записан
Doc
Давно я тут
****

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

Сообщений: 345


« Ответ #13 : 15.03.2011, 11:03:35 »

Цитировать
во время объединения файлов вы увидите, что в файле general.css есть куча строк вида background: url(../images/j_button2_right.png) 100% 0 no-repeat;. Честно не знаю зачем они нужны, но все эти изображения, как я понял, подгружает броузер (так и показывал мой сайт проверки загрузки сайта) - Решение:  удалить все эти строки + удалить все стили, в которых эта строка одна - так мы получим минус 10 запросов (или больше) + уменьшение CSS файла в размере. Здесь и мне интересно: кто скажет зачем они нужны эти картинки?
А можно поточней, что и где удалить нужно ?
А то у меня требовало j_button2_right.png, которого нет в папке, а я туда его добавил
У меня выдает 29 запросов, думаю может как уменьшить, раз вы пишите что на 10 меньше стало
Записан
roga_i_kopita
Осваиваюсь на форуме
***

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

Сообщений: 52


« Ответ #14 : 04.11.2011, 23:52:48 »

Давно мучаюсь с этой задачей. Мне не нравится стандартное расположение тегов и ссылок в head.
Удалось переписать весь head под себя в шаблоне. При этом убрал из шаблона строку <jdoc:include type="head" />.
Но, при подключении сторонних модулей, как и ожидал, появились "нюансы".  Grin

Покажу на примере подключения файлов скриптов. Для этого использую в head следующую конструкцию (взял и немного переделал под себя из файла libraries\joomla\document\html\renderer\head.php):
Код:
$static_domain = preg_replace('/\/$/','',str_replace('www','static',JURI::base())); // тут для статичного контента меняю адрес на другой домен
foreach ($this->_scripts as $strSrc => $strAttr) {
$mime = (!is_null($strAttr['mime']))? ' type="'.$strAttr['mime'].'"' : '';
$defer = ($strAttr['defer'])? ' defer="defer"' : '';
$async = ($strAttr['async'])? ' async="async"' : '';
echo '<script src="'.$static_domain.$strSrc.'"'.$mime.$defer.$async.'></script>'."\n";
}

В итоге нормально подключаются стандартные скрипты Joomla. В исходном коде страницы в нужном месте появляются ссылки:
Код:
<script src="http://static.mydomain.com/media/system/js/core.js" type="text/javascript"></script>
<script src="http://static.mydomain.com/media/system/js/mootools-core.js" type="text/javascript"></script>
<script src="http://static.mydomain.com/media/system/js/caption.js" type="text/javascript"></script>

Аналогичным образом работают links. При включении в админке "отображать ссылки на rss-ленту" в исходном коде в head появляются соответствующие ссылки *.feed...
Для ссылок использую в файле шаблона конструкцию (тоже слегка модифицированную из файла libraries\joomla\document\html\renderer\head.php):
Код:
foreach ($this->_links as $link => $linkAtrr) {
$attribs = ($linkAtrr['attribs'])? ' '.JArrayHelper::toString($linkAtrr['attribs']) : '';
echo '<link href="'.$link.'" '.$linkAtrr['relType'].'="'.$linkAtrr['relation'].'"'.$attribs.' />'."\n";
}

В исходном коде страницы появляются ожидаемые ссылки:
Код:
<link href="/power/heat-guns/gas-heat-guns-direct-heating.feed?type=rss" rel="alternate" type="application/rss+xml" title="RSS 2.0" />
<link href="/power/heat-guns/gas-heat-guns-direct-heating.feed?type=atom" rel="alternate" type="application/atom+xml" title="Atom 1.0" />

Я был безмерно счастлив. В принципе, всё работает. Ссылки, когда надо подключаются, когда надо - отключаются.
Но потребовалось установить модуль RokTabs. И вот тут столкнулся с неприятностью.

Сам модуль подключает свои файлы в head следующим образом:
Код:
$document =& JFactory::getDocument();
$path = JPATH_SITE . '/modules/mod_roktabs/tmpl/';
$uri_path = JURI::Root(true).'/modules/mod_roktabs/tmpl/';
$style_css = $path . $style . '/roktabs.css';
$css = $uri_path . $style . '/roktabs.css';

if (file_exists($style_css)) $document->addStyleSheet($css);
if (!defined('ROKTABS_JS')) {
$document->addScript($uri_path . 'roktabs'.modRokTabsHelper::_getJSVersion().'.js');
define('ROKTABS_JS',1);

Соответственно, я ожидаю, что новые файлы от стороннего модуля будут помещены в массив данных head, вместе со стандартными файлами mootools. И оттуда (из массива) я их выберу и включу в файле шаблона. Но там их нет!
Проверил, поместив следующий код в файл index.php шаблона:
Код:
<?php $head = $this->getHeadData();
$output = print_r ($head, true);
echo $output; ?></p>

В результате при обновлении страницы с опубликованным модулем RokTabs получил содержимое всего массива head в следующем виде:
Код:
Array (
[title] => Главная
[description] => Тут выводится описание (description)
[link] =>
[metaTags] => Array (
[http-equiv] => Array (
[content-type] => text/html
)
[standard] => Array (
[robots] => index, follow
[keywords] => Тут отображаются мои ключевые слова
[rights] =>
)
)
[links] => Array ( )
[styleSheets] => Array ( )
[style] => Array ( )
[scripts] => Array (
[/media/system/js/core.js] => Array (
[mime] => text/javascript
[defer] =>
[async] =>
)
[/media/system/js/mootools-core.js] => Array (
[mime] => text/javascript
[defer] =>
[async] =>
)
[/media/system/js/caption.js] => Array (
[mime] => text/javascript
[defer] =>
[async] =>
)
)
[script] => Array ( )
[custom] => Array ( )
)

Я привёл вывод содержимого массива head при отображении главной страницы сайта, с включенным модулем RokTabs (модуль опубликован на главной странице и на всех остальных).
Я констатирую, что в исходном коде страницы при использовании в head стандарной строки <jdoc:include type="head" /> скрипты и стили от модуля RokTabs присутствуют вместе со скриптами mootools.js.
Также из вывода массива видно, что скрипты в массиве head присутствуют. НО ТОЛЬКО СТАНДАРТНЫЕ (mootools и т.п.). Сторонних скриптов (от модуля RokTabs) там нет! Они есть в исходном коде страницы, но их нет в массиве head! Вопрос: почему? Куда тогда помещаются скрипты и файлы стилей сторонних модулей, если не в массив head? Как в таком случае их перехватить и включить в head в файле шаблона? К переменной $buffer обращаться чтоли? Или как?

Читал по этому поводу документацию по ссылке: _http://docs.joomla.org/JDocument/addScript
Там, в частности, сказано:
Цитировать
To add a link to some JavaScript code at a specific URL, you could use:

$doc =& JFactory::getDocument();
$doc->addScript("http://www.example.com/js/myscript.js");

How this is rendered depends on the document type. If the document type is HTML then this code will produce following link in the HTML HEAD section:
<script type="text/javascript" src="http://www.example.com/js/myscript.js"></script>

Как там написано, так скрипты от модуля RokTabs и подключаются. Но почему в массиве-то их нет, а на HTML странице они есть? Откуда они берутся?
Если эту проблему решить, то head можно будет генерировать в файле шаблона самостоятельно, и размещать теги в нужной последовательности.
Кстати, скрипты я вообще подключаю в самом конце страницы, перед закрывающим тэгом </body>.
« Последнее редактирование: 04.11.2011, 23:57:00 от roga_i_kopita » Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Рейтинг@Mail.ru Rambler Top100 Powered by SMF 1.1.16 | 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