Задать вопрос
  • Как сделать переход между секциями?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Ответ написан
    Комментировать
  • Как решить задачу с минимальным использованием памяти?

    bingo347
    @bingo347 Куратор тега Node.js
    Crazy on performance...
    Готовлюсь к собесу в яндекс
    Рано Вам в Яндекс... задачка то уровня школьных олимпиад...
    Постарайтесь, чтобы решение работало за время k ⋅ log(k) ⋅ n
    А это точно задачка для Яндекса? Она решается за линейное время O(k ⋅ n) если чуть-чуть вникнуть в условия, а логарифмическое решение годно лишь для людей с ЕГЭ головного мозга, там как раз любят решения в стиле "слить все в 1 массив и отсортировать", при использовании qsort/merge-sort как раз будет O(k ⋅ log(k) ⋅ n)

    Если читать из файла по 2 байта, то можно значительно сэкономить память, для формата 1- и 2-значные числа разделенные пробелом этого более чем достаточно.
    Так же выходной массив можно не формировать, а сразу отдавать его на выход.
    P.S. гуглите сортировку подсчетом, а решать задачу за Вас на тостере никто не будет
    Ответ написан
    5 комментариев
  • Клонирование существующего git проекта с последующим сохранением в новом репозитории, как правильно?

    bingo347
    @bingo347
    Crazy on performance...
    например так:
    git clone git@github.com:user-name/base-repo.git project-name
    cd project-name
    git remote remove origin
    git remote add origin git@github.com:user-name/project-name.git
    git push -u origin master
    Ответ написан
    1 комментарий
  • Реально ли заниматься веб разработкой на планшете?

    bingo347
    @bingo347
    Crazy on performance...
    Самой большой проблемой станет отсутствие dev-tools во всех (известных мне) браузерах под android и iOS - iPad сразу в пролете, андроид планшеты можно попробовать прошить каким нить armbian, но скорее всего будут проблемы с драйверами. Но тут есть планшеты на win10, полноценных линуксах и т.д., да и собрать самодельный планшет из малинки - вопрос прямых рук.
    Так же немаловажный момент - это удобство. Маленький экран и тормоза ide из-за ограниченных ресурсов создадут не мало дискомфорта не только на планшете, но и на большинстве бюджетных ноутов.
    Ну и если рассматривать вариант планшет + клавиатура против ноута - ноут опять же будет удобнее.
    Ответ написан
    Комментировать
  • Можно ли сконвертировать пакет deb в пакет eopkg?

    bingo347
    @bingo347
    Crazy on performance...
    Ответ написан
    Комментировать
  • В каких случаях использовать Redux?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    В приложении должен быть один и только один источник правды. На роль такого источника очень хорошо подходят хранилища состояний, предоставляемые такими библиотеками, как redux/mobx/vuex/...
    Если в приложении несколько источников правды, то раньше или позже между ними возникнет конфликт, который приведет к трудноотлаживаемым багам.

    Говоря совсем простым языком, пока некое состояние модуля/компонента сугубо локально, то есть не влияет ни на что за пределами этого компонента - его можно (а зачастую и нужно) хранить локально, но при этом обязательно абсолютно соблюдать инкапсуляцию этого состояния, ибо как только оно "протекло" во вне, оно перестает быть локальным и становится общим, а там уже и до нескольких источников правды недалеко.
    Хранилище состояния же решает эту проблему, становясь тем самым единственным источником правды, которому все могут доверять.
    Ответ написан
    4 комментария
  • Как подключиться по ssh к серверу и отобразить выполняющийся скрипт nodejs?

    bingo347
    @bingo347 Куратор тега Node.js
    Crazy on performance...
    + к другим ответам, конкретно для ноды есть еще решение:
    Запускать через pm2 и потом смотреть логи тоже через него
    Ответ написан
    Комментировать
  • Как сделать нагрузочное тестирование веб-сервера для сравнения PHP+Nginx vs Node.js?

    bingo347
    @bingo347 Куратор тега Node.js
    Crazy on performance...
    В плане отдачи статики - врядли Ваш код хоть на php хоть на node сможет тягаться по скорости с Nginx, иначе Вы не задавали бы подобные вопросы. В любом случае стоит ставить nginx перед любым бэкендом, хоть php хоть node. Помимо раздачи статики еще получите и нормальную работу с tls и балансировку.
    По динамике:
    php - работает только в режиме 1 запрос = 1 процесс, соответственно процессов в памяти будет больше, а значит и больше памяти потребуется и больше процессорного времени будет уходить на switch-context. Так же и очередь ожидающих запросов будет больше ибо php работает синхронно, а это значит что при ожидании io (файлы/бд) Ваш процесс в idle. Самый быстрый вариант сейчас с php-fpm, который работает по протоколу fastcgi и держит пул предзапущенных потоков php. Так же возможна работа по http с apache, но этот вариант явно медленнее и тяжелее чем php-fpm.
    node - может обрабатывать много запросов в 1 процессе засчет асинхронной модели выполнения, соответственно Вам может хватить небольшого количества процессов для очень большой нагрузки. Можно работать с nginx как по протоколу http (есть из коробки) так и fastcgi (при этом по прежнему имея 1 процесс)

    Теперь по нагрузочному тестированию, нужно хорошо разбираться в обоих тестируемых технологиях, знать о возможных оптимизациях и как их обойти. И даже при всем этом Вы не получите адекватных результатов на синтетических примерах... Можно сравнить решение конкретной задачи, но для этого придется разработать решение на обоих технологиях, а оно Вам надо? БольшАя часть задержек в большинстве веб-сервисов падает на базу данных, которая особо не зависит от выбранного ЯП, хотя асинхронная модель тут предпочтительнее...
    Так что пишите на чем умеете
    Ответ написан
    1 комментарий
  • Почему options никак не влияют на showOpenDialog?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Даже просто взглянув на то, как подсветился синтаксис, сразу видно где ошибка:filters: [{name: 'JSON', extensions: 'json}]ковычку не закрыли

    P.S. никогда не используйте remote, 90% выкриков, что electron тормозит - именно из-за того, что люди пользуются этой штукой
    Ответ написан
  • Как правильно подключить JS файл в другом JS файле?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    const script = document.createElement('script');
    script.src = '/path/to/script.js';
    document.head.appendChild(script);
    Ответ написан
    Комментировать
  • Как оптимизировать трансформацию данных?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    У Вас по сути идет Object.keys(properties).map(/* ... */).map(/* ... */) - можно объединить в 1 .map(/* ... */)
    .map((el) => el) - такая операция бесполезная трата процессорного времени
    Постоянный Object.keys(i) там где вообще можно без него
    const transformProductStatusInfo = (items) => items.map(({properties, title, value}) => ({
      title,
      value,
      properties: Object.keys(properties).map(key => ({
        key,
        fieldName: properties[key][0],
        fieldValue: properties[key][1]
      }))
    }));
    Ответ написан
    1 комментарий
  • Как правильно читать JS код?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Просто способ сделать код менее понятным человеку, в строках экранированные символы
    в формате \u#### записывается символ по коду в кодировке utf-16, где # - 16-ричная цифра
    в формате \x## записывается символ по коду в кодировке ASCII, где # - 16-ричная цифра

    Например строка '\u005fp\x6fp' - это закодированный вариант '_pop', в чем можно убедится, просто подставив ее в консоль браузера
    Ответ написан
    Комментировать
  • Как сверстать такие точки?

    bingo347
    @bingo347
    Crazy on performance...
    я бы бордером сделал
    Ответ написан
    1 комментарий
  • Как обновить данные в 'newlevels' computed?

    bingo347
    @bingo347
    Crazy on performance...
    Давайте разберемся по-порядку:
    1. При клике вызывается favorite(x)
    2. favorite диспатчит USERLEVELS_PATCH
    3. USERLEVELS_PATCH отправляет запрос на сервер, логирует результат, но ничего не коммитит

    Из пункта 3 видим, что стор не мутируется - это 1 проблема

    Дальше, какой смысл в геттерах, которые просто оборачивают стейт?
    const getters = {
        levels: state => state.levels,
        userlevels: state => state.userlevels
    }


    Вернемся в компонент, и видим computed newlevels с побочными эффектами... Вы мутируете стейт вне мутации, а вообще в computed (который по факту тот же геттер) не должен мутировать ничего, он должен лишь вычислять значение, которое вернет, например можно сделать так:
    newlevels: function () {
          return this.levels.map(level => {
            return this.userlevels.reduce((acc, userlevel) => {
              // если честно, меня еще дико смущает, что происходит тут... но автору виднее
              if (level.id === userlevel.level) {
                acc['favorite'] = userlevel.favorite
                acc['complete'] = userlevel.complete
                acc['progress'] = userlevel.progress
                acc['userlevel_id'] = userlevel.id
              } else {
                acc['favorite'] = acc.favorite || false
                acc['complete'] = userlevel.complete
                acc['progress'] = userlevel.progress || 0;
              }
              return acc;
            }, {...level});
          });
    }
    Ответ написан
    3 комментария
  • Как в nuxt организовать "режим обслуживания"?

    bingo347
    @bingo347
    Crazy on performance...
    Делать сборку в папке отличной от папки прода, если сборка занимает дольше 200мс (у nuxt она всегда дольше будет...), а после сборки синкать в прод папку.

    Например у меня:
    generate собирает в папку dist, а nginx смотрит на папку dist-public
    в pregenerate таске npm я спокойно делаю rm -rf ./dist
    в postgenerate таске npm я делаю rsync -rd --delete dist/ dist-public
    Как итог, пока идет сборка - на проде старая версия, когда сборка завершилась rsync делает хардлинки, что происходит очень быстро и на проде оказывается почти моментально новая версия
    Ответ написан
    1 комментарий
  • Как объединить отрезок кода в одну функцию?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    const checkbox2tabMap = {
      link5: 'tab1',
      link6: 'tab2'
      // ... продолжите сами
    };
    function onCheckboxChange(event) {
      const tab = document.getElementById(checkbox2tabMap[event.target.id]);
      if(!tab) { return; }
      tab.style.display = event.target.checked ? 'block' : 'none';
    }
    Object.keys(checkbox2tabMap).forEach(
      id => document.getElementById(id).addEventListener('change', onCheckboxChange)
    );
    Ответ написан
    Комментировать
  • Терминал `node ./src/index.ts` SyntaxError?

    bingo347
    @bingo347 Куратор тега TypeScript
    Crazy on performance...
    поставьте (можно глобально)
    https://www.npmjs.com/package/ts-node
    и запускайтесь с него
    Ответ написан
  • Как начинающему веб программисту, правильно начать проектировать базы данных?

    bingo347
    @bingo347
    Crazy on performance...
    1. Почитайте про 5 нормальных форм реляционных БД
    В реальной жизни достаточно придерживаться 3НФ (которая включает 1 и 2), но знать стоит все 5
    2. Почитайте про индексы и ключи, особенно про составные индексы. Поймите на базовом уровне как работают основные: BTree, HashMap, полнотекстовый поиск, фильтр Блума. Так же можете глянуть про Foreign Key (хоть, если память не изменяет, MySQL его и не умеет)
    3. Почитайте про особенность работы доступных движков СУБД. Стоит разбираться, что лучше подходит для записи, а что для чтения.
    Ответ написан
    Комментировать
  • Как обновить страницу chrome через консоль?

    bingo347
    @bingo347
    Crazy on performance...
    хм... Chrome DevTools Protocol, правда совсем на баше не получится, но можно на:
    ноде: https://www.npmjs.com/package/puppeteer
    расте: https://crates.io/crates/headless_chrome
    питоне: https://pypi.org/project/pyppeteer/
    и наверняка на много чем еще...
    Ответ написан
    Комментировать
  • Сколько ячеек памяти будет занято при инициализации указателя адресом литерала?

    bingo347
    @bingo347
    Crazy on performance...
    Во-первых, 1 ячейка памяти всегда имеет 1 фиксированный размер - машинное слово (на 64 битной архитектуре это будет 8 байт).
    Во-вторых, компилятор си достаточно умный, что бы понимать, что сложные структуры данных вроде массивов и структур могут хранить все свои данные в 1 ячейке памяти, хотя могут и состоять из элементов меньше машинного слова. Но при этом данные относящиеся к разным структурам будут записаны в разные ячейки, даже если где-то окажется пустота.
    В-третьих, массивы в си всего лишь сахар над указателями и арифметикой над указателями.
    В-четвертых, не забываем, что сам указатель занимает машинное слово.

    Отсюда делаем вывод, что оба представленных выражения полностью идентичны и оба займут 2 ячейки памяти, так как char занимает 1 байт, а массив из 6 char (5 букв и \0 символ) вполне влазит в 1 машинное слово, а указатель всегда имеет размер машинного слова. Вот если бы в строке было 8 символов (и последний не \0 символ), то понадобилось бы уже 3 ячейки памяти.
    Ответ написан
    1 комментарий