Задать вопрос
  • Ошибка Uncaught TypeError: ball.move is not a function?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Prop.__proto__.move поменять на Prop.prototype.move
    Prop.__proto__.check_collision поменять на Prop.prototype.check_collision

    Получше изучите прототипы, и чем prototype отличается от __proto__
    Ну и обратите внимание на es6 class, позволяющий работать с прототипами максимально просто и правильно
    Ответ написан
    Комментировать
  • VS Code в autocomplete не отображает методы и функции из lib.dom для this...?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Главное что нужно понять, что из коробки в VSCode подсказки в JS основаны на TypeScript, их можно расширить плагинами, но основа все равно останется именно такой.
    Так как в JS статических типов нет, VSCode пытается вывести тип с помощью TypeScript, но TypeScript делает это далеко не идеально.

    В случаеconst cnt = document.querySelector('.container')тип можно вывести однозначно - это тип Element, а все потому, что TS знает, что значение в const точно не изменится и просто берет возвращаемый тип для document.querySelector и выводит подсказки для него.

    В случае же с this.$element значение может поменяться, в том числе где-то из вне, и JS вполне позволяет изменить его на что угодно, поэтому выводится тип any, для которого подсказок нет.

    Я не буду Вас агитировать перейти на TypeScript, как и расписывать, насколько он экономит время при разработке чего-либо сложнее 10-20 строчек кода. Я просто подскажу, что TS в VSCode можно врубить и для обычных JS файлов, даже не имея tsconfig.json, достаточно просто добавить комментарий // @ts-checkв начало файла, и Вы получите сразу и больше подсказок, и некоторый контроль типов. Так же добавлю, что в js файлах можно аннотировать типы через jsdoc:
    // @ts-check
    export class Page {
        constructor(selector, options) {
            /** @type Element */    
            this.$element = document.querySelector(selector)
            this.$element // тут работают подсказки после точки для типа Element
        }
    }
    Ответ написан
    1 комментарий
  • TypeScript интерфейсы доступ из глобального пространства?

    bingo347
    @bingo347 Куратор тега TypeScript
    Crazy on performance...
    Вы можете указать в поле types любой пакет установленный в node_modules или в node_modules/@types у которого указано поле types в package.json

    Так же можно просто бросить файл с любым именем с расширением .d.ts в корень проекта (там где tsconfig.json), но с таким именем, чтоб рядом не лежало одноименного .js файла, например global.d.ts при отсутствующем global.js
    Любые декларации в таком файле будут глобальны.
    Так же в нем можно задекларировать модули для импорта, например для css-modules:
    declare module '*.css' {
      const classes: Readonly<Record<string, string>>;
      export default classes;
    }
    Ответ написан
    1 комментарий
  • Стоит ли использовать webpack в каждом проекте?

    bingo347
    @bingo347
    Crazy on performance...
    Помимо webpack есть еще rollup и он просто без вариантов для сборки библиотек, так как выход - один модуль без оберток, ну и es-modules умеет
    Ну и для небольших проектов очень хорош, особенно в связке с google closure compiler - бандлы получается очень компактными.
    Webpack же в свою очередь имеет несколько больше возможностей, в частности для различного рода автоматизации, за счет своей очень мощной системы плагинов, позволяющей вмешаться практически в каждый шаг процесса сборки. Ну и с разделением на чанки у него по лучше будет.

    В общем, для библиотек и маленьких проектов - rollup, для средних и больших проектов - webpack.
    Совсем без бандлера можно разве что под нодой нормально жить. И хотя современные браузеры и электрон умеют в модули, но бандлер становится еще и вопросом производительности, как минимум выкидывая мертвый код (если конечно ему не мешать).
    Ответ написан
    Комментировать
  • Как можно другим способом найти сумму объекта?

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

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...

    массив нужно объявить на верхнем уровне
    Ответ написан
    Комментировать
  • Выигрывает ли nodejs в производительности php на примере обычного сайта?

    bingo347
    @bingo347 Куратор тега Node.js
    Crazy on performance...
    В общем случае все зависит от того как написать, можно и на ноде понаписать таких тормозов, что хорошо оптимизированный php, особенно 7, будет просто летать на фоне этого.
    Ну и в большинстве серверных приложений основная нагрузка приходится на БД, а значит и скорость в большей части будет зависеть от нее.
    Но за счет асинхронной работы нода однозначно выиграет у php по потребляемым ресурсам, что в конечном итоге так же может сказаться на производительности.
    Ответ написан
    8 комментариев
  • Почему пустой $_POST при запросе по fetch()?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    В поле body можно положить строку, FormData, Blob или ArrayBuffer, у Вас же судя по всему кладется обычный объект. Нужно добавить трансформацию.

    Ну и стоит получше разобраться в промисах, в частности
    fetch(object.options.url,settings).then(function(response){    
                            response.json();
                        })
                        .then(function(body){
                            console.log(body); // здесь всегда будет undefined, независимо от ответа
                        })
    подумайте почему так

    P.S.
    var db = event.target.result,storage,transaction,data;
    руки бы оторвал...
    Ответ написан
  • Как понять такую запись в js?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Такая запись называется быдлокод.
    Конкретно если записать в свойство length массива объект, то будет ошибка:
    RangeError: Invalid array length
    Но вероятно к моменту выполнения данной строки в obj уже не объект, динамическая природа js плюс километровые функции, которые обычно пишутся быдлокодерами, вполне такое позволяют.
    Ответ написан
    Комментировать
  • Как найти все символы после точки?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Пожалуй пора писать статью на хабр о вредности RegExp. Ваше непонимание, что происходит в простейшей регулярке, лишь доказывает это. А Вам, как и многим другим до Вас отвечу, что Вам не нужен RegExp, ибо это очень дорого, как в вычислении, так и в поддержке.

    Мне нужно, чтобы у меня убирались все символы после точки
    const p = text.indexOf('.');
    const result = p === -1 ? text : text.slice(0, p);
    console.log(result);


    пробовал вот так:text.replace(/\[.][A-Z]/, "");
    Данная регулярка найдет первую точку, сразу за которой следует заглавная латинская буква и вырежет только конкретно это сочетание, что совсем не соответствует заданному вопросу.
    Ответ написан
    9 комментариев
  • Destroy/Init swiper slide на vue в зависимости от ширины экрана, как правильно?

    bingo347
    @bingo347
    Crazy on performance...
    Как-то так можно:
    <template>
          <swiper v-if="isShown" ref="mySwiper" :options="swiperOption">
            <swiper-slide>
              <div class="slideItem"></div>
            </swiper-slide>
          </swiper>
    </template>

    import { Swiper, SwiperSlide, directive } from 'vue-awesome-swiper'
    import 'swiper/css/swiper.css'
    
    export default {
    
      name: 'SwiperCarousel',
    
      components: {
        Swiper,
        SwiperSlide
      },
    
      data() {
        return {
          isShown: false,
          swiperOption: {
            // direction: 'vertical',
          }
        }
      },
      mounted() {
        const media = window.matchMedia('(max-width:768px)');
        const listener = e => this.isShown = e.matches;
        listener(media);
        media.addListener(listener);
        this.$once('hook:beforeDestroy', () => media.removeListener(listener));
      }
    }

    https://developer.mozilla.org/ru/docs/Web/API/Wind...
    Ответ написан
    1 комментарий
  • Какой сейчас самый лучший и прозрачный способ дебагинга JavaScript функций на сверстанном сайте?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Ответ написан
    Комментировать
  • Как сделать оптимальную перестановку элементов массива с XORом индексов?

    bingo347
    @bingo347
    Crazy on performance...
    Так как все индексы мы xor'им с одним и тем же числом cryptor то повторы между i и i ^ cryptor будут заключены в равных отрезках, притом размер этого отрезка всегда будет ближайшей от cryptor степенью 2 сверху, а сами повторы будут распределены в разных половинах данных отрезков, длина половинок соответственно ближайшая от cryptor степенью 2 снизу.
    Ну и нужно не забывать, что есть крайний случай, когда cryptor равен 0, при котором перестановок вообще не будет
    uint8_t main_buffer[512];
    uint8_t cryptor;
    
    cryptor = readCryptor();
    
    if(cryptor != 0)
    {
        // вычислим ближайшую к cryptor степень 2 снизу
        uint8_t pow2 = 0x80;
        while((pow2 & cryptor) == 0) pow2 >>= 1;
    
        while(readNext512Bytes(main_buffer))
        {
            // один большой цикл заменим на 2 маленьких
            // k будет считать отрезки
            // i будет считать позицию внутри отрезка
            for(uint16_t k = 0; k < 512; k += pow2 << 1) for(uint8_t i = 0; i < pow2; i++)
            {
                uint8_t tmp;
                tmp = main_buffer[i + k];
                main_buffer[i + k] = main_buffer[(i + k) ^ cryptor];
                main_buffer[(i + k) ^ cryptor] = tmp;
            }
        }
    }
    Ответ написан
    1 комментарий
  • Какой оптимальный JS фреймворк для мобильного SPA?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Svelte

    Желательно что бы мало весил
    рантайм минимален и только то, что по факту используется

    мобильный браузер долго не обрабатывал
    компилируется в высокоэффективный нативный DOM api, что делает его мега быстрым

    плагин хватало на стандартные функционалы
    Начать поиск отсюда можно
    Ответ написан
    8 комментариев
  • Xubuntu или Lubuntu?

    bingo347
    @bingo347
    Crazy on performance...
    Что лучше?
    Ну как по мне Arch + Cinnamon вне конкуренции, а из любой убунты выпиливать дофига всего дольше чем арч собрать. Но это по мне. А что конкретно Вам зайдет можете сказать только Вы.

    В чём отличие?xubuntu или Lubuntu

    Как уже сказали, оба основаны на ubuntu server и отличаются лишь предустановленным софтом и десктопом
    Ответ написан
    Комментировать
  • Как дождаться конца выполнения цикла?

    bingo347
    @bingo347 Куратор тега Node.js
    Crazy on performance...
    .then(lefts => {
        return Promise.all(
            lefts.map(left => models.db.l_d.findOne({where: {id: left.l_d.id}})
                .then(ld => ld.getMains())
            )
        ).then(mains => mains.flatMap((main, i) => main.map(m => ({
            data: data.name,
            dataId: data.Id,
            left: lefts[i].name,
            leftId: lefts[i].id,
            main: m.name,
            mainId: m.id,
            linkId: m.ld_m.id
        }))));
    }).then(
        result => console.log(result),
        err => console.log(err)
    )
    Советую получше изучить промисы
    Ну и давать нормальные имена переменным не лишнее
    Ответ написан
    Комментировать
  • Типизация push функции. Почему не выходит?

    bingo347
    @bingo347 Куратор тега TypeScript
    Crazy on performance...
    Не умеет TS работать со спред оператором не в конце массива, пока с этим можно только смириться.
    Ну и с рекурсивными типами стоит поаккуратнее быть, они вполне могут тайпчекер повесить, так как типизация TS тьюринг полная, точнее это лямбда исчисления в чистом виде, что, впрочем, с точки зрения вычислимости, одно и то же.
    Ответ написан
  • Нужна логика цикла чтобы перебрать все строки в таблице?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    var pos = 0;
    $(this).closest('#rrr').find('th:last input, td:last input').each(function() {
      pos += +$(this).val();
    });
    Обратите внимание, что я поправил ошибку в селекторе
    Ответ написан
    Комментировать
  • Как проверить ошибки в вводимом тексте?

    bingo347
    @bingo347
    Crazy on performance...
    Нужен словарь, представленный в виде дерева, где в узлах буквы, а любое слово - это проход от корня до листа. Тогда задача обнаружения ошибки сводится к проверке достижимости листа из корня при заданном наборе букв (слове), а предлагаемые подсказки выводятся из ближайших соседей
    Ответ написан
    Комментировать