• Универсальный (Изоморфный) проект на Koa 2.x + React + Redux + React-Router

      Универсальный Koa

      Сейчас много споров по поводу универсального (изоморфного) кода, есть свои за и против.
      Я считаю, что за универсальным (изоморфним) кодом будущее, так как он позволяет взять лучшее с серверного и клиентского рендеринга.
      Читать дальше →
      • +5
      • 18.3k
      • 6
    • Как мы разогнали мобильную Lenta.ru до скорости света

        image

        AMP — наверняка, вы уже слышали об этой технологии, продвигаемой Google. Казалось бы, еще одна модная технология для хипстеров, о которой скоро все забудут. Однако, в реальности эта фича уже работает в продакшне значительного числа новостных сайтов, среди которых такие гиганты, как the Guardian, Times, Washington Post, и прочая, прочая, прочая. Краткий рассказ о плюшках AMP уже был на страницах “Хабра”, а я хотел бы чуть более подробно сфокусироваться на том, как внедрять это в проект, и какой профит в действительности можно получить.
        Читать дальше →
      • Тестируем вёрстку правильно

          Makeup — инструмент для комфортного ручного регрессионного тестирования вёрстки

          Что не так с тестированием вёрстки


          Мы часто им пренебрегаем. Написание функциональных, интеграционных и юнит-тестов давно стало повсеместной практикой. Вёрстке мы обычно уделяем гораздо меньше времени.

          Проблема тестирования вёрстки в том, что только живой человек может сказать, хорошо свёрстан блок на странице или нет. Поэтому чаще всего мы тестируем HTML и CSS вручную: проверяем, как будет вести себя блок, если в нем будет слишком много (или слишком мало) текста или дочерних элементов; смотрим, чтобы все возможные варианты отображения блока смотрелись корректно; помним о том, как блоки должны адаптироваться к разным устройствам и разрешениям экрана.
          Можем ли мы перестать делать это руками?
        • Понимание сборки мусора и отлов утечек памяти в Node.js

          • Translation
          Плохие отзывы в прессе о Node.js часто относятся к проблемам с производительностью. Это не значит, что с Node.js больше проблем, чем с другими технологиями. Просто пользователь должен иметь в виду некоторые особенности её работы. Хотя у технологии пологая кривая обучения, обеспечивающие её работу механизмы довольно сложные. Необходимо понять их, чтобы предотвратить появление ошибок производительности. И если что-то пойдет не так, необходимо знать, как быстро привести всё в порядок. В этой статье Даниэль Хан рассказывает о том, как Node.js управляет памятью и как отследить связанные с памятью проблемы.


          Читать дальше →
          • +25
          • 29.8k
          • 4
        • Вертикальная черта, затем ноль

            Заголовок, выраженный словами, понадобился только для поисковой находимости. Но речь пойдёт о роли символьной конструкции «|0» в JavaScript.

            Впервые на неё я обратил внимание, когда переводил FAQ про asm.js и читал спецификации этого подмножества языка JavaScript. Там «|0» служит, например, для указания типа значения, возвращаемого из функции: увидели «|0» после значения — значит, перед нами знаковое целое.

            Вдругорядь я заметил конструкцию «|0» в примере кода на Гитхабе, где происходило преобразование к целому числу результата деления на 1024².

            Тогда глаза мои открылись, и я увидел прекрасные возможности:

            ( 3|0 ) === 3;       // целые числа не изменяет
            ( 3.3|0 ) === 3;     // у дробных чисел отбрасывает дробную часть
            ( 3.8|0 ) === 3;     // не округляет, а именно отбрасывает дробную часть
            ( -3.3|0 ) === -3;   // в том числе и у отрицательных дробных чисел
            ( -3.8|0 ) === -3;   // у которых Math.floor(-3.3) == Math.floor(-3.8) == -4
            ( "3"|0 ) === 3;     // строки с числами преобразуются к целым числам
            ( "3.8"|0 ) === 3;   // при этом опять же отбрасывается дробная часть
            ( "-3.8"|0 ) === -3; // в том числе и у отрицательных дробных чисел
            ( NaN|0 ) === 0;     // NaN приводится к нулю
            ( Infinity|0 ) === 0;     // приведение к нулю происходит и с бесконечностью,
            ( -Infinity|0 ) === 0;    // и с минус бесконечностью,
            ( null|0 ) === 0;         // и с null,
            ( (void 0)|0 ) === 0;     // и с undefined,
            ( []|0 ) === 0;           // и с пустым массивом,
            ( [3]|0 ) === 3;          // но массив с одним числом приводится к числу,
            ( [-3.8]|0 ) === -3;      // в том числе с отбрасыванием дробной части,
            ( [" -3.8 "]|0 ) === -3;  // и в том числе с извлечением чисел из строк,
            ( [-3.8, 22]|0 ) === 0    // но массив с несколькими числами вновь зануляется
            ( {}|0 ) === 0;                // к нулю также приводится пустой объект
            ( {'2':'3'}|0 ) === 0;         // или не пустой
            ( (function(){})|0 ) === 0;    // к нулю также приводится пустая функция
            ( (function(){ return 3;})|0 ) === 0;    // или не пустая
            

            Итак, во-первых, перед нами удобное средство отбрасывания дробной части.

            • По отношению к отрицательным числам оно полезно тем, что дробное число превращается не в ближайшее меньшее целое число (возрастая по модулю), как это случилось бы после «Math.floor()», а в ближайшее меньшее по модулю целое число (возрастая по значению). Нередко именно это и требуется.
               
            • По отношению к положительным числам оно полезно уж тем одним, что конструкция «|0» более чем на порядок короче по сравнению с «Math.floor()». Поэтому она может и должна вызывать у разработчиков привыкание не меньшее, чем та принятая в jQuery запись «$()», о которой я говорил четыре дня назад, что с неё никто добровольно не перейдёт обратно на «document.getElementsByClassName()», например.

            Во-вторых, перед нами удобное средство преобразования различных типов к целым числам.

            Читать дальше →
          • Ключевое слово this в javascript — учимся определять контекст на практике

            • Tutorial
            По просьбам некоторых читателей решил написать топик про контекст в javascript. Новички javascript часто не понимают значение ключевого слова this в javascript. Данный топик будет интересен не только новичкам, а также тем, кто просто хочет освежить данный аспект в памяти. Посмотрите пример ниже. Если вы затрудняетесь ответить на вопрос «что будет выведено в логе» хотя бы в одном из пунктов или хотите просто посмотреть ответы — добро пожаловать под кат.

            var f = function() {
                this.x = 5;
                (function() {
                    this.x = 3;
                })();
                console.log(this.x);
            };
            
            var obj = {x: 4, m: function() {
                console.log(this.x);
            }};
            
            
            f();
            new f();
            obj.m();
            new obj.m();
            f.call(f);
            obj.m.call(f);
            

            Читать дальше →
          • Лексическая область видимости функций в JavaScript

              Почитав недавние посты для новичков JavaScript, решил написать небольшой топик про один интересный вопрос, которого ни один из авторов пока не касался, а именно, вопрос про область видимости функций в JavaScript.
              Читать дальше →