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

  • 11 Ответов
  • 5080 Просмотров

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

*

Sven

  • Осваиваюсь на форуме
  • ***
  • 107
  • 1
Возможно ли этому скрипту сделать асинхронную загрузку? /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

  • Профи
  • ********
  • 3800
  • 698
  • Все начинается с Value
Re: Асинхронная загрузка скрипта
« Ответ #1 : 07.06.2013, 22:05:18 »
 $document->addScript(JCommentsSystemPluginHelper::getCoreJS(), "text/javascript", true);
defer сохраняет порядок выполнения скриптов, а async — нет.

*

Sven

  • Осваиваюсь на форуме
  • ***
  • 107
  • 1
Re: Асинхронная загрузка скрипта
« Ответ #2 : 07.06.2013, 22: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

  • Администратор
  • *******
  • 6843
  • 1297
  • снова дома...
Re: Асинхронная загрузка скрипта
« Ответ #3 : 07.06.2013, 22:26:08 »
Скажем так, в текущей реализации async не прокатит, но я работаю над новой версией, там с этим делом надеюсь будет порядок. Но пока процесс в самом разгаре, даже какие-то примерные сроки боюсь называть. Административная панель уже на 60% переписана под 2.5/3.0 без каких-либо костылей и режимов совместимости. Планирую на выходных закончить. Что же касается frontend-части, там с одной стороны чуть проще, с другой стороны есть куча интересных идей. Посмотрим, как пойдет процесс. Если успешно - сразу реализую, нет - сначала выпущу версию для 3.0, затем займусь переписыванием всего JavaScript компонента.

*

bahinn

  • Осваиваюсь на форуме
  • ***
  • 57
  • -1
Re: Асинхронная загрузка скрипта
« Ответ #4 : 13.01.2014, 04: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

  • Новичок
  • *
  • 1
  • 0
Re: Асинхронная загрузка скрипта
« Ответ #5 : 19.05.2015, 20:37:44 »
добрый день, есть ли возможность сделать асинхронную загрузку jcomments js ?
а то мы тут воюем с Google хотелками и уперлись в jcomments, пока что не смогли нормально сделать async.
может кто то может что то подсказать?
Спасибо

Joomla 3.4.1 + JComments 3.0.5

*

Roinmana

  • Осваиваюсь на форуме
  • ***
  • 87
  • 1
Re: Асинхронная загрузка скрипта
« Ответ #6 : 03.03.2016, 22:56:03 »
Изменилось ли что нибудь с возможностью асинхронной загрузки скриптов jcomments? Если делаю как описал выше
Bahinn, то на денвере компонент работает, а на реальном сайте ошибки и ничего. Есть ли решение?

*

leo78

  • Живу я здесь
  • ******
  • 922
  • 51
  • I left from paradise!?...
Re: Асинхронная загрузка скрипта
« Ответ #7 : 16.09.2016, 18: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, 20:14:24 от leo78 »
Хотите, чтоб вам дали, так дайте, нам в начале. Ну, а если нет...
То физкультпривет! И до свиданье, до новых встреч и ручкой на прощанье!

Благодарности принимаются круглосуточно: Z957282423806 | R045187244064 | U207811153699

*

Fedor Vlasenko

  • Профи
  • ********
  • 3800
  • 698
  • Все начинается с Value
Re: Асинхронная загрузка скрипта
« Ответ #8 : 18.09.2016, 03:40:34 »
Код: php-brief
$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 динамически будет загружен асинхронно
Код: javascript
var element = document.createElement('script');
element.src = '/my_path/script.js';
document.head.appendChild(element);
так реализованы популярные счетчики
нужно больше(отслеживать загрузку) или используйте RequireJS

*

beliyadm

  • Профи
  • ********
  • 8359
  • 1527
  • Севастополь == Россия
Re: Асинхронная загрузка скрипта
« Ответ #9 : 18.09.2016, 03:49:08 »
Вот сколько раз уже сталкивался, в модуле (да где угодно) пишешь подгрузку скрипта на квери через addScript  - он выходит в HEAD, а сам квери на уровне шаблона грузится в конце BODY. Да - другая тема, нежели анинхрон, но что делать то
Все истины, которые я хочу вам изложить, — бесстыдная ложь.
Записки нетрезвого кодера || -=Joomla FAQ=- || -=все плохо=- || skype: beliyadm_pb

*

Fedor Vlasenko

  • Профи
  • ********
  • 3800
  • 698
  • Все начинается с Value
Re: Асинхронная загрузка скрипта
« Ответ #10 : 19.09.2016, 01:35:51 »
beliyadm
в шаблоне
Код: php-brief
$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;
в конце шаблона
Код: html4strict
<?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>
в любом месте где нужно вставить скрипт
Код: php
$doc = JFactory::getDocument();
$doc->footerScript[ 'myPath/myScript.js'] = 1;
  // оперируя цифрами в значении мы оперируем порядком вывода

*

beliyadm

  • Профи
  • ********
  • 8359
  • 1527
  • Севастополь == Россия
Re: Асинхронная загрузка скрипта
« Ответ #11 : 19.09.2016, 16:49:03 »
Супер, спасибо
Все истины, которые я хочу вам изложить, — бесстыдная ложь.
Записки нетрезвого кодера || -=Joomla FAQ=- || -=все плохо=- || skype: beliyadm_pb