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

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

Асинхронная загрузка скрипта

 (Прочитано 4134 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Sven
Осваиваюсь на форуме
***

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

Сообщений: 119


« : 07.06.2013, 19:48:18 »

Возможно ли этому скрипту сделать асинхронную загрузку? /components/com_jcomments/js/jcomments-v2.3.js?v=8';

Пробовал в файле jcomments.php
Вот эту строку: $document->addScript(JCommentsSystemPluginHelper::getCoreJS());
Писать так:       $document->addScript(JCommentsSystemPluginHelper::getCoreJS(), "text/javascript", false, true);
В итоге у скрипта появляется атрибут async, но Jcomments перестает работать тогда.

Может быть нужно прописать async в файле helpers/system.php ? Тогда как это сделать напишите пожалуйста, а то для меня это темный лес.

Если async прописать нигде невозможно без потери работоспособности Jcomments, то можно ли этот скрипт подгружать не в Head, а внизу перед закрытием </Body> ? Что для этого нужно сделать?

P.S. С отключенным Jcomments страница за 1 сек загружается, а с включенным за 1,3 сек. Подозреваю что дело в скрипте, он в самом верху Head грузится. А так компонент супер, хорошо продуманный в плане пользования, разработчикам огромное спасибо.
Записан
Fedor Vlasenko
Профи
********

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

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


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


« Ответ #1 : 07.06.2013, 20:05:18 »

 $document->addScript(JCommentsSystemPluginHelper::getCoreJS(), "text/javascript", true);
defer сохраняет порядок выполнения скриптов, а async — нет.
Записан
Sven
Осваиваюсь на форуме
***

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

Сообщений: 119


« Ответ #2 : 07.06.2013, 20:24:27 »

Такая запись тоже не работает к сожалению. Если жму "Отправить", то в адресной строке добавляется #addcomments. И все, а отправить не получается. Форма перестает работать, если скрипту вот таким способом defer или async прописать.

Мне кажется надо в файле helpers/system.php async прописывать. Там вот такая строка есть:

public static function getCoreJS()
   {
      return JCommentsSystemPluginHelper::getBaseUrl(). '/components/com_jcomments/js/jcomments-v2.3.js?v=8';
   }

Может тут надо добавить чего?
Записан
smart
Администратор
*******

Репутация: +1308/-14
Offline Offline

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


снова дома...


« Ответ #3 : 07.06.2013, 20:26:08 »

Скажем так, в текущей реализации async не прокатит, но я работаю над новой версией, там с этим делом надеюсь будет порядок. Но пока процесс в самом разгаре, даже какие-то примерные сроки боюсь называть. Административная панель уже на 60% переписана под 2.5/3.0 без каких-либо костылей и режимов совместимости. Планирую на выходных закончить. Что же касается frontend-части, там с одной стороны чуть проще, с другой стороны есть куча интересных идей. Посмотрим, как пойдет процесс. Если успешно - сразу реализую, нет - сначала выпущу версию для 3.0, затем займусь переписыванием всего JavaScript компонента.
Записан
bahinn
Осваиваюсь на форуме
***

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

Сообщений: 57


« Ответ #4 : 13.01.2014, 02:17:28 »

Возможно ли этому скрипту сделать асинхронную загрузку? /components/com_jcomments/js/jcomments-v2.3.js?v=8';

Пробовал в файле jcomments.php
Вот эту строку: $document->addScript(JCommentsSystemPluginHelper::getCoreJS());
Писать так:       $document->addScript(JCommentsSystemPluginHelper::getCoreJS(), "text/javascript", false, true);
В итоге у скрипта появляется атрибут async, но Jcomments перестает работать тогда.

Может быть нужно прописать async в файле helpers/system.php ? Тогда как это сделать напишите пожалуйста, а то для меня это темный лес.

Если async прописать нигде невозможно без потери работоспособности Jcomments, то можно ли этот скрипт подгружать не в Head, а внизу перед закрытием </Body> ? Что для этого нужно сделать?

P.S. С отключенным Jcomments страница за 1 сек загружается, а с включенным за 1,3 сек. Подозреваю что дело в скрипте, он в самом верху Head грузится. А так компонент супер, хорошо продуманный в плане пользования, разработчикам огромное спасибо.
В файле /libraries/joomla/document/document.php в строке 461
Код:
public function addScript($url, $type = "text/javascript", $defer = false, $async = false)
меняем на
Код:
public function addScript($url, $type = "text/javascript", $defer = false, $async = true)
на все JS пропишется async="async" не ставьте дефер, для jcomments в файле jcomments.php
Код:
if (!defined('JCOMMENTS_JS')) {
include_once(JCOMMENTS_HELPERS . '/system.php');
$document->addScript(JCommentsSystemPluginHelper::getCoreJS());
define('JCOMMENTS_JS', 1);

if (!defined('JOOMLATUNE_AJAX_JS')) {
$document->addScript(JCommentsSystemPluginHelper::getAjaxJS());
define('JOOMLATUNE_AJAX_JS', 1);
меняете на
Код:
if (!defined('JCOMMENTS_JS')) {
include_once(JCOMMENTS_HELPERS . '/system.php');
$document->addScript(JCommentsSystemPluginHelper::getCoreJS(), "text/javascript", false, false);
define('JCOMMENTS_JS', 1);

if (!defined('JOOMLATUNE_AJAX_JS')) {
$document->addScript(JCommentsSystemPluginHelper::getAjaxJS(), "text/javascript", false, false);
define('JOOMLATUNE_AJAX_JS', 1);
Записан
airtpcv11
Новичок
*

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

Сообщений: 1


« Ответ #5 : 19.05.2015, 19:37:44 »

добрый день, есть ли возможность сделать асинхронную загрузку jcomments js ?
а то мы тут воюем с Google хотелками и уперлись в jcomments, пока что не смогли нормально сделать async.
может кто то может что то подсказать?
Спасибо

Joomla 3.4.1 + JComments 3.0.5
Записан
Roinmana
Осваиваюсь на форуме
***

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

Сообщений: 77


« Ответ #6 : 03.03.2016, 21:56:03 »

Изменилось ли что нибудь с возможностью асинхронной загрузки скриптов jcomments? Если делаю как описал выше
Bahinn, то на денвере компонент работает, а на реальном сайте ошибки и ничего. Есть ли решение?
Записан
leo78
Живу я здесь
******

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

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


I left from paradise!?...


« Ответ #7 : 16.09.2016, 17:54:10 »

Цитировать
В файле /libraries/joomla/document/document.php в строке 461

Код:
public function addScript($url, $type = "text/javascript", $defer = false, $async = false)
меняем на

Код:
public function addScript($url, $type = "text/javascript", $defer = false, $async = true)
хорошая способ, но лучше не делать так, только менять там, где действительно нужно, иначе будет неработать

сомневаюсь что этот способ рабочий
Код:
$document->addScript(JCommentsSystemPluginHelper::getAjaxJS(), "text/javascript", false, false);
это должно выглядеть так:
Код:
$document->addScript(JCommentsSystemPluginHelper::getAjaxJS(), $type = "text/javascript", $defer = false, $async = false);
читаем мануал
https://docs.joomla.org/JDocument/addScript

но у меня лично изменить не получилось любыми способами
« Последнее редактирование: 16.09.2016, 19:14:24 от leo78 » Записан
Fedor Vlasenko
Профи
********

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

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


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


« Ответ #8 : 18.09.2016, 02:40:34 »

Код
$document->addScript(JCommentsSystemPluginHelper::getAjaxJS(), "text/javascript", false, false);
$document->addScript(JCommentsSystemPluginHelper::getAjaxJS(), $type = "text/javascript", $defer = false, $async = false);
в этих двух строках метод addScript будет вызван с одинаковыми параметрами (вар 1 предпочтительней, не объявляются никому не нужные переменные $type, $defer, $async)
Любой скрипт вставленный в тело документа HTML динамически будет загружен асинхронно
Код
var element = document.createElement('script');
element.src = '/my_path/script.js';
document.head.appendChild(element);
 
так реализованы популярные счетчики
нужно больше(отслеживать загрузку) или используйте RequireJS
Записан
beliyadm
Профи
********

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

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


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


« Ответ #9 : 18.09.2016, 02:49:08 »

Вот сколько раз уже сталкивался, в модуле (да где угодно) пишешь подгрузку скрипта на квери через addScript  - он выходит в HEAD, а сам квери на уровне шаблона грузится в конце BODY. Да - другая тема, нежели анинхрон, но что делать то
Записан
Fedor Vlasenko
Профи
********

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

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


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


« Ответ #10 : 19.09.2016, 00:35:51 »

beliyadm
в шаблоне
Код
$path = $this->baseurl . '/templates/' . $this->template . '/';
// Add JavaScript Frameworks
$this->footerScript[$path . 'js/jquery-1.9.1.min.js'] = 1;
$this->footerScript[$path . 'js/bootstrap.min.js'] = 1;
$this->footerScript[$path . 'js/common.js'] = 10;
в конце шаблона
Код
<?php
if (is_array($this->
footerScript))
{
$scriptHtml = '';
asort($this->footerScript, SORT_NUMERIC);
foreach (array_keys($this->footerScript) as $script):
$scriptHtml .= '<script src="' . $script . '"></script>';
endforeach;
echo $scriptHtml;
}
?>
</body>
в любом месте где нужно вставить скрипт
Код
$doc = JFactory::getDocument();
$doc->footerScript[ 'myPath/myScript.js'] = 1;
 
  // оперируя цифрами в значении мы оперируем порядком вывода
« Последнее редактирование: 19.09.2016, 16:17:46 от Fedor Vlasenko » Записан
beliyadm
Профи
********

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

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


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


« Ответ #11 : 19.09.2016, 15:49:03 »

Супер, спасибо
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

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