четверг, 28 декабря 2017 г.

5 наиболее популярных JavaScript фреймворков в 2017 году

В области фронт-энд разработки, многие вещи кажутся сложными. Новые фреймворки появляются все время, они обеспечивают новые возможности для разработчиков. Забудьте о чай ч печеньками, учите новые инструменты если хотите быть на волне. Ситуация стала лучше в последние несколько лет, но все еще не перестает удивлятью Polymer, Aurelia, Sencha, Webix и так далее – что стоит за этими названиями? Как и когда ими следует пользоваться?

Сегодня мы покажем краткое руководство для вас – ниже описаны 5 наиболее популярных фреймворков для фронт энд разработчиков.

Angular

Данный фреймворк первым прихдит на ум когда речь заходит о «фреймворке для JS». Вместе с React.js он формирует «большую двойку» в мире фреймворков JS. Разработчики часто сравнивают их и пытаются выбрать лучший.
После своего появвления в 2016, фреймворк оказался на пике популярности, на котором находится и сегодня. Сущестует много версий и большое количество сообществ разработчиков. Он использует TypeScript как основной язык, и это делает его хорошим выбором для разработки больших корпоративных систем, поскольку TypeScript напоминает C#.
К преимуществам фреймворка стоит отнести действительно быстрый процесс кодирования и тестирования, и все изменения которые вы делаете на бэкэнде – моментально появятся на пользовательском интерфейсе, и поэтому очень просто отследить если вдруг что то  пойдет не так. Разработчикам также нравится факт что у Angular есть все из коробки, таким образом вам нужно один раз выучить его и потом можно пользоваться долгие годы. Первая версия фремворка хорошо подходит для одностраничных приложений, в то время как вторая версия способна поддерживать все типы приложений – от мобильных до решений корпоративного уровня.
Помимо радужных описаний, есть и отрицательные моменты. Angular тяжел, во всех смыслах. Ему требуется много аппаратных ресурсов и много времени для изучения, потому что он весьма сложен. Если вас это не пугает – выбирйте его и в путь, особенно если вам придется иметь дело с большими корпоративными приложениями. Вы не разочаруетесь в фреймворке.

React.Js

Теперь давайте поговорим о другой стороне. React.js был достаточно умопомрачительным в далекие дни первого релиза в 2013. Технология отрисовки страниц была инновационной и меняла все правила игры. Много лет назад в другой галактике мы уже писали статью про ключевые преимущества React.js. Можете с ними ознакомится для получений более полной картины.
Собственно, React – это не фреймворк, это библиотека JavaScript. В отличие от Angular это просто View. Если вам нужно что то еще, вы можете добавить это сами. React часто используют с Redux – таким образом вы можете иметь полную ахитектуру для приложений.
React вырос очень стремительно. Он используется как платформа для новых фреймворков, кстати не только для JavaScript (Rum, Re-frame, Om). Фреймворки построенные на React могут использоваться для любых задач. Например, React Native хорош для создания многоплатформных приложений и React VR, как говорит название, это используется в сайтах виртуальной реальности.
React проще для изучения чем Angular, но он сложен сам по себе. Возможность интегрировать React в любую инфраструктуру и после этого выбрать компоненты для использования – просто прекрасная опция, но вместе с тем, порой достаточно непростая. На Github есть более 1000 авторов которые изучают новые фишки связанные с React. И по прежнему здесь не так все сложно как в Angular.

Vue.js

Представьте что у React и Angular появился ребенок – это и есть Vue.js. Он вобрал в себя все самое лучшее от своих родителей: двухсторонний дата-байндинг, рендеринг на сервере, Vue-cli (средства проектирования для быстрого старта) и опциональная поддержка JSX.
Vue.js – это самый простой фреймворк для JavaScript на свете. Все что вам нужно знать – это следовать инструкция из документации и... И все! У фреймворка есть все необходимые средства для работы, в отличие от React. Он также генерирует контент также быстро как и React 15.0. Нет проблем с авторскими правами – это то что мы любим в опен сорс. Несмотря на все это – согласно статистике GitHub, Vue.js jодин из трех самых распространенных фреймворков.
Если вы хотите быстрый старт и отличную производительность - Vue.js определенно то что вам нужно, это одно из наилучших фреймворков JavaScript.

Meteor.js

Что действительно интересно о Meteor так это то, что предполагалось, что это будет очередной мертворожденный фреймворк. О нем нем не было доступно много информации со времен его появления в 2012. Он стал популярным лишь недавно и продолжает наращивать обороты.
Вообщето не совсем корректно называть его фреймворком. Meteor это полноценная платформа с сервером, управлением базой данных и средствами для разработки серверной и клиентской части. Несмотря на все это он больше всего подходит для использования в приложениях реального времени, такиз как Slack или Viber. Я полагаю что свое название Meteor получил неспроста. Все изменения в базе данных передаются на UI моментально без задержки отклика сервера, преобразования языка и прочее. Также он покрывает весь цикл разработки, что также является весьма удобным.
Он использует Node.js как основание и использует свой репозиторий пакетов и библиотек – Atmosphere.js. Вы можете использовать npm начиная с обновления 1.3, но не все пакеты еще перенесены с Atmosphere в npm.
Хотите разрабатывать чат или мессенджер? Пробуйте Meteor.js!

