Ответы пользователя по тегу JavaScript
  • Как включить поддержку HMR в webpack?

    Как вы запускаете webpack? Случаем, не `--hot` добавляете? Ошибка по виду похожа на два HotModuleReplacement плагина.

    Вот здесь посмотрите выпуск про HMR, learn.javascript.ru/webpack-screencast, может и вопросы снимет?
    Ответ написан
    4 комментария
  • Чем webpack лучше gulp/grunt?

    Webpack - это система сборки с массой возможностей. В частности, он анализирует JS-код (а также CSS или другой, через лоадеры), это даёт ему superpowers.

    Gulp/grunt - это общая система для организации задач, которая сама по себе сборку не поддерживает, но её можно на ней написать, с помощью плагинов. При этом анализа кода, скорее всего, не будет, а значит ряд продвинутых фич отпадут.

    То есть, это две разные вещи. В качестве одной из задач на gulp/grunt вполне может быть сборка webpack, так обычно и делают.

    Простую сборку вполне можно написать и на gulp/grunt напрямую. А если посложнее или просто хочется иметь задел "на будущее", то можно воспользоваться специальным инструментом (Webpack).

    P.S. У меня когда-то были и gulp task'и сборщики и browserify, но уже давно их место плотненько занял Webpack.
    Ответ написан
    18 комментариев
  • Что штудировать сначала - learn.javascript.ru или Д. Флэнаган?

    Степан Рашевский Если оба этих ресурса не помогают, то попробуйте codeacademy. Простой интерактивный JavaScript-курс. Может сработать.

    Все люди разные, отсюда и много разных подходов к обучению. Посмотрите видеокурсы, которых много в интернете.

    А потом можно вернуться и к этим книгам, которые вы упомянули, возможно взглянете на них по-другому.
    Ответ написан
  • Пример из статьи на Хабре. Утечка памяти?

    Привет, 3y3 :)

    Чтобы проще было разобраться в этом примере - посмотрим вначале на более простой.
    var theThing = null;
    
    var replaceThing = function () {
      var priorThing = theThing; 
      theThing = {
        longStr: new Array(1000000).join('*'),  // создаем 1Mб объект
        someMethod: function () { 
          console.log("Hi, JS-dude!")
        }
      };
    };
    setInterval(replaceThing, 1000);    // вызываем 'replaceThing' каждую секунду


    Здесь при каждом вызове в theThing записывается новый объект, у которого функция someMethod, через замыкание, хранит ссылку на внешнюю область видимости, включающую в себя priorThing, т.е. предыдущий объект.

    Получается, что каждый новый объект ссылается на предыдущий, они образуют цепочку в памяти.

    Если запустить этот код, то по этой логике будет утечка. В старых браузерах - обязательно будет.

    Пруф:
    4c8a6c47b3764be1bc65e6a8df8cfed6.png

    Современные браузеры, конечно, умнее. FF и Chrome увидят, что переменная priorThing не используется и удалят её из памяти, так что старый объект благополучно умрёт.

    Чтобы этого не происходило, в исходном примере сделан "финт ушами": переменная используется в некой функции unused:
    var theThing = null;
    
    var replaceThing = function () {
      var priorThing = theThing;
      ///////////////////
      var unused = function() {
        console.log(priorThing);
      };
      ///////////////////
      ...
    }
    setInterval(replaceThing, 1000);    // вызываем 'replaceThing' каждую секунду


    Несовершенство сборщика мусора (3y3, видимо, лучшего мнения о нём) приводит к тому, что в этом случае сборщик мусора "не просекает", что переменная-то ненужная, и очистки не происходит.

    Пруф Firefox:
    bdd1210bf5174a13bec4d27652124e70.png

    Пруф Chrome (цепочка объектов в памяти):
    f1da7a209bcb4012b89468907b3df274.png

    Вот, собственно, и причина.
    Ответ написан
    4 комментария
  • Кто нить знает как пробросить вебсокет через nginx малой кровью?

    Также сработает Varnish — отличный кеширующий прокси, через nginx пока никак без патча, во всяком случае.
    Ответ написан
    Комментировать