Статьи

3 библиотеки JavaScript, за которыми нужно следить в 2017 году

3 библиотеки JavaScript, за которыми нужно следить в 2017 году, были рецензированы Aurelio de Rosa и Vildan Softic . Спасибо всем рецензентам SitePoint за то, что сделали контент SitePoint как можно лучше!

Указатель, указывающий на 2015/2016 и на 2017 год

Фу, 2016 окончен! Это был безумный год как для мира, так и для страны JavaScript. Появилось бесчисленное количество новых впечатляющих библиотек и фреймворков. You Might Not Need JavaScript продемонстрировал некоторые шаблоны, которые заставили многих усомниться в их использовании JavaScript (немного), и один твит из слайда из выступления Нолана Лоусона о Fronteers вызвал некоторую суматоху и отклики от таких великих имен, как Джереми Кейт и Кристиан Хейлманн, все кратко изложено в посте Нолана . Я начинаю думать, что «сумасшедший» — это преуменьшение. 2016 был безумным .

В этом году также включена усталость JavaScript. Если вы пропустили это, многие разработчики испытывают усталость от экосистемы JavaScript, так как для настройки «современного» проекта JavaScript требуется много инструментов и настроек. Однажды, так много разработчиков поделились своими мыслями, что появилось еще несколько статей на тему «Усталость от JavaScript»!

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

Vue.js

Если вы уже не следите за Vue.js , вам определенно следует это сделать. Vue.js — это крошечный JavaScript-фреймворк.

Нет, не убегай!

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

Vue.js выпускается в двух вариантах: автономная версия, которая включает в себя компилятор шаблонов, и версия времени выполнения, которой нет. Практически во всех случаях вы захотите предварительно скомпилировать шаблоны с помощью Webpack или Browserify и загрузить только клиентский пакет времени выполнения. Смотрите страницу установки Vue.js для получения дополнительной информации.

Чтобы продемонстрировать его простоту, ниже приведен пример компонента, который показывает сообщение и добавляет интерактивность к кнопке, чтобы отменить сообщение.

<div id="app">
  <p>{{ message }}</p>
  <button v-on:click="reverseMessage">Reverse Message</button>
</div>
 import Vue from 'vue'

new Vue({
  el: '#app',
  data: {
    message: 'Hello World!',
  },
  methods: {
    reverseMessage: function () {
      const reversedMessage = this.message
        .split('')
        .reverse()
        .join('');

      this.message = reversedMessage;
    },
  },
});

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

Вы обязательно должны попробовать эту платформу, если хотите быстро работать. Он хорошо масштабируется по мере роста проекта. Стоит отметить, что эта библиотека поддерживается одним человеком с помощью щедрых участников и спонсоров.

Независимо от того, выбираете ли вы автономный или исполняемый вариант , Vue.js поддерживает ES5-совместимые браузеры по умолчанию. Хотя это не задокументировано, я уверен, что вы можете увеличить поддержку, добавив прокладку ES5 вручную.

Для получения дополнительной информации посетите веб-сайт Vue.js или его репозиторий GitHub . Если вам интересно, обязательно ознакомьтесь с редакционной статьей Нильсона Жака на Vue.js и знакомством Джека Франклина с Vue.js 2.0 .

стройный

Будучи выпущенным только в середине ноября 2016 года, Svelte действительно новый. Это JavaScript-фреймворк, похожий на Vue.js, но оставляющий меньшую площадь. «Традиционным» фреймворкам необходим код времени выполнения для определения и выполнения модулей, сохранения состояния, обновления представлений и выполнения любых действий, которые делают фреймворки. Svelte растворяется в чистом коде JavaScript, как будто вы вообще не используете фреймворк. Основным преимуществом этого является размер файла.

Фреймворк — это на самом деле инструмент, который компилирует ваш исходный код в простой JavaScript, который не имеет зависимостей. Svelte имеет плагины, так что вы можете скомпилировать исходный код, используя Webpack, Browserify, Rollup или Gulp. Проверьте репозиторий компилятора для всех доступных инструментов.

Для сравнения я воссоздал пример Vue.js с Svelte:

 <p>{{ message }}</p>
<button on:click="reverseMessage()">Reverse Message</button>

<script>
export default {
  data () {
    return {
      message: 'Hello World!',
    }
  },
  methods: {
    reverseMessage () {
      const reversedMessage = this.get('message')
          .split('')
          .reverse()
          .join('');

      this.set({
        message: reversedMessage,
      });
    }
  }
};
</script>

Тот же самый модуль, созданный с помощью Vue.js, производит пакет размером 7 КБ. Svelte создает файл размером 2 КБ.

Весовая версия TodoMVC от Svelte составляет 3,6 Кб. Для сравнения, React plus ReactDOM без кода приложения весит около 45 КБ в сжатом виде.

Тест js-framework-benchmark доказывает, что Svelte конкурирует с Inferno с точки зрения производительности. Вы должны обязательно попробовать это, если заботитесь о занимаемой площади вашего приложения.

