Задать вопрос
  • Как ускорить сайт на Битрикс для pagespeed?

    но эти стили и скрипты нужны для нормальной работы сайта, часть из них часть из них стили и скрипты шаблона сайта, другие это системные JS скрипты которые загружает сам Битрикс.

    И что-то мне подсказывает что там половина ненужного хлама.
    Начать нужно с нормальной, лаконичной верстки, аккуратно интегрированной на сайт, где вы будете понимать какие файлы ресурсов для чего нужны.

    В настройках для главного модуля указал, чтобы JS подключались в нижний части страницы но скорость только немного подросла

    Если вам требуется эта настройка, то вы уже не контролируете загрузку и не понимаете что происходит.
    Она как раз и нужна в этом случае, чтобы хоть как-то помочь пользователям которые юзают стандартные шаблоны и не имеют возможности сделать свою верстку и нтеграцию.

    Для ускорения загрузки страницы pagespeed предлагает использовать атрибут link rel=preload при подключении CSS.

    Вообще-то шрифтов.

    Пробовал следовать рекомендации pagespeed и подключать CSS стили такой конструкцией

    Вы не правильно распарсили рекомендацию.
    Если вы хотите добавить предзагрузку стилей вы должны добавить метатег прелойда:
    <link rel="preload" href="/local/templates/.default/css/style.min.css">

    А не заменить им загрузку стилей.

    Eliminate render-blocking resources - здесь сервис рекомендует убрать блокирующие рендеринг страницы ресурсы, в моем случае он почему то таким ресурсом результирующий CSS файл сайта, куда Битрикс объединил CSS файл стилей шаблона сайта, CSS файлы шаблонов компонентов и системные файлы

    Что значит "почему-то"? Потому что это блокирующий ресурс. Вынесете стили страницы и хедера в отдельный файл который вставляйте инлайном в html для пользователей заходящих на сайт впервые в head, и подключайте в конце страницы два файла css - этот (да стили будут дважды загружены) и общий.
    А для пользователей заходящих повторно, подключайте только файлы, но уже в начале страницы.

    Remove unused CSS - здесь сервис указывает системные CSS и стили шаблона сайта как неиспользуемые, почему так происходит, ведь эти файлы используются в проекте?

    Возможно что не используются на этой странице которую вы тестируете - тут уж надо выбирать - как вы хотите грузить проект - все стили целиком, или только нужные на текущей странице - что вам важнее и как пользователи перемещаются по вашему сайту.
    Ответ написан
    2 комментария
  • Где лежат настройки параметра компонента bitrix?

    Конечно.
    У вас даже в ошибке написано где: /index.php
    Зайдите в админку. Настройки, контент, структура сайта, файлы и папки.
    5fc9eb5395592370696887.png
    Откройте файл как PHP и исправьте код.

    И вообще менять параметры компонента лучше меняя код и желательно редактором.
    Ответ написан
  • Как генерировать последовательные (не случайные) строки, ограниченные заданными символами?

    Используйте base_convert для перехода между десятиричной и четырнадцатиричной системой счисления и инкримент.
    Этого достаточно.
    Ответ написан
    4 комментария
  • Приемлемо ли использовать base64+mod_gzip для передачи и отображения картинок из 1С в Битрикс?

    1. Нет ли ошибки?)

    Ошибки в чем?

    2. Браузер не сможет кэшировать такие картинки?

    Дело не в том что не сможет - не будет, поскольку это бессмысленно.
    Представим что все эти картинки в dataurl браузер закэшировал... и что? Теперь они магическим образом исчезнут из страницы которую вы передаете браузеру? Нет. Сервер все так же встраивает их в страницу и браузер ее все так же скачивает целиком. А зачем он их тогда кэшировал?

    Кэш это всегда какие-то тяжелые данные ассоциированные с некоторым коротким ключом. Например файл изображения с его URL. Увидев URL в странице браузер не станет скачивать файл, а возьмет его из кэша.
    В вашем случае URL это и есть сам файл - тут невозможно никакая экономия.

    Преимущество dataurl - картинки отображаются гораздо раньше так как загружены вместе со страницей или стилями.
    Недостаток - они скачиваются всякий раз когда нужно загрузить страницу.

    Таким образом хорошо это или плохо зависит от сценария использования вашего сайта.
    Если клиент только один раз загрузит страницу с товарами, посмотрит на цены и в ужасе закроет вкладку, то потери и правда будут в районе нескольких процентов. Если несколько раз... ну давайте посчитаем.
    Пусть размер страницы 200Кб и на ней еще 2Мб изображений. Тогда в классической ситуации первая загрузка страницы будет ~2200Кб, а все последующие 200Кб. В вашем случае все загрузки будут по 2200Кб.

    Таким образом если клиент посещает страницу один раз - разницы нет. Если два - то доп расходы составят 83%, если 4 раза - 215% лишнего трафика сверху.

    Но все зависит от повторных просмотров и размеров ваших картинок и отношению этого размера к размеру страницы.
    Ответ написан
    Комментировать
  • Почему скидки присвоенные определенной группе пользователей не доступны пользователям которые в эту группу попали через API Bitrix?

    Если нажимаю на кнопку «Выйти», а потом обратно авторизовываюсь, скидки появляются.

    Это и есть ответ. Грубо говоря группы у пользователя всегда те, в которых он находился при входе (кстати так сделано почти везде где есть группы).
    В вашем случае проще всего после добавления перелогинить пользователя.
    Ответ написан
  • Как найти где переопределяется title?

    Ну так комплексный компонент и переопределяет.
    Наверняка у него есть параметр который отключает такое поведение - поищите.
    Но лучше всего не используйте его. Что вообще может заставить использовать комплексные компоненты? Комплексные компоненты зло которого надо избегать всеми доступными способами.
    Ответ написан
    Комментировать
  • Как сделать плавный набор текста в input?

    В инпате вы это не сделаете.
    HTML позволяет управлять только видом отдельных элементов DOM. Символ в тексте это не элемент DOM, так что его придется в начале сделать таким.

    Самый простой путь. Делаете input прозрачный поверх блока который имитирует поле ввода. При изменении текста в input сравниваете текст в нем и блоке его имитирующем. Диф этих текстов добавляете в блок обернутым в например span, с наброшенным на него любым эффектом. По завершении анимации заменяете этот span на его содержимое.

    Как-то так.
    Ответ написан
  • Как написать сортировку по размеру скидки для компонента в Битрикс?

    Нет, нельзя - только по предвычесленному свойству.
    Но лучше его обновлять не по крону, а по событию. Впрочем на крон можно поставить агент, который будет выполнять выборочную проверку консистетности, а в случае нарушения её, запускать полную провеку.
    Ответ написан
  • Живы ли вэб-компоненты?

    Suntechnic
    @Suntechnic Автор вопроса
    Мой собственный ответ после изучения темы и чтения иностранных коллег будет таким:

    Технология была многообещающей и интересной на старте. Для ее поддержки гугл даже придумал отдельную спецификацию HTML Imports: https://w3c.github.io/webcomponents/spec/imports/i... (можете не ходить, там 404), что позволяло подключать однофайловые компоненты прямо в документ так:
    <link rel="import" href="my-component.html">
    Классно же да?

    Но технология не приобрела популярности, возможно так как была слишком простой и понятной, а именно в это время на пик славы вышел npm, gulp и вот это всё. В моду входила непонятная магия, утрата контроля над кодом и всякие оптимизаторы позволявшие сделать для одного слайдера на главной страницы бандл в полтора, а иногда 2-3 Мб. кода, и всё это без всяких там jQuеry.
    Ребята одумались и убрали спецификацию HTML Imports, предлагая разбивать компоненты на 3 отдельных файла - js, css и html с шаблоном. Причём js надо было подключать на странице, css тоже, а html должен был загружать по задумке создателей уже в само js. Такой подход позволял резко усложнить работу с web-components и сделать код снова неуправляемым, но было поздно - технология уже уступила позиции конкурентам.
    Конечно это был сарказм, если кто-то не понял.

    Жизнь в этой идее еще теплится, но теперь нам предлагается писать код в трех файлах или помещать его целиком в js, или использовать со специальными загрузчиками, что сопоставимо с использованием какого-нибудь фреймворка, того же Vue, дающее теме же усилиями гораздо большие возможности и смысл использовать веб-компоненты отпадает окончательно.

    Короче технология по задумке хорошая, но на практике не применимая, поэтому широкого распространения и не получает.
    Ответ написан
    2 комментария
  • Как сделать одно свойство с несколькими полями в 1с битрикс?

    Так сделать нельзя, да и не нужно.

    У вас должен быть 1 элемент Услуга в одном ИБ и у него множественное поле привязки к элементам ИБ.
    Во втором ИБ вы сделаете нужные вам элементы и привяжете их к Услуге через это поле привязки.

    Всё.
    Ответ написан
    Комментировать
  • Как конвертировать валюту в script.js bitrix?

    Сконвертируйте ее на стороне сайта в mutator.php.
    Не нужно одну и ту же задачу выполнять в двух разных местах. Тем более по разные стороны от сети.
    Ответ написан
  • Как сделать компонент модальной формы и работать с ней из разных компонентов?

    APP.popup = function (component,props) {
    	let mount_poiunt = document.createElement('div');
    	document.body.append(mount_poiunt);
    	
    	var props = {
    		'component':component,
    		'props':props
    	}
    	
    	var Popup = Vue.extend({
    		data: function () {
    			return props
    		},
    		destroyed () {
    			this.$el.remove()
    		},
    		methods: {
    			close: function () {
    				this.$destroy()
    			}
    		},
    		template: `<div class="popup">
    						<span v-on:click="close" class="close">✖</span>
    						<component v-bind:is="component" v-on:close="close" v-bind="props"/>
    					</div>`
    	})
    	
    	new Popup().$mount(mount_poiunt)
    };


    Далее ты просто делаешь так в методе компонента своего:
    APP.popup('имяКомпонентаКоторыйНадоПоказатьВПопапе', {параметрыЭтогоКомпонента});
    Ответ написан
    Комментировать
  • Как ускорить импорт CSV файла с 300к записей?

    $res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nPageSize"=>2), $arSelect);

    Вынесите это из цикла и обновляйте только те цены которые изменились и будет вам счастье.
    Ответ написан
    Комментировать
  • Как реализовать уникальную сортировку для всех разделов?

    @smilingcheater
    получается при просмотре любого раздела товар может иметь любую позицию в списке (из вашего же примера, Платье 1 было на 1 позиции в разделе Платья было на 1м месте перед Платьем 2, а стало на позиции 4 в разделе Офисные модели, и поменялось порядком с Платьем 2).

    Именно так и именно из этого автоматически следует, что необходимо иметь отдельное поле сортировки для каждого раздела.
    Дальше можно придумывать разные способы как именно это реализовать но самым простым и быстрым является тот, который есть сейчас.

    цель именно увеличить кол-во свойств для ускорения работы сайта.

    Вы наверное хотели сказать уменьшить количество свойств для ускорения работы сайта?
    Но на самом деле количество свойств не сильно влияет на скорость или вы боритесь за сотые секунды во время выборки? Сомневаюсь.

    Рискну предположить, что вы копаете не в ту сторону и что проблема с производительностью где-то в другом месте.

    Покажите как именно вы используете сортирку и как переключаете ее для разделов.
    Ответ написан
  • Битрикс, скидки для разных пользователей + сортировка?

    Так как мы ничего не дождались, вот мой ответ:

    Так как скидки вычисляются в рантайме PHP, вы никак не можете упорядочить товары по цене со скидкой в запросе и сортировку необходимо выполнять ПОСЛЕ того как вычислена цена скидки.

    Хуже того то, что вам для формирования каждой страницы придется извлечь ВСЕ товары, вычилсить цену со скидкой для ВСЕХ товаров, отсортировать массив в рантайме и выбрать из него товары для страницы.

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

    Следовательно нам нужен кэш. И было неплохо этот кэш сделать максимально узким чтобы как можно реже его обновлять. А лучше вычислять прямо при добавлении нового товара и желательно только для него.

    Что хранить в этом кэше? Выходит только что предвычисленные цены со скидкой...

    И вот мы вернулись ровно сюда:
    Как сделать, если у меня становится несколько групп?
    Не создавать на каждую группу новое свойство и по нему сортировать?

    Именно так и делать. Если групп относительно не много. Скажем до 2-3х десятков такое решение все равно будет оптимальным и самым быстрым.

    Обновление значений вешайте на апдейт товара/элемента на события.

    Если групп много - делайте то же самое но заводите отдельну таблицу и делайте джойны при выборке.
    И сравнивайте скорость работы обоих решений - с определенного момента при росте свойств второе станет чуть быстрее мне кажется.
    Ответ написан
    Комментировать
  • Как в vue.js перед изменением data проверять данные?

    Сделай два объекта с данными - один связанный с полями через модель, который будет отражать их состояние, а другой валидированные данные для отправки.
    Вотчем следи за изменением данных в объекте связанном с полями и перекладывай в объект для отправки, когда они валидные.
    Ответ написан
    Комментировать
  • Реактивность на Vue? Как обновить компонент?

    Требуется перерисовывать компонент каждый раз, когда приходят новые данные, как реализовать?

    Значит уже что-то не так. Не должно такого требоваться. Компонент должен перерисовываться сам на основании данных, когда это действительно нужно.

    this.firstWindow = Object.assign({}, this.firstWindow, data);

    Это вы добавляете объект в data? Не надо так делать - вы теряете реактивность.
    Положите этот объект в другой (на уровень ниже) и сделайте так:
    methods:{
          newvalue(data, whichScreen){        
             if(whichScreen){ 
               console.log("попал");
               console.log(data);         
               Vue.set(this.windows, 'firstWindow', Object.assign({}, this.firstWindow, data));
              
             }else{          
               Vue.set(this.windows, 'secondWindow', Object.assign({}, this.secondWindow, data));          
             }
          }
      }


    Сответственно у вас теперь будет this.windows.secondWindow вместо this.secondWindow
    Ответ написан
    Комментировать
  • Как использовать JavaScript с Bitrix?

    Flipflap, затем что вы делаете утверждения не соотвествующие действительности.
    Зачем вот это вот:
    там меню свёрстано не списком на html, а выводится массивом на php

    ?
    Если не понимаете как формируется меню лучше спросить как это происходит.

    На основе массива php компонентом menu по шаблону указанному для этого компонента, генерируется html блок представления меню.

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

    Вам нужно найти шаблон на базе которого генерируется меню.

    Рискну предположить что он где-то там: /local/.default/components/bitrix/menu/...
    Но вомзожно и по другому пути - все зависит от того кто и как кастомизировал сайт.
    Ответ написан
    4 комментария
  • Бинарный поиск - как определить кол-во шагов?

    М... так это же просто логарифм по основанию 2, округленный в большую сторону. Зачем вообще какие-то программы писать?
    Ответ написан
  • Как избавиться от дублей в sitemap Bitrix?

    Вот и ответ. Скорее всего в каком-то инфоблоке так прописан URL детальки элемента и этот ИБ в индексе. Для каждого элемент генерируется УРЛ детальной страницы. Уберите либо ИБ из генерациия карты, либо в настройках уберите шаблон URL
    Ответ написан
    Комментировать