Задать вопрос
  • Выбор Bitrix для бэкенда и ReactJS для фронта - хорошо или плохо?

    Adamos, вот именно - вы выбираете что с чем сравнивать.
    Что вам мешает удалить модуль iblock который так вам не нравится в таком случае, и сравнивать битрикс без него?
    В чем проблема?
    Получается вы воспользовались возможностью битрикс которой нет в другом фреймворке и ругаете ее за то что она плохая? Если я напишу такой же плохой, по вашему мнению, модуль для ларавель это испортит весь ларавель?
  • Выбор Bitrix для бэкенда и ReactJS для фронта - хорошо или плохо?

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

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

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

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

    Давайте сейчас на Laravel выстроим систему аналогичную по возможностями Битрикс CRM и посмотрим сколько полей будет у вас в таблицах
  • Выбор Bitrix для бэкенда и ReactJS для фронта - хорошо или плохо?

    битрикс - это низкопроизводительный и нестабильный хлам с ужасной архитектурой,

    Это все оценочные суждения. А я просил обоснование - плохо, то-то вот потому-то.
    Например: битрикс тормозит потому, что хранит все свойства в одной таблице БД, а про ИБ 2.0, hlib и D7 я не слышал ничего - вот это было бы похоже на обоснование и я бы знал какие ссылки кинуть на опровержения.

    состоящий из говнокода чуть более, чем полностью

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

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

    Сомнительное утверждение, особенно на фоне состоящий из говнокода чуть более, чем полностью.
    Создатели битрикса - это очень растяжимое понятие.
  • Выбор Bitrix для бэкенда и ReactJS для фронта - хорошо или плохо?

    Сергей Горностаев, обоснуй.
    99% претензий к битриксу это претензии к ужасающим штатным компонентам и их шаблонам, т.е. по сути к CMS, а не к фреймворку.

    В данном случае люди предлагают делать фронт на реактивной библиотеке и очевидно не собираются использовать ни штатные компоненты, ни штатные шаблоны, т.е. по сути все то за что ругают битрикс.
    Так что связака вполне оправдана и никаких проблем я тут не вижу, если еще разрабы и умеют с битриксом работать, то тем более. Хотя я конечно выбрал бы Vue для фронта.
  • Есть ли инструменты по подбору уравнения под график?

    Suntechnic
    @Suntechnic Автор вопроса
    Я в курсе, спасибо. Но я хотел бы просто "нарисовать" в браузере мышкой и получить результат. Я именно про такой инструмент.
  • Как массово отметить у свойств товаров "Показывать в умном фильтре"?

    Zikdelk, что-то мне сложно представить для чего такое может быть нужно
  • Как массово отметить у свойств товаров "Показывать в умном фильтре"?

    Если свойств около 5000, то лучше подумать о том как их удалить вообще.
  • Почему не работает реврайт?

    Suntechnic
    @Suntechnic Автор вопроса
    dodo512, добавьте это в ответ - действительно виной был кэш по-видимому - в другом браузере редирект сработал и следовательно правило рабочие.

    Т.е. я никак средствами апач не могу сделать так чтобы /catalog/ выглядел для сайта как /catalog/all/ ?
  • Почему не работает реврайт?

    Suntechnic
    @Suntechnic Автор вопроса
    dodo512, именно это я и ожидаю.
    Но в /bitrix/urlrewrite.php, уходит /catalog/ в ваших терминах.
    Если объяснять вообще на пальцах то я ожидаю, что при /catalog/ в URL, в REQUEST_URI в массиве $_SERVER будет значение "/catalog/all/", а если в параметры я добавлю R=301 то произойдет редирект на /catalog/all/

    Но ни первого, ни второго не происходит.
  • Почему не работает реврайт?

    Suntechnic
    @Suntechnic Автор вопроса
    dodo512, c L то же самое - это просто одна из версий.
    Файл стандартный от битрикса:
    Options -Indexes 
    ErrorDocument 404 /404.php
    
    <IfModule mod_php5.c>
      php_flag session.use_trans_sid off
      #php_flag default_charset UTF-8
      #php_value display_errors 1
    </IfModule>
    
    <IfModule mod_php7.c>
      php_flag session.use_trans_sid off
      #php_flag default_charset UTF-8
      #php_value display_errors 1
    </IfModule>
    
    <IfModule mod_rewrite.c>
      Options +FollowSymLinks
      RewriteEngine On
      
      RewriteCond %{REQUEST_URI} ^/catalog/$ [NC]
      RewriteRule ^(.*)$ /catalog/all/ [NC,L]
      
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-l
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$
      RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]
      RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
    </IfModule>
    
    <IfModule mod_dir.c>
      DirectoryIndex index.php index.html
    </IfModule>
    
    <IfModule mod_expires.c>
      ExpiresActive on
      ExpiresByType image/jpeg "access plus 3 day"
      ExpiresByType image/gif "access plus 3 day"
      ExpiresByType image/png "access plus 3 day"
      ExpiresByType text/css "access plus 3 day"
      ExpiresByType application/javascript "access plus 3 day"  
    </IfModule>
  • Битрикс АПИ. Как вывести по одному элементу из разных разделов инфоблока?

    Владимир, а какой тут алгоритм? Буквально вот так в лоб:
    $arSelect = Array("ID", "IBLOCK_ID", "NAME", "PROPERTY_FILE");//IBLOCK_ID и ID обязательно должны быть указаны,
    $lstScetionsIDs = array(3768, 3769, 3770, 3771, 3772, 3773, 3774, 3775, 3776); //разделы
    $arFilter_old = Array(
      "IBLOCK_ID"=>390,   // id инфоблока
      'ACTIVE' => 'Y',  // фильтруем по активности
    );
    
    $arOrder = Array('ID' => 'ASC');
    
    
    foreach ($lstScetionsIDs as $SECTION_ID) {
      $arFilter_old['SECTION_ID'] = $SECTION_ID;
      $res = CIBlockElement::GetList($arOrder, $arFilter_old, false, Array("nTopCount"=>1), $arSelect);
      $arElement = $res->GetNext();  
      echo '<a href="'.CFile::GetPath($arElement["PROPERTY_FILE_VALUE"]).'">'.$arElement["NAME"].'</a><br>';
    }
  • Как избежать спагетти-кода в result_modifier?

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

    Это очень важное замечание - попадались проекты, в которых наследования было столько что пока продерёшься сквозь них - сойдёшь с ума.
    С одной стороны сложно их было все назвать бесполезными, как в данном примере - для каждого из них можно было найти оправдание, но такое иногда складывается ощущение, что люди пишут ООП ради ООП и считают чем больше они всего отнаследуют, тем круче их код.
    Может быть, но рефакторить это мучительно больно, когда открываешь класс, за классом и видишь там очередное наследование. По факту получается то же спагетти, только ООП.
  • Как избежать спагетти-кода в result_modifier?

    Да по сути ничем.
    А чем он вам не нравится?
  • Как подключить базу данных к восстановленному сайту 1С-Битрикс?

    Adamos, ну почему же - если открыть все порты и на root'а поставить пароль 0000 то вполне возможно заведется. Много чего заведется само по себе.
  • Почему могут быть медленными файловые операции PHP?

    Suntechnic
    @Suntechnic Автор вопроса

    Этот тест показывает не столько работу диска, сколько работу php с файлами: создается, исполняется, удаляется большое число простых файлов. Данный показатель зависит от производительности файловой системы и эффективности работы php акселератора. В целом хорошо показывает, как работает php на данной конфигурации (без учета работы базы).


    Да, да. Собственно меня и удивило что PHP так медленно работает на таком быстром диске.
    Я знаю некоторые проблемы - например когда указана open_basedir работа php с файлами может замедлятся. Но что ещё может влиять?
  • Почему могут быть медленными файловые операции PHP?

    Suntechnic
    @Suntechnic Автор вопроса
    edo1h, ясно.
    Я сделал понятным мне способом:
    dd if=/dev/urandom of=/random_file bs=8G count=1 iflag=fullblock


    Вот результат:
    # fio -ioengine=libaio -fsync=1 -direct=1 -name=test -bs=4k -iodepth=1 -rw=write -runtime=60 -filename=/random_file 
    test: (g=0): rw=write, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
    fio-3.7
    Starting 1 process
    Jobs: 1 (f=1): [W(1)][100.0%][r=0KiB/s,w=226MiB/s][r=0,w=57.9k IOPS][eta 00m:00s]
    test: (groupid=0, jobs=1): err= 0: pid=55915: Mon Jul 19 01:39:33 2021
      write: IOPS=49.4k, BW=193MiB/s (202MB/s)(8192MiB/42472msec)
        slat (usec): min=2, max=10811, avg= 3.88, stdev= 9.37
        clat (nsec): min=419, max=3429.5k, avg=10629.53, stdev=8385.86
         lat (usec): min=9, max=10861, avg=14.61, stdev=12.76
        clat percentiles (nsec):
         |  1.00th=[ 7968],  5.00th=[ 8096], 10.00th=[ 8256], 20.00th=[ 8512],
         | 30.00th=[ 8640], 40.00th=[ 8640], 50.00th=[ 9024], 60.00th=[ 9536],
         | 70.00th=[ 9792], 80.00th=[10304], 90.00th=[12224], 95.00th=[15936],
         | 99.00th=[43776], 99.50th=[48896], 99.90th=[64256], 99.95th=[80384],
         | 99.99th=[96768]
       bw (  KiB/s): min=120344, max=236144, per=100.00%, avg=201888.17, stdev=27028.64, samples=82
       iops        : min=30086, max=59036, avg=50472.01, stdev=6757.15, samples=82
      lat (nsec)   : 500=0.01%, 750=0.01%, 1000=0.01%
      lat (usec)   : 2=0.01%, 4=0.01%, 10=75.35%, 20=21.14%, 50=3.09%
      lat (usec)   : 100=0.39%, 250=0.01%, 500=0.01%, 750=0.01%
      lat (msec)   : 2=0.01%, 4=0.01%
      fsync/fdatasync/sync_file_range:
        sync (nsec): min=23, max=19393, avg=61.01, stdev=60.31
        sync percentiles (nsec):
         |  1.00th=[   40],  5.00th=[   42], 10.00th=[   43], 20.00th=[   46],
         | 30.00th=[   48], 40.00th=[   50], 50.00th=[   52], 60.00th=[   58],
         | 70.00th=[   62], 80.00th=[   66], 90.00th=[   83], 95.00th=[  109],
         | 99.00th=[  161], 99.50th=[  199], 99.90th=[  402], 99.95th=[  652],
         | 99.99th=[  884]
      cpu          : usr=14.62%, sys=31.89%, ctx=4194226, majf=0, minf=34
      IO depths    : 1=200.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
         submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
         complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
         issued rwts: total=0,2097152,0,2097151 short=0,0,0,0 dropped=0,0,0,0
         latency   : target=0, window=0, percentile=100.00%, depth=1
    
    Run status group 0 (all jobs):
      WRITE: bw=193MiB/s (202MB/s), 193MiB/s-193MiB/s (202MB/s-202MB/s), io=8192MiB (8590MB), run=42472-42472msec
    
    Disk stats (read/write):
        md126: ios=18/4269683, merge=0/0, ticks=0/0, in_queue=3416331696, util=100.00%, aggrios=9/2181156, aggrmerge=0/41866, aggrticks=1/17316, aggrin_queue=17318, aggrutil=97.13%
      nvme0n1: ios=17/2181156, merge=0/41866, ticks=3/17507, in_queue=17510, util=97.13%
      nvme1n1: ios=1/2181156, merge=0/41866, ticks=0/17126, in_queue=17126, util=97.11%

    Не все могу интерпритировать тут, но мне кажется неплохо.