jQuery локально

Список разделов phpBBex 1.x (поддерживается) Пожелания 1.x

Описание: В phpBBex 1.x чего-то не хватает? Напишите об этом здесь, и мы постараемся исправиться.
Правила раздела: Одна тема — один запрос новой возможности. Обязательно формируйте внятный заголовок, максимально отражающий суть вашей идеи. Также приведите примеры, где предлагаемая вами возможность будет актуальна.
Модератор: Поддержка

Сообщение #1 factotum » 21.04.2013, 14:18

Новые возможности и небольшие исправления:
- jQuery теперь хранится локально, а не в Google CDN (поскольку многие пользователи используют phpBBex на локальных форумах без доступа в интернет)
не пойму, что происходит.

интересно было бы понять, что стоит за "многие". а с доступом в интернет тогда какие?

Код: Выделить всё
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="{T_ROOT_PATH}/assets/js/jquery.js"><\/script>')</script>
почему бы не сделать так?
factotum
Автор темы
Откуда: Люксембург
Репутация: 234
С нами: 11 лет 11 месяцев

Сообщение #2 JoteRuso » 21.04.2013, 19:22

factotum:что стоит за "многие"
Видимо, те, кто устанавливает phpBBex в корпоративных (и им подобных) сетях. Для внутреннего, так сказать, пользования.
factotum:а с доступом в интернет тогда какие?
А это уже просто подавляющее большинство :wink:
JoteRuso M
Аватара
Откуда: Москва, Россия
Репутация: 541
С нами: 11 лет 11 месяцев

Сообщение #3 factotum » 21.04.2013, 20:16

JoteRuso, очень ценю Ваши комментарии. Все таки хотелось бы увидеть мнение Евгения.
factotum
Автор темы
Откуда: Люксембург
Репутация: 234
С нами: 11 лет 11 месяцев

Сообщение #4 VEG » 22.04.2013, 00:36

factotum:почему бы не сделать так?
Если сделать так, страницы форума будут медленно загружаться у пользователей без интернета — задержка может быть до нескольких секунд. Ваш способ годится как аварийный, но не основной. Единственное улучшение — он загрузит локальную копию jQuery в том случае, если сервера Google CDN недоступны. При старом способе jQuery просто казался бы недоступным, а задержка при ожидании ответа от серверов Google CDN — та же.

Как минимум уже трижды жаловались на то, что phpBBex работает очень медленно, и в 2 случаях оказалось, что виной всему — отсутствие соединения с интернет и долгое ожидание браузера ответа от сервера Google CDN. Третий случай ещё не разобрали, автор проблемы пропал — возможно, решил что с phpBBex не стоит иметь дела, раз он такой медленный. Поэтому и было решено сделать локальную копию jQuery.

Разница будет только при первой загрузке — копия jQuery будет взята с вашего сервера, а не с Google CDN. А потом уже будет всегда браться из кэша.

Вообще в итоге можно будет сделать как в phpBB 3.1 — по умолчанию копия jQuery локальная, но будет возможность из админки активировать загрузку jQuery с Google CDN.
VEG M
Администратор
Аватара
Откуда: Finland
Репутация: 1653
С нами: 11 лет 11 месяцев

Сообщение #5 factotum » 22.04.2013, 13:10

Казалось, с CDN кеширует тоже. Ну да ланна.
Беспокоит другое. Три фидбека от форумов, которые никто и никогда не увидит в глаза - и вуаля! Получите по 100кб на незакеширонный запрос все остальные.

А так то да, форум было кому раскатать локально, а поправить загрузку внешних ресурсов, получается, некому. Выглядит как минимум странно.
factotum
Автор темы
Откуда: Люксембург
Репутация: 234
С нами: 11 лет 11 месяцев

Сообщение #6 VEG » 22.04.2013, 14:06

factotum, не драматизируйте.
  • Загружается не 100, а всего 28 килобайт (не забывайте о существовании gzip)
  • Версий jQuery много, вероятность того, что нужная версия jQuery отсутствует в вашем кэше очень велика
  • Например, у меня в кэше всего 5 версий jQuery из Google CDN, а всего их штук 50
  • При недоступности Google CDN (из-за отсутствия интернета, проблем на серверах Google или проблем у вашего провайдера в направлении серверов Google) получаем недопустимую задержку в несколько секунд
  • Если ваш сайт доступен и работает, этой задержки никогда не будет, если jQuery берётся с вашего же сервера

