В данном случае, вопрос не в экономии трафика сервера а посетителей - есть желание, что бы у них сайт загружался быстро, а виджет ВК заставляет загружать около 100-160 кб данных. Сейчас, это примерно 20% объема всей страницы, на 3G это ощутимо бывает.
Вчера в блоге писал про отложенную загрузку картинок, которая на моем проекте (2-4 тыс посетителей в сутки) помогла сократить объем загружаемых данных до 2 раз. Вот хотелось продолжить тему оптимизации.
На сайте есть блок с участниками группы в контакте, который, естественно, загружается вместе со всей страницей, хоть и асинхронно, насколько я могу судить. Но вот момент - до него долистывает страницу около 50% посетителей.
В связи с этим хотелось бы отложить загрузку блока до момента, когда он попадет в viewport.
Можете посоветовать какой-то плагин для этого? Пробовал найти сам, но как-то ничего особого.
Александр Панишев пишет: А зачем вам это исправлять? Чем не устраивает многотомность?
Переносить эти архивы очень неудобно. Ну и личное правило - сделал бекап, скачал на локальную машину. Бекапов много не бывает, а качать 10 файлов вместо одного крайне неудобно.
Да и дело даже не в причине. Вопрос в том, почему этот параметр не поддается нормальной настройке? Всякий раз на всех сайтах приходится в экспертные настройки лезть, где, зачастую уже настроены какие-то моменты (например, исключение "/bitrix/wizards/" и их приходится ставить по умолчанию, что бы сделать полный бекап...
Больше всего, не нравится, что делаешь по привычке резервную копию... ждешь 10 минут... и тут тебе 20 томов... потом все сначала и уже с экспертными настройками еще 10 минут ждать нормального архива...
P.S. И совсем не понятно, когда настройка размера тома сохраняется, а когда нет - не угадать. Если один раз поставить размер тома 1000Мб, то будет в следующий раз 100 или 1000 никак не узнать, не зайдя в экспертные настройки.
Если поставить экспертные настройки и указать 1000мб - все работает, но по умолчанию почти(!) всегда бекапы делаются частями по 100 мб. Почему так и как это исправить?
Во-первых, не очень понятно что это такое? А во-вторых, откуда он берет данные? В result_modifier.php и component_epilog.php ничего похожего нет... вроде... И в-третьих, зачем это вообще может быть нужно в битриксе?
На второй вопрос нашел ответ - данные формируются в атрибуте HTML элемента data-colors из result_modifier.php. jQuery уже сам достает оттуда данные в obj.
Существуют инструменты, выполняющие дополнительное сжатие файлов JPEG и PNG без потерь и снижения качества. Для файлов JPEG рекомендуется использовать jpegtran или jpegoptim (доступно только для Linux, выполнять с параметром --strip-all).
А есть ли эти тулзы для PHP, что бы можно было пережать картинку прямо из своего скрипта?
Судя по всему, при импорте свойства добавляются отдельно через SetProperty. Можно посмотреть в исходном коде импорта, но мне кажется, что там очень много кода и долго разбираться.
А вот OnBeforeIBlockElementUpdate как раз должен бы вызываться во время обновления свойства элемента.
Может быть, в вашем случае стоит еще посмотреть OnBeforeProductUpdate.
Все правильно - GetByID не вернет вам фотографии. Речь только ко компонентах Если использовать API то через GetProperty и можете достать и фото и всё что нужно
Александр Дежурко пишет: Подскажите, пожалуйста, данные о дополнительных фотографиях [MORE_PHOTO] "ложатся" в корень массива $arResult только для элементов каталога? У инфоблоков других типов, в частности "Справочники" они "ложатся" в [PROPERTIES][MORE_PHOTO] ?
В корень массива их помещает компонент, которым вы выводите информацию. Не зависимо от того, какой тип выберите. Другое дело, если имеется в виду highload-инфоблоки - их почему-то называют справочниками.
Надо смотреть правила обработки адресов, думаю, ошибка там - не передается код элемента в index.php, для страницы новости нужно отдельную страницу делать, например, detail.php.
Олег Постоев пишет: Конкретно интересует, можно ли в script.js шаблона компонента определить путь до папки с компонентом? Или как еще организовать AJAX запрос к компоненту?
Передавать нужное значенив вызов функции или класса js
А можно подробнее или пример какой-нибудь? Искал в стандартных компонентах, но как-то не получилось.
kopoBko пишет: вы можете в шаблоне вывести коротенький js(мб даже просто переменную с путем) который будете подцеплять в script.js
Инлайновый JavaScript не оч хорошо влияет на производительность. Да и в целом интересно, все файлы шаблона компонента имеют какие-то предопределенные переменные, а что касается script.js не известно. Попробовал вывести console.log(this); - вылезло что-то огромное))) "бу"
Конкретно интересует, можно ли в script.js шаблона компонента определить путь до папки с компонентом? Или как еще организовать AJAX запрос к компоненту?
Спасибо, Антон! Выручаете! Получается стандартного механизма хранить массивы в настройках модуля нет, а сериализацией можно, но совсем чуть чуть. Будем хитрить
Кстати, для логики "И" лучше подходит простой фильтр по элементам каталога. Шаблон требует кастомизации, а для свойств привязки к элементам еще и допил в result_modifier.php:
Код
foreach($arResult["arrProp"] as $keyProp=>$arProp) {
if($arProp["PROPERTY_TYPE"] == "E") {
Но для создания такого фильтр он изначально, подходит много лучше "умного" фильтра:
Но, вообще странно - больше года прошло, а фильтр в плане управления логикой так и не развивается.
Алексей Беспалов пишет: В шаблон компонента вроде не то не сё, в function.php не заработала. Разместил в result_modifer.php. Как по религии Битрикса вернее будет?
Если нужно изменить логику выводимых данных, структуру массива, то лучше в component.php. Если нужно отредактировать результат, как-то не значительно (предположу, что ваши 40 строк кода именно это и делают) то лучше в result_modifier.php работать с $arResult.
Если на примерах, то в первый случай стоит использовать, если в $arResult нужно прицепить данные из других инфоблоков. Второй случай может подойти, если надо сделать уменьшенную копию картинки превью (например, сделать квадратной) - тут лучше добавить данные в $arResult с помощью CFile::ResizeImageGet