Зрозуміло і просто про веб-компоненти та Polymer

просто

Я Олександр Кашеверів. За освітою – магістр радіофізики. За професією – веб-розробник, працюю в компанії DataArt з 2011 року, з 2009 захоплююсь IT та веб-технологіями.

Розглянемо, що таке веб-компоненти та polymer. Трохи поміркуємо на тему розвитку Інтернету. Подивімося на технічні деталі, приклади, підтримку браузерами, тестування. Коротко, зрозуміло, у справі. З картинками.

Вступ

Інтернет постійно розвивається. Технології були придумані та впроваджені, виходячи із потреб, актуальних на момент створення. Десять років тому неможливо було зробити те, що ми реалізуємо зараз, і важко уявити, що буде ще за 10 років.

Бізнес вимагає створення великих та складних програмних веб-продуктів із багатою функціональністю, красою, високою продуктивністю. Такі рішення нетривіальні власними силами, так ще й накладається специфічність веб-технологій. Найчастіше, щоб зменшити складність продукту, його поділяють на безліч простіших частин. Такий компонентний підхід зменшує хаос, покращує структуру, зрозумілість, збільшує ефективність командної роботи.

Для зменшення головного болю добре, якщо в контексті веб:

зрозуміло

Веб-компоненти - коротко

Інтернет повільно, але чітко рухається до компонентизації - це природний процес. Складне можна спростити, розбивши на частини. Паралельно розвитку фреймворків йде робота і нижчому рівні. Набирають популярності веб-компоненти. Це реалізація ідеї компонентизації лише на рівні браузера.

Історія веб-компонентів почалася в 2011 році (перша згадка на github). Коротко - що це:

  • Custom Elements – створення своїх html-елементів, доповнення існуючих.
  • Shadow DOM - інкапсуляція логіки та стилів.
  • Templates – шаблони на рівні браузера!
  • HTML imports — замість підключення різних файлів [css, js, . ] можна підключати один HTML-документ, що включає всі інші файли.

При використанні цих чотирьох технологій разом, виходять автономні блоки, що перевикористовуються, — веб-компоненти.

Насправді, подібність веб-компонентів вже було створено давно. Найпростіший приклад - елемент

Polymer

Так само і з HTML5 елементами.

У цьому є суть веб-компонентів — створення простих і зрозумілих незалежних елементів із прихованою логікою, стилями.

Напевно, багато хто підключав до проекту Bootstrap — для цього потрібно окремо прописати підвантаження стилів і скриптів. З компонентами це можна було б зробити простіше.

Веб-компоненти - не фреймворк. Це набір технологій, реалізованих лише на рівні браузера.

Веб-компоненти - підтримка браузерами & polyfills

просто

Оскільки веб-компоненти мають високу цінність, але, як завжди, не підтримуються всіма браузерами, створюються способи поліпшити підтримку. Так з'явилися поліфіли.

З їх допомогою підтримка браузерами вже краще.

просто

На веб-сторінці поліфіли підключається стандартно в head (до всіх скриптів, які використовують веб-компоненти):

Веб-компоненти - посилання

  • learn.javascript.ru - навчання.
  • w3.org - (eng) специфікація веб-компонентів.
  • css-tricks.com (eng) - огляд.
  • youtube.com - (eng) огляд.
  • webcomponents.org — (eng) обговорення та найкращі практики.
  • github.com - (eng) polyfills для підтримки старими браузерами.
  • developer.mozilla.org - (eng) навчання.
  • caniuse.com - (eng) підтримка браузерами.
  • jonrimmer.github.io - (eng) підтримка браузерами.

Тим часом Google все спрощує і розвиває. Робота почалася восени 2012 року, судячи з історії коммітів на github. Вони взяли веб-компоненти, поліфіли та створили ще одну надбудову.

Мета Polymer - спростити створення якісних веб-застосунків (цитата product manager з конференції Google IO).

Polymer - коротко

Бібліотека є веб-компонентами в основі, поліфіли для підтримки старих браузерів, це все обернено в цілісну зручнішу систему з додаванням цукру.

Схематично це виглядає так:

просто

Google створив набір готових компонентів та розділив їх на логічні частини:

зрозуміло
Основні будівельні блоки, , , …
просто
Елементи на основі iron-elements та material design

, .