Итого:
  • При использовании jQuery с Google CDN в 90% случаев при первом заходе на сайт мы получаем задержку в 200мс., но при этом если по каким-то причинам Google CDN недоступен — получаем задержку в несколько секунд, в худших случаях может доходить и до минут
  • При использовании локальной копии jQuery в 100% случаев при первом заходе на сайт мы получаем задержку в 200мс., при этом jQuery будет доступен во всех случаях, независимо от доступности сторонних серверов и интернета в целом
  • При втором и последующих заходах на сайт никакой разницы между двумя способами нет, поскольку копия jQuery будет браться из кэша браузера
VEG M
Администратор
Аватара
Откуда: Finland
Репутация: 1653
С нами: 11 лет 11 месяцев

Сообщение #7 factotum » 22.04.2013, 14:16

Попса побеждает разум. Удачи
factotum
Автор темы
Откуда: Люксембург
Репутация: 234
С нами: 11 лет 11 месяцев

Сообщение #8 VEG » 22.04.2013, 14:24

factotum, вы бы хоть как-то аргументировали. Если кто-то где-то в интернете написал, что использование CDN лучше — попробуйте подумать сами, так ли это, взвесить все за и против. Я понимаю, что использовать CDN сейчас модно. Но оправдано ли это? Я выше написал о призрачном преимуществе использования CDN. Если бы версия библиотеки была одна, то можно было бы о чём-то спорить. А так — преимущество есть в очень редких случаях, а недостатки — вполне ощутимы конечными пользователями в случае каких-либо проблем с доступом к Google CDN.

Не удивлюсь, если аргументации не будет, как и в прошлом споре с асинхронной загрузкой jQuery. Больше практики, меньше поверхностной теории — надуманных проблем, подобных этой, просто не возникло бы.

Таки да, попса победила разум. Использовать CDN сейчас модно. В phpBBex это использовалось по этой же причине — из-за моды. Но как оказалось, проблем от этого больше, чем преимуществ. Поэтому теперь по умолчанию будет лучше — своя локальная копия обязательного для работы форума скрипта без зависимости от внешних серверов. То что модно — не всегда хорошо. Бездумное следование каким-то правилам и моде — почти всегда плохо.
VEG M
Администратор
Аватара
Откуда: Finland
Репутация: 1653
С нами: 11 лет 11 месяцев

Сообщение #9 factotum » 22.04.2013, 16:16

VEG,
factotum:Получите по 100кб на незакеширонный запрос все остальные
перевожу: запрос = обращения к диску на 100кб + сжатие. это отнимает ресурсы. у меня не резиновый сервер. мне это не нужно.
VEG:Загружается не 100, а всего 28 килобайт (не забывайте о существовании gzip)
не забываю. в первую очередь это процессорное время, а потом + 28кб к трафику
И CDN - это не мода. Это придумали, чтобы хранить статичные ресурсы, отдавая приоритет динамичным.

спорить нет желания. своя рубаха всегда ближе. да и вопрос не за решение. нужное прикручу без вопросов. вопрос был "что происходит?". Если я сейчас напишу, что не валидный код кнопок соц.сетей тянется начиная с первых версий, то исправите?
factotum
Автор темы
Откуда: Люксембург
Репутация: 234
С нами: 11 лет 11 месяцев

Сообщение #10 VEG » 22.04.2013, 17:06

К слову, об отказе от CDN по умолчанию я писал ещё в споре об асинхронной загрузке jQuery.
VEG:Поскольку некоторые жаловались на недоступность серверов Google CDN в локалках, в будущем копия jQuery будет распространяться вместе с phpBBex. Возможно, сделаем опцию, как и в phpBB 3.1, чтобы пользователь мог выбрать между CDN и локальной копией. Так что аргумент, мол если Google CDN недоступен, при асинхронной загрузке jQuery страница всё равно отобразится быстро, не считается :) С загрузкой локальной копии файла проблем не будет.
Тогда возражений не поступило.