Ember.js

Ember будет правильным выбором для сложных приложений. Это фреймворк JavaScript используется такими грандами как Netflix, Kickstarter и LinkedIn. Модуль Fastboot.js обеспечивает быстрый рендеринг клиентской части, который благотворно влияет на производительность сложного UI.
Что еўе интересно, Ember активно использует средства генерации кода, котоыре делают жизнь разработчика проще. Rails сильно влияет на архитектуру приложений Ember, но создатели переключили подход компонентов в последнем обновлении.
Со времен своего релиза в 2011 Ember получил огромное онлайн сообщество, тонны используемых методик и практик и продолжает получать постоянные обновления, поэтому это очень дружелюбный фреймворк. Попробуйте его использовать если вы создаете что то глубокое и сложное.

Теперь вы знаете

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

вторник, 28 ноября 2017 г.

DOM MutationObserver – реакция на изменение DOM модели без потери производительности браузера.

События изменения DOM модели казались отличной идеей в свое время – разработчики могли создавать более динамические сценарии, казалось вполне естественным иметь возможность слушать изменения в DOM и реагировать на них. На практике использование данного API вылилось в большую проблему производительности и стабильности, поэтому с недавних пор события изменения DOM модели стали помечеными как устаревшие.
Оригинальная идея по возможности отслеживания изменений по прежнему осталась привлекательной, поэтому в сентябре 2011 года группа инженеров Google и Mozzilla представила новое решение, которое предоставляет похожую функциональность но показывает куда более высокую производительность: DOM MutationObserver. Этот новый DOM API доступен на большинстве современных браузерах включая IE11+, Edge, Firefox, Chrome.
В самом простейшем случае, реализация MutationObserver выглядить примерно так:

// выбираем текущий элемент
var target = document.querySelector('#some-id');

// создаем экземпляр наблюдающего объекта
var observer = new MutationObserver(function(mutations) {
    mutations.forEach(function(mutation) {
        console.log(mutation.type);
    });
});

// конфигурируем его:
var config = { attributes: true, childList: true, characterData: true }

// передаем элемент и конфигурацию в метод запуска наблюдения
observer.observe(target, config);

// позже процесс наблюдения можно остановить
observer.disconnect();

Ключевым преимуществом новой спецификации по сравенению со старыми событиями DOM является эффективность. Если вы наблюдаете за изменениями элемента, вункция возврата не будет вызвана до тех пор, пока DOM не закончит изменения. В момент вызовы функции возврата, уже имеется информация о перечне изменений в DOM, эту информацию вы можете использовать для того что бы среагировать так как вам нужно.
Это также означает, что любой код который вы напишете должен обрабатывать результат наблюдений в том порядке, в котором происходят изменения. Ниже представлен компактный пример налюдателя который слушает изменения в редактируемом упорядоченном списке.

<!DOCTYPE html>
<ol contenteditable oninput="">
  <li>Press enter</li>
</ol>
<script>
  var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;
  var list = document.querySelector('ol');

  var observer = new MutationObserver(function(mutations) {
    mutations.forEach(function(mutation) {
      if (mutation.type === 'childList') {
        var list_values = [].slice.call(list.children)
            .map( function(node) { return node.innerHTML; })
            .filter( function(s) {
              if (s === '<br />') {
                return false;
              }
              else {
                return true;
              }
        });
        console.log(list_values);
      }
    });
  });

  observer.observe(list, {
        attributes: true,
        childList: true,
        characterData: true
   });
</script>



Если вы хотите посмотреть как работает этот код, то вы можете воспользоваться ссылкой, представленной ниже.

Если вы посмотрите на этот пример, то можете обратить внимание на то что функция возврата срабатывает каждый раз когда вы жмете на Enter для каждого li, на практике когда пользователь что то делает, то результат добавляется или удаляется из DOM. Это важное отличие от других приемов, таких как подключение событий на нажатие кнопки или более глобальное событие такое как ‘click’. MutationObserver работает отлично от таких приемов, потому что его вызовы инициируются самими изменениями DOM, а не событиями которые генерируются либо JS либо активностью пользователя.

Так для кого это хорошо?
Я не думаю что большинство JS хакеров сейчас отложат свои дела и начнут активно добавлять mutation observer в свой код. Пожалуй самая большая аудитория для этого нового API это люди которые пишут фреймворки, в большей части для решения проблем и создания взаимодействия, которого раньше они не могли написать, или по крайней мере с приемлимой производительностью. Другой сценарий – это если вы используете некоторый фреймворк для изменения DOM и хотите реагировать на изменения более эффективно (и без всяких вызовов setTimeout).

Что еще почитать


Источник: https://hacks.mozilla.org/2012/05/dom-mutationobserver-reacting-to-dom-changes-without-killing-browser-performance/