Задать вопрос
  • Map это объект или массив?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    В js все объект, что не является примитивом (простые объекты, экземпляры классов, массивы, Map, Set, функции).
    Так что да, Map это объект.
    А вот массивом он не является, ибоArray.isArray(new Map()) // false
    Здесь есть вот такая штука [[Entries]]. А entries возвращает массив свойств объекта
    Вообще-то entries возвращает итератор. Итератор - это тоже не массив.
    Ответ написан
    2 комментария
  • Полноэкранный режим на сайте?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Проблема в том, что при переходе по ссылке документ, на котором вызван фулскрин, перестает существовать, а вместо него формируется новый, и при этом происходит выход из фулскрина.
    Решения тут я вижу два:
    1. Костыльное. Кроме документа фулскринить еще можно video и iframe, и iframe может тут помочь, так как он останется неизменным, сколько бы страниц в него не загружалось.
    2. Сложное. Можно переделать сайт в SPA, тогда настоящих переходов не будет, и все страницы будут работать в пространстве одного документа
    Ответ написан
  • Есть ли эффект-анимация перелистывания страниц книги со сменой url?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    А заглянуть как у них сделано?
    Вся магия тут: megaweb.su/demo/css3_book/css/style.css
    Ответ написан
  • Как разобрать 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 плюс километровые функции, которые обычно пишутся быдлокодерами, вполне такое позволяют.
    Ответ написан
    Комментировать