Polymer
Колекція веб-компонентів, які використовують різні API Google, , , …
Polymer
Елементи, специфічні для інтернет-комерції, , , .
веб-компоненти
Елементи для створення анімацій
веб-компоненти
Елементи, які допомагають створити з веб-сторінки цей додаток

, .

просто
Елементи-обгортки інших бібліотек/додатків

Можна зауважити, що постійно фігурує слово «елемент». Google вважає, що для всього можна зробити елемент. "There is an element for that" ("для цього є елемент") - звучить, як слоган у доповідях Google IO 2015.

Так, навіть для ajax запит є елемент. Виглядає так:

При створенні програм ми стикаємося з приблизно однаковими завданнями, і Google пропонує набір готових будівельних блоків для цього. З якою б проблемою ми не зіткнулися — для її вирішення є елемент. "There is an element for that". Створено каталог готових Polymer-компонентів.

Polymer – не фреймворк, як і веб-компоненти – не фреймворк. Polymer – це обгортка та цукор. Я б ідейно її порівняв із jQuery. jQuery призначена для роботи з DOM, а Polymer — для роботи з веб-компонентами.

Polymer - тестування

Так, він тестується, і для цього створено окрему утиліту web-component-tester. Зрозумілий опис.

Пробував. Працює (при встановленні можуть виникнути проблеми з Java та Selenium).

Декілька кроків, щоб запрацювало:

    Встановити

Написати тест, просто html файл (за замовчуванням, у папці `./test`):

Polymer - підтримка браузерами

Polymer — цукор веб-компонента, тому і підтримка браузерами така сама. Таблиці були представлені вище.

Polymer - оптимізація vulcanize

HTML imports дозволяє швидко та зручно підключити документ до іншого документа, але в цій зручності ховається і проблема продуктивності: створюється безліч http-запитів. Рішення є - з'єднати всі файли, що підключаються в один. Для цього служить утиліта vulcanize.

Polymer - starter kit

Для зручності створення проектів є утиліта Polymer Starter Kit. Після встановлення відразу доступна безліч корисної функціональності. Зібрано в коробку:

  • Polymer-, Paper-, Iron-і Neon-елементи.
  • Material Design-верстка.
  • Роутінг з Page.js.
  • Юніт тести за допомогою Web Component Tester.
  • Підтримка офлайн-роботи за допомогоюPlatinum Service Worker.
  • Створення білду (включаючи Vulcanize).
  • ES2015-підтримка.

Polymer - альтернативи

Polymer – лише надбудова над веб-компонентами. Є й інші подібні продукти:

  • bosonic.github.io;
  • x-tags.org (з підтримкою IE9)

Polymer - посилання

  • polymer-project.org - (eng) сайт проекту Polymer з описом, уроками.
  • elements.polymer.com — (eng) офіційний каталог компонентів.
  • github.com - (eng) оптимізатор Vulcanize.
  • github.com — (eng) Polymer Starter Kit.
  • youtube.com — (eng) Google IO 2013.
  • youtube.com — (eng) Google IO 2014.
  • youtube.com — (eng) Google IO 2015.
  • sitepoint.com - (eng) навчання.
  • aerotwist.com — (eng) трохи про оптимізацію та продуктивність.
  • polymer-project.org - (eng) підтримка браузерами.
  • bosonic.github.io — (eng) аналог Polymer.
  • x-tags.org - (eng) аналог Polymer.

Polymer - про взаємодію з бібліотеками

  • Angular 2
  • Веб-компоненти будуть запроваджені в Angular 2: angularjs.blogspot.ru (eng).
  • React Офіційний представник від React Sebastian Markbage говорить, що вони не будуть використовувати веб-компоненти спільно з React, тому що вони ідеологічно різні (декларативний React проти імперативних веб-компонентів): docs.google.com (eng). Однак, React та веб-компоненти сумісні, у деяких випадках є користь: youtube.com (eng).
  • Backbone Зручно схрестити з готовими компонентами (Polymer, X-Tags, Bosonic). Використовуються так само, як звичайні HTML-елементи. webcomponents.org(eng).

Веб-компоненти та Polymer - приклади

Розглянемо простий приклад веб-компонента та його Polymer-реалізацію:

Приклад чистого веб-компонента:

Використовуємо на сторінці (у

З Polymer буде виглядати помітно зрозуміліше і простіше: