• Индексация идёт уже 2 недели, в чем у меня ошибка?

    @rPman
    значит узкое место почти наверняка диск.

    Пальцем в небо, файловая система на которой таблеспейсы лежат какая? случайно не cow (btrfs/zfs/xfs)? с ними отвратительно работают базы данных, так как частые записи в файл генерируют сильную фрагментацию. В этом случае перед тяжелой обработкой хотя бы дефрагментируй файлы базы и отключи cow фичу на таблеспейсах

    неплохим тюнингом может оказаться (на выбор):
    * разместить базу в ram диске (буквально, залить на сервер в облаке, обработать данные, залить назад, работая напрямую с таблеспейсами, но версия софта должна совпадать до последней цифры)
    * разместить базу целиком на ssd (даже если это будет потребительский и дешевый)
    * добавить в систему ssd кеш для hdd с помощью например bcache (включенный на запись), правда для линейной обработки базы это может дать мало пользы, но вообще это неплохой способ на порядок поднять производительность за дешево (в одном месте я использовал фичу virtualbox со снапшотами в файл, есть и у kvm, когда последующие записи шли не на исходный образ а на другой диск, и он ssd)
    * разместить таблеспейс для индексов (а может и каждую таблицу отдельно) на другом физическом устройстве (hdd, ssd или даже в ram), требования к размеру тут обычно низкие, ключевое слово - исключить последовательные чтения/записи на одно устройство.
    * разместить журнал (например ext4) на ssd диск (хватит пары гигабайт) или по хардкору даже отключить его (очень опасно, можно получить кашу из данных при сбое питания, но как временное решение пока идет долгая операция, при наличии всех бакапов, оправдано) - наименьшая оптимизация, но при частых мелких записях это заметно
    Ответ написан
  • Как правильно передать с помощью fetch методом POST?

    @zkrvndm
    Боты, парсеры, расширения
    Не set, а append надо писать! Замените set на append.
    Ответ написан
    8 комментариев
  • В чем превосходство Typescript?

    bingo347
    @bingo347 Куратор тега JavaScript
    Ищу TypeScript разработчика
    Как бы это странно не звучало, но одно из главных преимуществ TypeScript - это ускорение разработки в несколько раз. Да, когда еще ничего нет - разработка незначительно замедлится, так как помимо логики нужно описать еще и типы. Но это только в начале. И это не только возможность писать большую часть кода с помощью автодополнения. Поддержка существующего кода занимает в десятки раз больше времени, чем его начальное написание. Стоит ли вложить несколько лишних часов на старте, чтоб сэкономить в последствии месяцы? Как по мне стоит.

    Еще одним огромным плюсом является возможность проектировать на типах. Познав дзен TypeScript'а я перестал пользоваться UML, так как типы дают мне ту же наглядность, но при этом еще и сокращают время, так как типы - это уже код. Ну и источник правды остается один. Бизнес требования выраженные в типах не дают отклонится от них при написании логики, исключая возможность неправильной трактовки задачи. Перенеся задачу в типы, я могу обсудить ее с коллегами и исправить неточности еще до написания кода, что опять же сильно экономит время.

    Ну и отвчечу на некоторые Ваши сомнения:
    TSLint в VSCode прям жутко тугой
    TSLint официально deprecated, вместо него стоит использовать плагин к eslint, заодно можете мой конфиг попробовать.

    Типы? Есть JSDOC
    JSDoc в плане типов не умеет и 10% того, что умеет TypeScript. Кроме того, никто в здравом уме не пишет JSDoc на приватную логику, а значит проверки типов там не будет. JSDoc не гарантирует корректность рефакторинга, а вот благодаря TypeScript я, опять таки, точно не забуду обновить JSDoc.

    многие библиотеки nodejs не имеют типов
    может лет 5 назад так и было, но сейчас встретить библиотеку без типов - скорее исключение. Если библиотека популярная, но не предоставляет типов, скорее всего их уже написал кто-то другой, достаточно просто установить одноименный модуль из npm скоупа types и все будет работать само.

    Поддержка браузерами скомпилированного кода? Да какбы почти весь JS имеет поддержку 95%+, тот же Babel уже забыл когда использовал.
    Вообще это не основная задача компилятора TypeScript, а опциональная возможность. И babel + preset-env с ней справляются гораздо лучше. И никто не мешает использовать их вместе. А еще думаю вопрос времени, когда кто-то напишет оптимизатор кода использующий информацию о типах из TS.

    Примерно в каждой второй есть инстансы, на которые смотришь - и чешешь репу - а как называется тип этой переменной в @types/?
    import {someObject} from 'some-library';
    
    type TypeFromValue = typeof someObject;
    const valueCopy: TypeFromValue = {
        ...someObject,
        type: 'overrides',
        with: 'type check',
    };
    и кстати, вот пример того что JSDoc типы не умеют.

    //@ts-check
    и почти везде останется бесполезный any.

    P.S. удачи такие типы на JSDoc описывать
    P.P.S. Еще прелести современного TypeScript невозможные у...
    Ответ написан
    8 комментариев
  • Как преобразовать строку "12.0" в число при этом не убирая ноль после точки?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Число, оно и в Африке.. игнорирует нули в конце.

    Считать лучше числа. Потом отображать строки, сделанные из них, с нужной точностью:
    let str = "12.0";
    let num = Number(str);
    
    let result = 0.01 + 2 * num;
    let resultStr = result.toFixed(1); // "24.0", а 1/100 курит в сторонке
    Ответ написан
    Комментировать
  • Как менять класс другого элемента следя за display через css стили основного элемента?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Используйте классы для управления состоянием. И классы меняйте кодом.

    .menu {
      opacity: 0; /* по умолчанию скрыто */
    }
    .menu-opened {
      opacity: 1; /* при добавлении класса - открыто */
    }
    
    @media (min-width: 992px) {
      .menu {
        opacity: 1; /* на больших экранах – всегда открыто */
      }
    }


    //...
    burger.classList.toggle('open');
    burger.classList == 'open'
      ? menu.classList.add('menu-opened')
      : menu.classList.remove('menu-opened');


    Кстати, что это такое: burger.classList == 'open'?
    Проверку так делают:
    burger.classList.contains('open');
    Ответ написан
    Комментировать
  • Как правильно оценить сложность алгоритма O(n)?

    @Mercury13
    Программист на «си с крестами» и не только
    f(x) = O(g(x)) при x→y — это так называемый символ Ландау.
    И означает, что при x, достаточно близких к y, f(x)<k·g(x). Так что 2x или 1000x — извините, не важно.

    Отсюда же запись O(log n) — ведь разные логарифмы отличаются на константу, которую символы Ландау съедают.

    Чем символы Ландау интересны программистам?
    1. Кэшами, быстрым процессором, «хитрым» программированием и прочим на больших наборах данных можно выиграть, например, в разы. Порядком сложности алгоритма — намного, намного больше.
    2. Пока закон Мура действовал, объёмы данных росли экспоненциально — так что быстро доходило до того, что программу начинали использовать на наборах данных, для которых она просто не предназначалась.
    3. Практически приемлемые алгоритмы обычно имеют небольшую сложность — например, до O(n³). И, например, линейный алгоритм за приемлемое время обработает миллионы элементов, n log n — сотни тысяч, n² — тысячи, n³ — сотни.
    4. Программисты отлаживают на небольших наборах данных, которые можно обработать вручную. Так что разница между отладочными и боевыми данными бывает большая — а значит, порядок сложности должен влиять сильнее, чем остальные факторы.
    Ответ написан
    1 комментарий
  • Где хранить большой массив объектов в реакт приложении?

    Zraza
    @Zraza
    Помог ответ? Отметь решением!
    Мой взгляд, на истину не претендую:

    Я сторонник того, что на клиенте вообще не стоит хранить большие объемы данных. Т.е. запрашивает только те, которые нам нужны для работы/отображения в конкретный момент. Все фильтры/сортировка/пагинация на стороне сервера. Понятно, что это не всегда возможно, поэтому идем дальше...

    В хранении большого объема данных в редаксе не вижу ничего плохого, если они редко меняются. Если часто - неприятно, нужно поддерживать иммутабельность, затраты на garbage collector.
    Плюсы - быстрый доступ до данных, т.к. хранятся они в памяти.
    Минусы - поддержка иммутабельности и затраты на память.

    Если уж отходить от редакса - можно воспользоваться каким-то стором на основе мутабельных объектов, например mobx.

    Если всё это держать в памяти не хочется - то действительно можно взять IndexedDB. Хранится на диске, между перезагрузками сохраняется, асинхронное апи, есть индексы по полям. Нужно учесть, что на браузерах в режиме инкогнито может не работать или работать ограниченно (для предотвращения отслеживания).

    Ну и, конечно, вопрос в объеме данных. Просто 2к объектов - не то, чтобы сильно много. Вопрос, насколько тяжелых объектов.
    Ответ написан
    2 комментария
  • Как хранят глобальные методы(функции) в React?

    firedragon
    @firedragon
    Senior .NET developer
    Оформляете так
    function calc(a,b,c){
        return (a * b + c) / 20
    }
    export default calc;


    подключаете так
    import calc from '../code/calc'
    Ответ написан
    6 комментариев
  • Почему takeUntil для отписки Observable лучше размещать в конце pipe?

    vanchelo
    @vanchelo
    Мне нравится как описано в этой статье https://ncjamieson.com/avoiding-takeuntil-leaks/

    Подробнее про подписки https://medium.com/ngx/why-do-you-need-unsubscribe...
    Ответ написан
    Комментировать
  • Как прибавлять к сегодняшнему числу еще 7?

    Если много с датами нужно работать на проекте, попробуйте использовать
    https://moment.github.io/luxon/index.html
    Ответ написан
    3 комментария
  • Знак _ в стрелочных функциях. Можно ли использовать?

    Stalker_RED
    @Stalker_RED
    Вместо _ можно использовать о_0

    const arrowInHead =o_0=> Marth.random;

    ...и код становится веселее!
    Ответ написан
    Комментировать
  • Знак _ в стрелочных функциях. Можно ли использовать?

    Kozack
    @Kozack Куратор тега JavaScript
    Thinking about a11y
    Насколько я знаю, _ в JS является валидным именем переменной, такую переменную можно создать, обращаться к ней и т.д. Так получается что я просто передаю в ф-цию неиспользуемую переменную?? Тоже самое как сделал бы a => { ... } ??
    Именно так.

    Лично я отдаю предпочтение () => { ... } по ряду причин:
    1. Нет неиспользуемых переменных. Нет ругательств со стороны линтеров. Для рантайма это мизерное, но всё таки, улучшение производительности
    2. Если говорить про TS, то тут вообще не рекомендуется синтаксис a => { ... }, только (a) => { ... }. И банально проще, когда у тебя весь код по разным проектам в одном стиле.
    3. Мне так больше нравится чисто эстетически.
    Ответ написан
    9 комментариев
  • При работе одного скрипта ложиться весь сайт, как сделать правильно?

    dima9595
    @dima9595
    Junior PHP
    По крону; в другом потоке; используя очереди...
    Ответ написан
    Комментировать
  • Должен ли программист думать о дизайне?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Дизайн программисту знать не нужно. Но если вы занимаетесь разработкой графического интерфейса, то стоит следовать общепринятым практикам и учитывать UX.
    Ответ написан
    Комментировать
  • Нужна ли минификация кода при активном GZIP?

    BojackHorseman
    @BojackHorseman
    ...в творческом отпуске...
    а кому из пользователей нужно читать html-код вашей страницы?

    делайте и не сомневайтесь даже
    Ответ написан
    Комментировать
  • Как написать type guard для отдельного поля интерфейса?

    Lynn
    @Lynn
    nginx, js, css
    interface PostAttachVideo {
      type: 'video'
      attach: AttachVideo
    }
    
    interface PostAttachAudio {
      type: 'audio'
      attach: AttachAudio
    }
    
    type PostAttach = PostAttachAudio | PostAttachVideo
    
    function isAudio(attach: PostAttach): attach is PostAttachAudio {
        return attach.type === 'audio';
    }


    песочница
    Ответ написан
    Комментировать
  • Почему по-умолчанию в Angular нет hot-reload?

    @CoyoteSS
    Попробуй запустить dev сборку с флагом --hmr.
    По умолчанию HMR в Angular CLI отключён.

    ng serve --hmr
    Ответ написан
    Комментировать
  • Как масштабировать сайт под маленькие устройства?

    @ned4ded
    Верстка, Фронтенд
    Это решит проблему:
    <meta name="viewport" content="width=device-width">


    TL;DR

    "Портативные устройства часто рендерят страницы в виртуальном окне, называемым вьюпортом, ширина которого обычно больше ширины экрана" - mdn. Для обхода этого поведения используется свойство width мета-аттрибута viewport, равное значению device-width: content="width=device-width". В таком случае ширина вьюпорта будет равна ширине экрана устройства.

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

    Другое свойство, используемое тобой в примере, - initial-scale, устанавливающие зум вьюпорта в определенное значение при первичном запуске сайта. Значение может варьироваться от 0.1 до 10. При 1 зум равен ширине вьюпорта (можно сказать, что в данном случае зум отсутствует). По дефолту же зум равен значению auto, который высчитывается путем деления исходного значения вьюпорта на значение реально отрендеренного холста, что позволяет отобразить весь холст на экране (формула чуть сложнее). В твоем случае зум равен ширине экрана (т.к. ширина вьюпорта равна ширине экрана через width=device-width), т.е. 320px. Когда ты устанавливаешь ограничение на минимальную ширину тела документа, равную, например, 480px, то по дефолту у тебя будет горизонтальный скролл при зуме равном 1. Это логичное поведение, заложенное в спеке. Это как пытаться посмотреть сайт с ограничение в 1600px в ширину с ноутбука, там тоже будет горизонтальный скролл.

    Чтобы обойти это поведение достаточно установить initial-scale в значение auto, или убрать это свойство вообще, т.к. это значение по дефолту.
    Ответ написан
    Комментировать
  • Почему false срабатывает как true?

    FanatPHP
    @FanatPHP
    Помогаю и новичкам, и старичкам
    Строка false, разумеется приводится к true.
    В РНР будет ровно то же самое, условие if('false') выполнится.

    А чтобы false воспринималось как булево значение, а не как строка, надо либо сказать твоему яваскрипту, что он ждёт специальным образом кодированные данные, либо РНР - что он отправляет не HTML, а некий другой формат.

    В общем, обилие комментаторов с советами вида "пальцем в небо" наглядно показывает уровень понимания средним пользователем похапе своих действий.

    В целом направление мысли верное - система воспринимает переданное значение как строку, а не как булево значение. Но на этом мысль и останавливается.
    Хотя при некотором усилии можно было бы продолжить и рассудить - что поскольку протокол НТТР чисто текстовый, то никакие булевы значения через него по умолчанию передать нельзя. А так же объекты, массивы, и прочие типы данных.
    И для того чтобы сделать это возможным, был придуман специальный формат кодирования. Который позволяет передавать данные различнызх типовв, и который автор, несомненно, уже применяет (вследствие чего, собственно, из булева значения и получается строка false).

    То есть единственным недостающим звеном в этой головоломке является контекст, в зависимости от которого яваскрипт будет воспринимать строку false либо как строку, либо как булево значение. То есть нужен способ РНР и яваскрипту договориться, в каком формате они обмениваются данными. Стандартным способом является НТТР заголовок Content-type. Который скажет браузеру, что данные не в дефолтом формате HTML, а в другом.

    Либо как вариант, можно прямо при вызове функции ajax явно задать, в каком формате придут данные. Если озаботиться изучением документации по этой функции.
    Ответ написан
    Комментировать