Пока что выглядит так, что вы предпочитаете асинхронную загрузку и использование CDN, основываясь исключительно на вере. Я такой подход не приемлю, мне нужны проверяемые факты и доводы. Хотя и сам иногда попадаюсь на подобные заблуждения. А то что верить нельзя даже авторитетным личностям — убедился на личной шкуре после серии статей о шаблонизаторах от Fabien Potencier (ведущий разработчик Symfony), из которых следовал вывод, что Twig — быстрее популярного Smarty. В мире PHP-программистов такое мнение стало модным. Но как оказалось, автор просто грамотно скрыл самую значимую информацию, сравнивая свой шаблонизатор со Smarty, и первая же самостоятельная проверка раскрыла весь обман.

factotum:перевожу: запрос = обращения к диску на 100кб + сжатие. это отнимает ресурсы. у меня не резиновый сервер. мне это не нужно.
Вы действительно верите, что один запрос за статичным ресурсом создаст ощутимую нагрузку на ваш сервер? :) Боюсь рассказать вам, сколько запросов сгенерирует одна страница любой темы с её аватарками и смайликами. По секрету — запросов 20-30 будет точно, а то и больше. Это просто кошмар!

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

Вообще смешная ситуация. Ещё столько картинок не переведено в data url, ещё столько отдельных js-файлов, а вы столько внимания уделяете способу загрузки одного несчастного jQuery. Предложили бы уже объединить jquery.splash.js, jquery.js и forum_fn.js в один файл — минус аж 2 запроса :) Хотя скажу по секрету, что в отдалённой перспективе планируется автоматический сборщик js-файлов в один большой пакет. Только вот беда — смайлики и аватары всё равно будут генерировать пачку запросов.

factotum:Если я сейчас напишу, что не валидный код кнопок соц.сетей тянется начиная с первых версий, то исправите?
Неужели вы о target="_blank"? Пожалуйста, не разочаровывайте меня, скажите, что там что-то другое не так.

Добавлено спустя 6 часов 29 минут:
Реализована опция в настройках отображения, которая возвращает использование копии jQuery с Google CDN. Если вы уверены, что у ваших пользователей Google CDN будет всегда доступен — включайте :) Также приведённым вами способом реализован fallback в случае проблем с доступом к Google CDN.

Что касается кода социальных сетей. Там в ссылке вместо &amp; был просто & — сделал как положено и немного переписал код, чтобы не захламлять глобальное пространство js-переменных.

Если же всё же речь шла о target="_blank" (его модно ругать, мол «это не валидно, не тру»), то предлагаю ознакомиться с последними спецификациями HTML5. Вся фишка HTML5 в том, что там разрешены все вещи, которые ранее активно использовались, и target="_blank" — в их числе.

Ну не знаю, ну попробуйте вот этот код скормить валидатору:
Код: Выделить всё
<!DOCTYPE html>
<meta charset="utf-8">
<title>demo</title>
<a href="http://phpbbex.com/" target="_blank">Go!</a>

Вы получите предупреждение о том, что валидатор экспериментальный и немного отстаёт от спецификаций HTML5 (то есть может выдавать ошибку в случаях, которые уже вошли в спецификации), и ещё одно предупреждение, что при отсылке кода через приведённую выше форму, документ всегда трактуется как UTF-8. Всё. Никаких бла-бла-бла про target="_blank". Эти два предупреждения вы будете получать всегда, что бы вы ни отсылали. Первое предупреждение как раз и написано для больших поклонников валидации, мол «ребята, веб развивается, и валидатор за ним не успевает — пользуйтесь им с головой, не всё, на что он ругается, является ошибкой».
VEG M
Администратор
Аватара
Откуда: Finland
Репутация: 1653
С нами: 11 лет 11 месяцев

Сообщение #11 Xisp » 28.09.2013, 19:50

VEG:jquery.splash.js, jquery.js и forum_fn.js

Первый и последний прекрасно объединяются простым сливанием содержимого. jquery.js тоже можно, но не знаю, как там с лицензиями, и вообще, больно большой файл придётся обновлять у пользователя по каждому чиху.
Почему до сих пор их не слили вместе?

Добавлено спустя 32 минуты:
Как я вижу, скоро новая версия. Самое время слить файлы :smile:
Xisp
Репутация: 9
С нами: 11 лет

