Задать вопрос
Ответы пользователя по тегу JavaScript
  • Что скажете о javascript webSocket?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Во-первых, websocket - это протокол передачи данных, реализованный поверх http (wss - websocket secure работает через https соответственно) и к ECMAScript (спецификация для языков JavaScript, ActionScript и иже с ними) никакого отношения не имеет.
    Во-вторых, реализация websocket клиента включена в спецификацию BOM (Browser Object Model), из актуальных браузеров поддержка есть почти везде, не поддерживают только IE9 и ниже (критично только если ресурсом будут пользоваться в госсекторе) и OperaMini (мобильный браузер, который по реализации стандартов застрял где-то в 90х)
    В-третьих, websocket кардинально отличается от ajax:
    ajax позволяет делать классические http запросы и работает по принципу запрос-ответ
    websocket же устанавливает постоянное соединение, после чего общение происходит в виде отправки сообщений, притом сообщения могут отправлять как сервер так и клиент в любой момент времени пока установлено соединение
    В-четвертых, конкретно в реализации websocket клиента в браузере есть ряд ограничений:
    Нельзя управлять заголовками при установлении соединения, единственный способ передать какие-либо данные на сервер в момент установления соединения - это url
    На протяжении всего соединения будет только один формат обмена данными, на выбор есть строки, ArrayBuffer и Blob. Если есть необходимость отправлять по сокету как бинарные данные так и строки, то строки придется на js паковать в ArrayBuffer или Blob и, соответственно, распаковывать обратно при получении сообщений
    В-пятых, хотя правильнее наверно в-нулевых, сервер должен уметь работать по протоколу websocket

    В целом, вебсокеты можно использовать как альтернативу ajax, в SPA приложениях он может даже дать прирост скорости в общении с серверным апи в виду постоянного соеденения, но есть свои заморочки:
    придется самостоятельно реализовывать систему запрос-ответ (тут можно взять такую вещь как socket.io и не парится, хоть и тормазнутая, зато удобная + есть имитация поверх других транспортов для всяких там IE9)
    при отправки больших данных, придется заморачиваться разбивкой на части, иначе другие сообщения будут ждать пока сообщение будет отправлено (не стоит отправлять больше 256кб за раз)
    Ответ написан
    1 комментарий
  • Есть ли подобие global из php в js?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    В javascript область видимости строится на замыканиях (вложенности функций), есть три оператора объявления переменных:
    var - переменная будет видна в текущей функции и во всех функциях объявленных внутри текущей функции, включая те, что объявлены внутри вложенных функций, данное объявление всплывает на начало функции не зависимо где в функции оно произведено
    let - переменная будет видна в пределах текущего блока после ее объявления (не всплывает в отличии от var), а так же во всех вложенных в текущий блок блоках и функциях
    Так же нужно отметить, что такое объявление произведенное в циклах создаст новую переменную на каждую итерацию цикла
    const - все то же самое, что и для let + значение нельзя изменить
    Важно отметить, что для объектов значением переменной является ссылка на объект, а не сам объект, то есть записать в такую переменную что-то еще нельзя, но состояние объекта менять можно

    При обращении к переменной она сначала ищется в текущей области видимости, а если в текущей области такой переменной не объявлена, то производится поиск в области видимости выше.
    Самой верхней областью видимости является глобальный объект, в нем поиск производится последним, если переменная не найдена и там, то будет возвращено значение undefined
    Важно: в strict режиме (который рекомендуется включать всегда) нельзя использовать не объявленные переменные за исключением в операторе typeof

    Многие среды исполнения js создают в глобальном объекте переменную содержащую ссылку на сам глобальный объект, например gui поток браузера создает несколько таких ссылок:
    window - глобальный объект текущего фрейма (вкладка браузера, попап-окно, iframe)
    top - глобальный объект самого верхнего фрейма (вкладки)
    parent - глобальный объект фрейма находящегося на уровень выше, либо равносильно top если текущий фрейм - вкладка браузера или попап-окно
    opener - глобальный объект фрейма, породившего текущую вкладку или попап-окно (может быть null, если текущая вкладка порождена самим браузером)

    В webworker'ах и webextension'ах браузера ссылка на глобальный объект хранится в переменной self
    В node.js - global

    Универсальный способ получить глобальный объект в любой среде исполнения:
    function getGlobal() {
      return (new Function('return this'))();
    }


    P.S. использование глобальной области видимости - дурной тон
    Ответ написан
    1 комментарий
  • Можно ли вызвать анонимную функцию из другого файла, передав в нее параметры?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Используйте webpack и не изобретайте велосипедов
    Ответ написан
    Комментировать
  • Encryption.js:9 Uncaught TypeError: key.charCodeAt is not a function?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Проблема в том что Вы отдаете в функцию число:
    var secret_key = degree % simple_mod; // число
    
    //отдаем число функции
    get_login = rc4(secret_key, get_login);


    А charCodeAt - это метод строки
    Ответ написан
    Комментировать
  • Сверхбольшие числа на nodeJs, возможно?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Возможно, но не нативно
    Нужна bigarifmetic, если критична производительность, то лучше реализовывать на asm.js
    Ответ написан
    5 комментариев
  • Как получить response.body запроса при 400 ошибке и CORS?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Работать с ajax нативно, jquery кинет ошибку на все статусы кроме 2хх
    Ответ написан
    Комментировать
  • Что не так с кодировкой?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    В js строки в памяти хранятся в кодировке UTF16-LE (2-4 байта на символ, в большинстве случаев 2) и библиотека работает с байтами строки именно в ней
    Библиотека на C++ принимает на вход std::vector при простом преобразовании строки в который Вы получите вектор байтов в текущей кодировке пользователя, скорее всего однобайтовой
    Кодируйте строку на C++ в UTF16-LE перед шифрованием - тогда получите одинаковый результат
    Ответ написан
    Комментировать
  • Как начать уменьшать сайт, когда ширина меньше 480 пикселей?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Адаптив надо делать не скриптами и управлением вьюпортом, а медиазапросами на стилях
    А вьюпорт на адаптивном сайте должен быть всегда
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
    Ответ написан
    2 комментария
  • Как сжать изображение при загрузке на сервер?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Копайте в сторону canvas и отрисовке изображения на 2d контексте
    https://developer.mozilla.org/ru/docs/Web/API/Canv...
    Ответ написан
    Комментировать
  • JQuery. Увеличение fontSize по клику на элемент?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    jQuery(function($) {
      var $box = $('.box');
      var $h1 = $('h1');
      var curFontSize = parseFloat(getComputedStyle($h1.get(0)).fontSize);
      $box.on('click', function() {
        $h1.css('font-size', (++curFontSize) + 'px');
      });
    });
    Ответ написан
    Комментировать
  • Как более эффективно работать с dom javascript?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Если родитель пустой, то innerHTML самое быстрое
    Если в нем что-то уже есть, то вставка через documentFragment
    var frag = document.createDocumentFragment();
    for(let i = 0; i < 10; i++) {
      let newLi = document.createElement('li');
      newLi.className = "alert";
      newLi.innerHTML = "<strong>Ура!</strong> Вы прочитали это важное сообщение.";
      frag.appendChild(newLi);
    }
    list.appendChild(frag);
    Ответ написан
    Комментировать
  • Почему не обновляются данные, получаемые через ajax?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Скорее всего кэш браузера, самое простое добавить рандом к запрашиваемому url
    $.ajax({
            type: "GET",
            url: "icecast.php?" + Math.random(),
            async: true,
            jsonpCallback: "parseMusic",
            contentType: "application/json",
            dataType: "json",
            success: function(a) {
                $("#main-track-title").text(a.track_url)
            }
    });
    Ответ написан
    2 комментария
  • Как забрать массив из промиса?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    api.getInfo().then(({data}) => {
      this.setState({
        info: data
      });
    });
    Ответ написан
    Комментировать
  • Как подключать к странице библиотеки из node_modules?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Попробуйте webpack
    Имхо, лучший инструмент для работы с модулями
    Ответ написан
    Комментировать
  • Как создают анимацию в html5 canvas?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    https://developer.mozilla.org/ru/docs/DOM/window.r...
    Никаких таймеров для анимации
    Ответ написан
    Комментировать
  • Почему на iphone отображается некорректно сайт?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Это все от того, что эмулятор хрома не умеет эмулировать косяки мобильной оперы и мобильного сафари, а запускает все на своем движке, который гораздо лучше поддерживает стандарты
    Ответ написан
    3 комментария
  • Как запретить на сайте нажатие CTRL+SHIFT+I и F12?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Вместо того чтоб страдать подобной <тут должно быть нецензурное слово> лучше сначала напишите что-то реально полезное, а так только сами себе грабли стелите
    Тот же авито сажает вирус в расширения хрома при открытии инструментов разработчика, наверно как и Вы боятся спалить свой говнокод (а у них там действительно беда)
    А еще подумайте вот о чем: что если инструменты разработчика уже открыты к моменту загрузки Вашей страницы? А что если я сижу на маке, где эти сочетания другие (CMD+I)? А что Вы будете делать с расширением которое позволяет блокировать обработку события контекстного меню скриптами в любое время? (У меня такое стоит)
    Ну и напоследок: когда в Вашем коде появится реально что-то полезное, у Вас будут мысли не "каким еще костылем защитить мой код", а "как бы это написать так, чтоб потом выложить в опенсорс не стыдно было, да еще звездочек за это на гитхабе нахватать"
    Ответ написан
    2 комментария
  • Кто каким полифилом для WeakMap пользуется?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Ответ написан
    Комментировать