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

Sven

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

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Re: Асинхронная загрузка скрипта
« Ответ #1 : 07.06.2013, 20:05:18 »
 $document->addScript(JCommentsSystemPluginHelper::getCoreJS(), "text/javascript", true);
defer сохраняет порядок выполнения скриптов, а async — нет.
*

Sven

  • Захожу иногда
  • 107
  • 6 / 5
Re: Асинхронная загрузка скрипта
« Ответ #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

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

bahinn

  • Захожу иногда
  • 57
  • 0 / 1
Re: Асинхронная загрузка скрипта
« Ответ #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

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

Joomla 3.4.1 + JComments 3.0.5
*

Roinmana

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

leo78

  • Завсегдатай
  • 1018
  • 62 / 8
  • I left from paradise!?...
Re: Асинхронная загрузка скрипта
« Ответ #7 : 16.09.2016, 16: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, 18:14:24 от leo78 »
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Re: Асинхронная загрузка скрипта
« Ответ #8 : 18.09.2016, 01: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

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Re: Асинхронная загрузка скрипта
« Ответ #9 : 18.09.2016, 01:49:08 »
Вот сколько раз уже сталкивался, в модуле (да где угодно) пишешь подгрузку скрипта на квери через addScript  - он выходит в HEAD, а сам квери на уровне шаблона грузится в конце BODY. Да - другая тема, нежели анинхрон, но что делать то
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Re: Асинхронная загрузка скрипта
« Ответ #10 : 18.09.2016, 23: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

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Re: Асинхронная загрузка скрипта
« Ответ #11 : 19.09.2016, 14:49:03 »
Супер, спасибо
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

Gerostrat

  • Захожу иногда
  • 374
  • 2 / 0
  • Свидетель чайной ложки
Re: Асинхронная загрузка скрипта
« Ответ #12 : 29.05.2018, 22:07:43 »
Добрый день.
Скрипты для компонента до сих пор нельзя подключать асинхронно? Или есть какое-то решение? А то ругается как при async так и при defer, что
Код
Uncaught ReferenceError: jcomments is not defined
Хотя и пробую скрипты в tpl_index.php выполнять с задержкой в 10 секунд или после DOMContentLoaded.
Заранее благодарю за помощь!
*

Gerostrat

  • Захожу иногда
  • 374
  • 2 / 0
  • Свидетель чайной ложки
Re: Асинхронная загрузка скрипта
« Ответ #13 : 31.05.2018, 12:45:53 »
Да? Нет никаких вариантов? Или эта ветка не читается?
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Re: Асинхронная загрузка скрипта
« Ответ #14 : 31.05.2018, 14:35:28 »
Цитировать
Uncaught ReferenceError: jcomments is not defined
Данная ошибка происходит из-за использования не объявленной переменной jcomments
Никакого отношения к асинхронной или синхронной загрузке ошибка не имеет
Вам нужно подключать скрипт в котором объявляется jcomments до ее использования.
То есть вначале вы инициализируете переменную(подключая скрипт с объявлением переменной jcomments в нужной области видимости), а затем используете
*

Gerostrat

  • Захожу иногда
  • 374
  • 2 / 0
  • Свидетель чайной ложки
Re: Асинхронная загрузка скрипта
« Ответ #15 : 31.05.2018, 14:59:20 »
Спасибо за ответ.
Вот я и предполагаю, что при асинхронной загрузке двух скриптов для jcomments они не успевают загрузиться до выполнения скриптов в файле, который я указывал выше. А при выполнении этих скриптов с задержкой на 10 секунд или при загрузке DOM выдает вот эту вот ошибку...
*

Gerostrat

  • Захожу иногда
  • 374
  • 2 / 0
  • Свидетель чайной ложки
Re: Асинхронная загрузка скрипта
« Ответ #16 : 01.06.2018, 10:24:21 »
Если удалить загрузку скриптов в <head>, а потом подключить их непосредственно в шаблоне вывода комментариев, что имеет следующий вид
Код
<script src="/components/com_jcomments/js/jcomments-v2.3.js?v=12" type="text/javascript" async></script>
<script src="/components/com_jcomments/libraries/joomlatune/ajax.js?v=4" type="text/javascript" async></script>

<script type="text/javascript">
<!--
var jcomments=new JComments(<?php echo $object_id;?>, '<?php echo $object_group; ?>','<?php echo $this->getVar('ajaxurl'); ?>');
jcomments.setList('comments-list');
//-->
</script>
<?php
// Тут немного кода вывода разных блоков
?>
<script type="text/javascript">
<!--
jcomments.setAntiCache(<?php echo $aca;?>,<?php echo $acp;?>,<?php echo $acf;?>);
//-->
</script>

То ошибку показывает как раз на
Код
jcomments.setAntiCache(<?php echo $aca;?>,<?php echo $acp;?>,<?php echo $acf;?>);
а также не работает форма добавления комментариев (форма не разворачивается и/или не отправляются комментарии)

Если убрать async, то всё работает как положено.

Может всё же можно что-то с этим сделать? Благодарю.
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Re: Асинхронная загрузка скрипта
« Ответ #17 : 01.06.2018, 10:56:31 »
1. Убрать async, перенести ваш код как можно ближе к закрывающемуся </body>
3. Можно использовать requirejs или мой маленький велосипед
*

Gerostrat

  • Захожу иногда
  • 374
  • 2 / 0
  • Свидетель чайной ложки
Re: Асинхронная загрузка скрипта
« Ответ #18 : 13.08.2018, 19:51:37 »
3. Можно использовать requirejs или мой маленький велосипед

requirejs не годится, т.к. я стараюсь избавиться скриптов для увеличения скорости загрузки и отрисовки страницы, а придётся добавить ещё один.

Что касается Вашего "велосипеда", то не могли бы Вы подсказать, как им воспользоваться? Вместо "test1.js" в примере вставить свой скрипт? Что-то ещё сделать?

Спасибо.
*

Gerostrat

  • Захожу иногда
  • 374
  • 2 / 0
  • Свидетель чайной ложки
Re: Асинхронная загрузка скрипта
« Ответ #19 : 17.08.2018, 11:27:16 »
Ау? Есть кто живой из мастеров?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

[Решено] Загрузка JComments AJAX'ом

Автор Angel_N_Ig

Ответов: 4
Просмотров: 8129
Последний ответ 26.04.2013, 10:33:44
от avantus
Загрузка аватаров пользователем

Автор scaners

Ответов: 5
Просмотров: 4108
Последний ответ 02.06.2009, 12:07:36
от scaners