Сообщение #12 VEG » 28.09.2013, 20:53

Xisp:Как я вижу, скоро новая версия. Самое время слить файлы :smile:
jquery.splash.js и forum_fn.js объединил. jquery.js остаётся отдельно — он может подгружаться из CDN, также для IE8 подгружается jQuery 1.10 вместо jQuery 2.0.
VEG M
Администратор
Аватара
Откуда: Finland
Репутация: 1653
С нами: 11 лет 11 месяцев

Сообщение #13 factotum » 28.09.2013, 22:08

Сейчас в коде хидера ошибка
https://code.google.com/p/phpbbex/source/browse/s ... r/template/overall_header.html
Код: Выделить всё
 <script>window.jQuery || document.write('<script src="{T_ROOT_PATH}/assets/js/jquery.js"><\/script>')</script>
assets лежит в корне форума. А это {ROOT_PATH}assets/
слеш отдается по умолчанию
"{T_ROOT_PATH} - не существует
аналогично в других местах.

Добавлено спустя 4 минуты 31 секунду:
чтобы не быть голословным:
ROOT_PATH
T_..
factotum
Автор темы
Откуда: Люксембург
Репутация: 234
С нами: 11 лет 11 месяцев

Сообщение #14 Sumanai » 28.09.2013, 22:20

factotum:Сейчас в коде хидера ошибка

Но оно всё равно работает :razz:
По крайней мере для форума по прямому адресу, без установки в папку.
Конечно баг. Просто вместо {T_ROOT_PATH} ничего не подставляется.
Sumanai M
Аватара
Репутация: 1677
С нами: 11 лет 2 месяца

Сообщение #15 factotum » 28.09.2013, 22:26

Sumanai:Но оно всё равно работает
ага, потому что форум в корне. съел зуб на этой ошибке, когда писал поддержку для Magnific Popup. Форум стоит в папке (site.com/forum/). И тут все выплыло боком. Правда Girl так и не поправила, хотя сейчас плагин хватает пути корректно.
factotum
Автор темы
Откуда: Люксембург
Репутация: 234
С нами: 11 лет 11 месяцев

Сообщение #16 factotum » 29.09.2013, 23:12

переменная {T_ROOT_PATH} так и осталась жить в репозитарии. это фича?
factotum
Автор темы
Откуда: Люксембург
Репутация: 234
С нами: 11 лет 11 месяцев

Сообщение #17 VEG » 30.09.2013, 01:20

На самом деле T_ROOT_PATH также существует. Посмотрите вывод страницы:
Код: Выделить всё
<script src="./assets/js/jquery.js"></script>
То есть вместо T_ROOT_PATH вывелась точка. На самом деле в phpBBex существуют обе переменные, и они незначительно отличаются. В T_ROOT_PATH может быть как относительный путь, так и абсолютный, в зависимости от настроек форума. А в ROOT_PATH всегда содержится относительный путь. Но я думаю, что есть смысл объединить эти сущности.
VEG M
Администратор
Аватара
Откуда: Finland
Репутация: 1653
С нами: 11 лет 11 месяцев

Сообщение #18 factotum » 30.09.2013, 09:12

VEG:В T_ROOT_PATH может быть как относительный путь, так и абсолютный, в зависимости от настроек форума
где можно почитать?
factotum
Автор темы
Откуда: Люксембург
Репутация: 234
С нами: 11 лет 11 месяцев

Сообщение #19 VEG » 30.09.2013, 12:36

factotum:где можно почитать?
В includes/functions.php :)
Код: Выделить всё
   // Determine board url - we may need it later
   $board_url = generate_board_url() . '/';
   $web_path = (defined('PHPBB_USE_BOARD_URL_PATH') && PHPBB_USE_BOARD_URL_PATH) ? $board_url : $phpbb_root_path;
...
   $template->assign_vars(array(
...
      'ROOT_PATH'         => $phpbb_root_path,
...
      'T_ROOT_PATH'         => trim($web_path, '/'),
В репозитории этого кода уже нет, я оставил только оригинальный ROOT_PATH.
VEG M
Администратор
Аватара
Откуда: Finland
Репутация: 1653
С нами: 11 лет 11 месяцев


Вернуться в Пожелания 1.x



cron