Задать вопрос
  • Как разобрать HTTP запрос?

    bingo347
    @bingo347
    Crazy on performance...
    Что делать если размер запроса больше чем размер буфера?
    Читать в цикле. read вообще не гарантирует, что заполнит буфер полностью, но больше его размера он точно за раз не прочитает. А еще он возвращает io::Result<usize>, в котором сообщает, сколько реально байт было прочитано.
    1.1) Нужно будет читать пока не найдется CRLF в буфере ?
    Пока read не вернет Ok(0), ну или ошибку. Хотя с ошибкой не все так однозначно, согласно доке может вылететь Err(io::ErrorKind::Interrupted) при котором стоит повторить попытку чтения. Вообще CRLF будет после каждого заголовка, а когда заголовки закончатся будет 2 CRLF подряд, а потом еще может быть тело запроса, а может и не быть.
    1.2) для этого мне нужно пройтись по буферу и искать CRLF . если его нет то очистить буфер и продолжать читать ?
    нет, нужно распарсить то что пришло, куда-то сохранить, а потом продолжить чтение.
    2) Как отделять один http запрос от другого ?
    Если у нас не keep-alive, то каждый запрос будет в отдельном соединении, но keep-alive наступает только если обе стороны прислали заголовок Connection: keep-alive Можете сделать по простому, и отвечать с заголовком Connection: close, все равно в учебном проекте производительность у Вас будет никакая. Но если хотите все же заморочиться, то правило тоже не сложное - следующий запрос начинается в следующем же байте, где закончился текущий. Размер тела запроса в байтах можно узнать из заголовка Content-Length, а если его нет, то можете считать, что его значение 0.

    Что следует почитать для Вашей задумки:
    1. Спеку http
    2. Исходники hyper
    3. Исходники actix-web
    Ответ написан
    Комментировать
  • TS React children state?

    bingo347
    @bingo347 Куратор тега TypeScript
    Crazy on performance...
    Или нормально типизировать эту функцию (зачем Вам вообще ts, если Вы пишите any?) ну или заткнуть в тип стейта поле вида[k: any]: any
    Ответ написан
  • Не копируется массив, в чем причина?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Не копируется, потому-что внутри массива maze у Вас лежат ссылки на подмассивы, и Вы копируете лишь их, а не сами массивы.
    Придется скопировать на уровень глубже:const mazeCopy = maze.map(sub => sub.slice())
    Ответ написан
    Комментировать
  • Как правильно разбивать зависимости npm пакета?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Хорошей практикой является не тащить зависимости в бандл.
    В webpack есть externals
    В rollup есть external
    Если Вы вшиваете свои зависимости в бандл своего пакета - Вы без вариантов создаете дублирование кода в бандле, если мне нужны те же зависимости, что и Вашему пакету и дополнительно Ваш пакет
    Ответ написан
  • Как установить gulp через npm?

    bingo347
    @bingo347
    Crazy on performance...
    Зачем Вы установили https-proxy опцию в конфиг npm да еще и криво? Все Ваши проблемы от копипасты без понимания, что Вы копипастите
    Ответ написан
  • Изменение action в форме. Корректно или нет?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    JS отработает раньше запросов, можете не париться
    Лучше задумайтесь, а что будет, если у меня не работает Ваш JS?
    Ну еще советую почитать про fetch апи, а так же, что по мимо click есть другие события
    Ответ написан
  • Нужно ли писать тесты(Jest/Enzyme) в React приложении которое написано на TypeScript?

    bingo347
    @bingo347 Куратор тега TypeScript
    Crazy on performance...
    Самый вредный миф, который есть в typescript сообществе: "Типизация защитит от ошибок"
    Не защитит!
    Типизация не для этого, она для ускорения и удешевления долгосрочной разработки.
    Ну а если еще вспомнить, что у typescript структурная типизация (никто не мешает складывать рубли с килограммами) и при этом в ней есть тип any - то сразу становится понятно, что ни о какой надежности говорить не приходится.
    Ответ написан
    Комментировать
  • Как я могу прочитать файл на другой локальной машине?

    bingo347
    @bingo347 Куратор тега Node.js
    Crazy on performance...
    что-то мне кажется что надо слеши экранировать пробовал так /\ ничего не выходит
    Да, обратный слэш нужно экранировать, так как он сам является экранирующим символом, прямой же слэш не экранирует, поэтому ничего не выходит
    Пример:
    \\ -> \
    \\\\ -> \\

    ну и модуль path в ноде, достаточно умный, чтоб привести слэши в путях к используемым в системе, поэтому можно просто
    path.normalize( '//192.168.1.5/C$/data/data.json' )
    Ответ написан
    5 комментариев
  • Ошибка 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...
    Ответ написан
    Комментировать