Задать вопрос
  • Почему лучше использовать события?

    freeExec
    @freeExec
    Участник OpenStreetMap
    Не проверяется, разве в ваших книжках и видео не объясняется. И почему всё что рекомендуется обязательно должно быть про производительность.
    Ответ написан
    1 комментарий
  • Как запустить 5000 потоков параллельно с GET запросами?

    Vamp
    @Vamp
    Распараллелить выполнение в самом воркере с помощью ReactPHP или лучше GuzzleAsync. В таком случае не придется держать 5000 воркеров именно

    Вариант с GuzzleAsync - самый лучший. Под капотом он использует возможности curl_multi_exec, которые позволяют асинхронно отправлять несколько запросов, не плодя при этом лишние процессы. Не уверен конечно, что осилит 5000 параллельных запросов, но даже если и не сможет, то можно разделить 5000 между несколькими воркерами.

    2. "Правильно ли" это вообще делать с помощью PHP или это все таки задача уже других языков которые умеют в параллельное выполнение, корутины? Go, NodeJs?

    У вас нагрузка в основном IO bound, так что не имет значения какой язык выбрать. Главное чтобы он поддерживал IO multiplexing (который поддерживается в PHP через вышеупомянутый curl_multi_exec).

    3. Может уже есть готовые решения в виде библиотек на PHP? Искал, но не нашел

    Guzzle
    Ответ написан
    3 комментария
  • Стоит ли json'ить все и всегда при получении/отправки запроса?

    @Kirill-Gorelov
    С ума с IT
    Нет, не обязательно.
    Зависит от контекста задачи. Я думаю, что и тебе в этом скрытого смысла нету. Делай как удобно.
    Ответ написан
    Комментировать
  • Как сделать почасовой аккаунт?

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

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Комментировать
  • Ошибка в транзакций mysql. как решить?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Для передачи из одной записи в другую никакие транзакции нафиг не нужны.

    UPDATE tablename
    SET balance = balance + CASE WHEN userid = @sender
                                 THEN -@amount
                                 ELSE @amount
                                 END
    WHERE userid IN (@sender, @receiver);
    Ответ написан
    1 комментарий
  • Как создать массив чисел, которые увеличиваются с каждой итерацией?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const arithmeticProgression = ({ length, a1 = 0, d = 1 }) =>
      Array.from(
        { length },
        (n, i) => a1 + i * d
      );
    
    
    const arr = arithmeticProgression({
      length: 10,
      a1: 6,
      d: 3,
    });

    или

    function* arithmeticProgression(a1, d, length) {
      for (let i = 0; i < length; i++) {
        yield a1 + i * d;
      }
    }
    
    
    for (const n of arithmeticProgression(100, 10, 5)) {
      console.log(n);
    }
    
    console.log(Array.from(arithmeticProgression(10, -7, 10)));
    Ответ написан
    Комментировать
  • PARTITION для готовой базы данных?

    sarapinit
    @sarapinit
    Точу водой камень
    Хочу сделать парционирование по дате, но мне постоянно выдает ошибки по типу
    A PRIMARY KEY must include all columns in the table's partitioning function


    Вам в этой ошибке объясняют что не так, непонятно почему вы продолжаете игнорировать ее.
    Если вы хотите сделать партицивание по колонке date, то она должна быть частью первичного ключа. То есть нужно соответствующим образом пересоздать первичный ключ, а затем делать партиции
    Ответ написан
    Комментировать
  • Как передать на бекенд требования к API?

    @Vitsliputsli
    Многие фронтендеры относятся к беку, как к некой обертке для работы с базой данной. Когда такие становится лидом команды и начинают диктовать свои требования беку, начинается ад, проект даже с простым беком превращается в нечто монструозное, разваливающиеся на ходу. Но, так как снаружи бек не виден, руководство считает, что дело в отдельных тупых бек-разработчиках, которые артачатся, не хотят работать и увольняются.
    Судя по вашим фразам, вы скорее всего один из них. Так как уверены, что приложение - это то, что на фронте, что api - это хрень, которая завязана на отображении информации на фронте, что разработчики бека не нужны при разработке архитектуры и вообще пофиг, что они там делают, главное чтобы давали то, что хочет фронт.
    Но, раз вопрос задан, значит сомнения вас посещают. Поэтому: приложение это не только фронт, а зачастую фронт это не самая сложная его часть. Бек - это не обертка над базой данных, и если вы поменяете значение в базе, это не значит, что к примеру, в потоковом вещании сменится кодек (вот, кому-то может и смешно, а мне в такой ситуации ни фига не было весело). С помощью API получают данные, поэтому не важно, что там у вас напроектировали дизайнеры, или как эти данные выводит фронт, API должен быть универсальным и не зависить от того как вы отображаете данные, поэтому, к примеру, бек может вам дать для получения данных несколько универсальных запросов, а не один специальный. В общем, все гораздо сложнее, и ваш вопрос как состыковать фронт и бек перерастает в вопрос как формировать архитектуру проекта, и как управлять командой.
    Ответ написан
    17 комментариев
  • Блекджек на js?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    1. Массивы индексируются с 0 а не с 1
    randomInteger(1,6)


    2. Проверка на проигрыш логически должна быть раньше чем запрос новой карты

    3. Рекурсия имеет ограниченную вложенность, хотя если исправить ошибку №2, то Вы в нее не упретесь, но тем не менее не зачем использовать рекурсию там, где легко можно обойтись циклом:
    const cards = [6, 7, 8, 9, 10, 11];
    
    function randomArrayElement(array) {
      return array[Math.floor(Math.random() * array.length)];
    }
    
    function blackjack() {
      let sum = 0;
      while (sum < 22) {
        sum += randomArrayElement(cards);
        alert(`Ваше число на данный момент ${sum}`);
        if (!confirm('Возьмете еще?')) {
          alert(`Вы спасовали ваше число ${sum}`);
          return;
        }
      }
      alert(`Вы проиграли ваше число ${sum}`);
    }
    
    blackjack();
    Ответ написан
    Комментировать
  • Где ошибка в решении задачи?

    @galaxy
    Вы только в одну сторону проверяете: что число i равно сумме делителей j. У дружественных чисел это свойство взаимно.
    Ответ написан
    3 комментария
  • Очень быстро лить в БД 1 млн. строк в секунду и настолько же быстро читать их. Как лучше осуществить?

    ushliy
    @ushliy
    nix-админ
    ИМХО, про Clickhouse незаслуженно забыли, если нужно хранить и какую-то аналитику использовать. А ведь он реально не тормозит, скорость сравнима с простым сбросом сырых логов на диск. Горячие данные на SSD или вовсе в памяти, во временных таблицах можно держать. Главное, батчами вставлять данные, но мелкие вставки ни одна база по моему не любит. Если для гарантированной доставки кафка или кролик будет юзаться - они нативно поддерживаются, но следует учитывать, что дополнительный слой == дополнительные просадки по времени.

    если нужно хранить условно за час, то и вовсе стоит смотреть на Aerospike, да и вообще, если этот же час нужно держать в близком доступе, он будет полезен. его незаслуженно мало упоминают в русскоязычном сообществе, а по факту он на голову превосходит всякие редисы, даже бесплатная версия. А также он умеет в постоянное хранение, комбинированное и даже с диском, как с блочным устройством напрямую работать, без ФС

    Инфлюкс - он и вовсе про другое, это временные ряды, метрики. Как и Prometheus и Victoriametrics

    P.S.: не ради срача и троллинга, но все же староверов, которые в файловой системе хранить все предлагают, мне хочется спросить: Господа хорошие, а вы свои проекты наверно до сих пор храните в виде Новая_Папка, Новая_Папка1, Новая_Папка2 и т.д.? Нужно все таки смотреть на алгоритмы записи, работы с железом и прочее, они меняются и развиваются. Ваш, да и мой тоже 2007 не вернуть
    Ответ написан
    Комментировать
  • Как найти сумму значений в массиве объектов?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    arr.reduce((acc, c) => acc + c.price, 0) // 8709
    Ответ написан
    1 комментарий
  • Как добавить общую обёртку дочерним узлам?

    0xD34F
    @0xD34F Куратор тега JavaScript
    оборачивается не полностью

    Почему так: childNodes представляет собой динамическую коллекцию, т.е., при добавлении или удалении узлов она обновляется без каких-либо действий с вашей стороны. Поэтому, когда вы добавляете в wrapper нулевой узел, он тут же пропадает из item.childNodes, а у оставшихся узлов позиция уменьшается на единицу - тот, что был первым, становится нулевым, второй первым и так далее. Так что когда for...of переходит к следующему узлу, им оказывается не тот, что изначально имел индекс 1, а расположенный за ним. Бывший первый, а теперь нулевой, оказывается пропущен. Аналогичным образом будут пропущены и все последующие узлы, изначально имевшие нечётные индексы.

    Что тут можно сделать:

    Вариант раз - вместо перебора узлов всегда работать с тем, что имеет нулевой индекс:

    while (item.childNodes.length) {
      wrapper.appendChild(item.childNodes[0]);
    }

    Два - перебирать childNodes от конца к началу:

    for (let i = item.childNodes.length; i--;) {
      wrapper.prepend(item.childNodes[i]);
    }

    Три - перебирать не childNodes, а массив:

    for (const n of [...item.childNodes]) {
      wrapper.append(n);
    }

    А вообще, нет необходимости работать с каждым узлом индивидуально, метод append может принимать несколько параметров, так что переносим сразу всё:

    document.querySelectorAll('.www').forEach(n => {
      const wrapper = document.createElement('div');
      wrapper.classList.add('red');
      wrapper.append(...n.childNodes);
      n.append(wrapper);
    });

    Или, можно и вовсе узлы не трогать, если перезаписывать разметку:

    for (const n of document.getElementsByClassName('www')) {
      n.innerHTML = `<div class="red">${n.innerHTML}</div>`;
    }
    Ответ написан
    Комментировать
  • Как выборочно десериализовать JSON?

    Не вижу никакого смысла парсить частично, но если так сильно хочется:
    JsonDocument
    Utf8JsonReader
    А вот так ими пользоваться:
    https://docs.microsoft.com/en-us/dotnet/standard/s...
    На dynamic даже не смотри, его поддержку из System.Text.Json вырезали
    Ответ написан
    1 комментарий
  • Как исправить ошибки?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    почему slick не является функцией?

    Потому что ('.products__slider') - это просто строка, а у строки нет метода .slick
    Ответ написан
    Комментировать
  • Метод Array.sort() - что такое a и b?

    По тому что это коллбэк для сравнения пар элементов.
    Не нужно завязываться на порядок их появления.
    Нужно вернуть:
    • -1 если a<b
    • +1 если a>b
    • 0 если a==b
    Ответ написан
    Комментировать
  • Как вызвать цепочку ключей в объекте, как функции с возвратом результата в предыдущий ключ?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const Format = (function createFormat(tags) {
      return new Proxy(
        (...content) => tags.reduceRight((acc, n) => `<${n}>${acc}</${n}>`, content.join('')),
        { get: (target, key) => createFormat([ ...tags, key ]) }
      );
    })([]);
    Ответ написан
    Комментировать
  • Почему текст и html код не отображаются на странице при innerHTML?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    У вас тэги не закрыты. Поэтому всё, что после <input - это атрибуты тэга input.
    Ответ написан
    Комментировать