Если вы планируете использовать это в производстве, я советую вам подождать немного дольше. Фреймворк действительно новый, и никакие планы на будущее не объявляются, за исключением TODO в документации, которая, кажется, ссылается на саму документацию и плагины. Несмотря на то, что это супер новый и не проверенный в бою, я ожидаю, что это получит некоторую популярность в следующем году и может повлиять на библиотеки и / или структуры еще впереди.

На момент написания этой статьи Svelte либо не документировал свою систему плагинов, либо ее вообще не было. TODO указывает, что Svelte будет поддерживать плагины и может иметь API для подключения к платформе.

Совместимость скомпилированного кода зависит от вашего стека рабочих процессов сборки, поэтому трудно сказать, какова его совместимость по умолчанию. Технически вы должны быть в состоянии достичь поддержки до ES5, включая прокладки ES5.

Для получения дополнительной информации посетите веб-сайт Svelte или его репозиторий GitHub .

Conditioner.js

И последнее, но не менее важное, Conditioner.js . С помощью Conditioner.js вы можете условно загружать и вызывать модули. Отличие от других загрузчиков модулей состоит в том, что Conditioner.js позволяет вам определять условия, при которых загружать и / или показывать модуль. Это позволяет сократить время загрузки и сохранить пропускную способность.

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

Библиотека не предоставляет глобальную переменную и рекомендует использовать загрузчик AMD, такой как RequireJS . Он совместим с Browserify, Webpack, Rollup и другими пакетами AMD, но вы захотите создать крошечные пакеты, чтобы Conditioner.js мог загружать только те модули, которые нужны странице.

Чтобы начать, вы можете установить его с помощью npm: npm install conditioner-js Более подробную информацию можно найти на домашней странице проекта .

Это демо в отличие от предыдущих, чтобы лучше проиллюстрировать возможности Conditioner.js. Представьте, что мы хотим показать время, оставшееся до события. Модуль для этого может выглядеть так:

 import moment from 'moment';

export default class RelativeTime {
  /**
   * Enhance given element to show relative time.
   * @param {HTMLElement} element - The element to enhance.
   */
  constructor(element) {
    this.startTime = moment(element.datetime);

    // Update every second
    setInterval(() => this.update(), 1000);
    this.update();
  }

  /**
   * Update displayed relative time.
   */
  update() {
    element.innerHTML = this.startDate.toNow();
  }
}

Инициализация этого модуля так же проста, как:

 <time datetime="2017-01-01" data-module="ui/RelativeTime">2017</time>

Затем кондиционер загрузит модуль ui/RelativeTime Обратите внимание, что контент уже присутствует и находится в приемлемом формате, и модуль только усиливает это.

Если вы хотите, чтобы модуль инициализировался только тогда, когда он виден пользователю, вы можете сделать это с условиями:

 <!-- Show RelativeTime only if it is visible to the user -->
<time datetime="2017-01-01" data-module="ui/RelativeTime" data-conditions="element:{visible}">2017</time>
<!-- Keep showing RelativeTime after it was visible to the user -->
<time datetime="2017-01-01" data-module="ui/RelativeTime" data-conditions="element:{was visible}">2017</time>

Conditioner.js имеет довольно обширный список мониторов, которые вы используете для определения условий. Не волнуйтесь! Вам нужно только включить те, которые вам нужны, чтобы предотвратить включение ненужного кода.

Вы также можете передавать параметры в виде строки JSON или чуть более читаемого варианта JSON.

 <!-- JSON variant -->
<div data-module="ui/RelativeTime" data-options='unit:"seconds"'>...</div>
<!-- Or good old JSON -->
<div data-module="ui/RelativeTime" data-options='{"unit":"seconds"}'>...</div>

Причины использовать или избегать Conditioner.js аналогичны Svelte: если вы заботитесь о площади своего приложения, вам определенно следует рассмотреть возможность использования этой библиотеки. С другой стороны, будущее библиотеки неясно, так как никакие планы на будущее не были объявлены. Conditioner.js позволяет вам определять пользовательские мониторы, позволяя заставить его работать при любой сложной загрузке модуля.

По умолчанию Conditioner.js совместим с браузерами, которые поддерживают ES5. Подобно Vue.js и Svelte, лучшая совместимость может быть достигнута с помощью специальных прокладок ES5 .

Для получения дополнительной информации посетите веб-сайт Conditioner.js или его репозиторий GitHub .

Вывод

Я думаю, что эти фреймворки и библиотека будут хорошими в 2017 году. Хотя я не фанат фреймворков, я считаю, что и Vue.js, и Svelte предпринимают шаги в правильном направлении для решения проблем, существующих в существующих фреймворках, что может привести к тому, что отрасль переход к новым способам построения или определения вещей. Любое улучшение — это изменение, которого я жду с нетерпением.

У меня сложилось впечатление, что создание приложений на основе компонентов рассматривается как путь. Хотя я не ожидаю, что в результате Conditioner.js произойдет серьезный сдвиг, он определенно решает проблемы, которые, на мой взгляд, довольно часто встречаются в компонентных приложениях, что делает его отличным дополнением для более сложной загрузки.

Какие библиотеки вы ожидаете, чтобы быть отличным в 2017 году? Пожалуйста, дайте нам знать ваши мысли в разделе комментариев!