Web Components Whats the Catch? TJ VanToll | @tjvantoll - - PowerPoint PPT Presentation

web components what s the catch
SMART_READER_LITE
LIVE PREVIEW

Web Components Whats the Catch? TJ VanToll | @tjvantoll - - PowerPoint PPT Presentation

Web Components Whats the Catch? TJ VanToll | @tjvantoll Kendo UI jQuery UI UI libraries are seen as the ideal use case for web


slide-1
SLIDE 1

Web ¡Components— ¡ What’s ¡the ¡Catch? ¡

TJ ¡VanToll ¡| ¡@tjvantoll ¡

slide-2
SLIDE 2

Kendo ¡UI ¡ jQuery ¡UI ¡

slide-3
SLIDE 3

UI ¡libraries ¡are ¡seen ¡as ¡the ¡ideal ¡use ¡ case ¡for ¡web ¡components ¡

slide-4
SLIDE 4

hEps://github.com/tjvantoll/ui-­‑web-­‑components ¡

Proof-­‑of-­‑concept ¡rewrite ¡of ¡a ¡few ¡ jQuery ¡UI ¡widgets ¡to ¡use ¡web ¡ components ¡

slide-5
SLIDE 5

Web ¡components’ ¡public ¡image ¡

  • “[T]he ¡Web ¡Components ¡revoluOon” ¡

– hEp://webcomponents.org/presentaOons/polymer-­‑and-­‑ the-­‑web-­‑components-­‑revoluOon-­‑at-­‑io/ ¡ ¡

  • “Web ¡components ¡are ¡a ¡game ¡changer” ¡

– hEp://webcomponents.org/presentaOons/polymer-­‑and-­‑ web-­‑components-­‑change-­‑everything-­‑you-­‑know-­‑about-­‑web-­‑ development-­‑at-­‑io/ ¡ ¡

  • “Web ¡Components ¡Are ¡The ¡Future ¡Of ¡Web ¡

Development” ¡

– http://techcrunch.com/2013/05/19/google- believes-web-components-are-the-future-of- web-development/ ¡

slide-6
SLIDE 6

Web ¡components’ ¡public ¡image ¡

  • “A ¡Tectonic ¡ShiW ¡for ¡Web ¡Development” ¡

– hEps://developers.google.com/events/io/2013/ sessions/318907648 ¡ ¡

  • “Join ¡the ¡Web ¡Components ¡revoluOon” ¡

– hEp://www.ibm.com/developerworks/library/wa-­‑ polymer/ ¡ ¡

  • “Web ¡Components ¡usher ¡in ¡a ¡new ¡era ¡of ¡web ¡

development” ¡

– https://www.polymer-project.org/ ¡

slide-7
SLIDE 7

Web ¡components’ ¡public ¡image ¡

  • “Web ¡Components ¡-­‑ ¡A ¡Quantum ¡Leap ¡in ¡Web ¡

Development” ¡

– hEp://lanyrd.com/2014/qconsf/sddqc/ ¡ ¡

  • “The ¡Dawn ¡of ¡the ¡Reusable ¡Web” ¡

– hEp://www.codemash.org/session/the-­‑dawn-­‑of-­‑the-­‑ reusable-­‑web-­‑diving-­‑into-­‑web-­‑components/ ¡ ¡

  • “Web ¡Components ¡are ¡ushering ¡in ¡a ¡HTML ¡

renaissance” ¡

– hEp://addyosmani.com/blog/video-­‑componenOze-­‑ the-­‑web-­‑talk-­‑from-­‑lxjs/ ¡ ¡

slide-8
SLIDE 8

The ¡catch ¡

  • Polyfilling ¡shadow ¡DOM ¡
  • Resolving ¡HTML ¡import ¡dependencies ¡
  • Changing ¡form ¡elements’ ¡UI ¡
  • Browser ¡support ¡
slide-9
SLIDE 9

The ¡catch ¡

  • Polyfilling ¡shadow ¡DOM ¡
  • Resolving ¡HTML ¡import ¡dependencies ¡
  • Changing ¡form ¡elements’ ¡UI ¡
  • Browser ¡support ¡
slide-10
SLIDE 10

Shadow ¡DOM ¡ (naOve ¡behavior ¡in ¡Chrome) ¡

slide-11
SLIDE 11

Shadow ¡DOM ¡ (polyfilled ¡behavior ¡in ¡Safari) ¡ ¡

slide-12
SLIDE 12

Shimming ¡DOM ¡APIs ¡

https://github.com/webcomponents/webcomponentsjs/blob/4c5f21610c6cea02c74beaa3a25cd8075807ce31/src/ ShadowDOM/querySelector.js#L193-209 ¡

slide-13
SLIDE 13

Shim ¡all ¡the ¡things! ¡

https://github.com/Polymer/ShadowDOM/tree/master/src/wrappers ¡

slide-14
SLIDE 14

Polyfilling ¡CSS ¡selectors ¡

  • The ¡shadow ¡DOM ¡specificaOon ¡introduces ¡a ¡

lot ¡of ¡new ¡CSS ¡things. ¡

– ::shadow, ¡::content, ¡/deep/, ¡etc ¡

  • Browsers ¡discard ¡CSS ¡selectors, ¡properOes, ¡

and ¡rules ¡they ¡don’t ¡understand. ¡

  • For ¡polyfilling ¡your ¡only ¡recourse ¡is ¡to ¡run ¡text ¡

searches ¡on ¡CSS ¡files. ¡

slide-15
SLIDE 15

https://github.com/webcomponents/webcomponentsjs/blob/9e5c7b527de95178a149db6f41b94bb4bfcd79db/src/ ShadowCSS/ShadowCSS.js ¡

slide-16
SLIDE 16
slide-17
SLIDE 17

Why ¡this ¡maEers? ¡

  • It’s ¡hard ¡to ¡tell ¡what ¡is ¡polyfilled ¡and ¡what ¡

isn’t ¡

  • Complexity ¡adversely ¡affects ¡file ¡size ¡and ¡

performance ¡

– The ¡latest ¡version ¡of ¡the ¡shadow ¡DOM ¡polyfill ¡is ¡ 69KB ¡minified, ¡19KB ¡minified ¡and ¡gzipped. ¡

  • Chrome ¡is ¡the ¡only ¡browser ¡shipping ¡shadow ¡
  • DOM. ¡
slide-18
SLIDE 18

Polymer ¡

  • Polymer ¡0.8 ¡no ¡longer ¡requires ¡the ¡shadow ¡

DOM ¡polyfill ¡

https://www.polymer-project.org/0.8/ ¡

slide-19
SLIDE 19

The ¡catch ¡

  • Polyfilling ¡shadow ¡DOM ¡
  • Resolving ¡HTML ¡import ¡dependencies ¡
  • Changing ¡form ¡elements’ ¡UI ¡
  • Browser ¡support ¡
slide-20
SLIDE 20

HTML ¡Imports ¡

Awesomely ¡concise ¡and ¡easy ¡to ¡use ¡syntax, ¡but… ¡

slide-21
SLIDE 21

HTML ¡Imports ¡

  • How ¡to ¡depend ¡on ¡a ¡third-­‑party ¡resource—

e.g. ¡Bootstrap, ¡jQuery, ¡Moment, ¡Polymer, ¡ etc? ¡

  • Deduping ¡

– If ¡two ¡components ¡request ¡a ¡resource ¡from ¡the ¡ same ¡URL, ¡supporOng ¡browsers ¡are ¡smart ¡enough ¡ to ¡suppress ¡the ¡second ¡request. ¡

slide-22
SLIDE 22

What ¡URL ¡to ¡use? ¡

  • Only ¡avoids ¡duplicate ¡requests ¡if ¡path ¡is ¡EXACTLY ¡the ¡

same ¡(i.e. ¡same ¡protocol, ¡host, ¡version, ¡file ¡name) ¡

  • Enforces ¡a ¡folder ¡structure ¡on ¡users ¡of ¡your ¡component. ¡

Also ¡assumes ¡component ¡authors ¡always ¡use ¡the ¡same ¡file ¡ name ¡(i.e. ¡moment.js ¡and ¡not ¡moment.min.js) ¡

slide-23
SLIDE 23

Firefox’s ¡decision ¡

  • “Mozilla ¡will ¡not ¡ship ¡an ¡implementa1on ¡of ¡

HTML ¡Imports. ¡We ¡expect ¡that ¡once ¡JavaScript ¡ modules ¡— ¡a ¡feature ¡derived ¡from ¡JavaScript ¡ libraries ¡wriCen ¡by ¡the ¡developer ¡community ¡ — ¡is ¡shipped, ¡the ¡way ¡we ¡look ¡at ¡this ¡problem ¡ will ¡have ¡changed.” ¡

https://hacks.mozilla.org/2014/12/mozilla-and-web-components/ ¡

slide-24
SLIDE 24

The ¡catch ¡

  • Polyfilling ¡shadow ¡DOM ¡
  • Resolving ¡HTML ¡import ¡dependencies ¡
  • Changing ¡form ¡elements’ ¡UI ¡
  • Browser ¡support ¡
slide-25
SLIDE 25

https://twitter.com/slicknet/status/484386690421645313 ¡

slide-26
SLIDE 26

Web ¡components ¡are ¡seen ¡as ¡a ¡ panacea ¡for ¡these ¡type ¡of ¡issues ¡

slide-27
SLIDE 27

Good ¡news: ¡You ¡can ¡write ¡custom ¡ elements ¡that ¡extend ¡naOve ¡form ¡ elements ¡

slide-28
SLIDE 28

Bad ¡news: ¡Custom ¡elements ¡don’t ¡ give ¡you ¡any ¡special ¡control ¡over ¡the ¡ UI ¡of ¡naOve ¡form ¡elements. ¡

slide-29
SLIDE 29
slide-30
SLIDE 30
  • Chrome ¡31’s ¡shadow ¡DOM ¡implementaOon ¡

lets ¡you ¡replace ¡the ¡shadow ¡root ¡of ¡<input> ¡ elements, ¡which ¡lets ¡you ¡alter ¡the ¡default ¡UI. ¡

slide-31
SLIDE 31
  • Bad ¡news: ¡When ¡you ¡remove ¡an ¡input’s ¡shadow ¡

root ¡that ¡element ¡loses ¡its ¡naOve ¡funcOonality: ¡

– You ¡can’t ¡type ¡in ¡it ¡ – There’s ¡no ¡HTML5 ¡form ¡validaOon ¡ – It’s ¡basically ¡not ¡an ¡<input> ¡anymore. ¡

  • Bo+om ¡line: ¡Web ¡components ¡don’t ¡currently ¡
  • ffer ¡a ¡soluOon ¡to ¡styling ¡form ¡elements. ¡
slide-32
SLIDE 32

Form ¡elements ¡are ¡a ¡common ¡reason ¡ people ¡use ¡UI ¡libraries ¡

  • jQuery ¡UI ¡

– Autocomplete ¡ – Datepicker ¡ – Selectmenu ¡ – Slider ¡ – Spinner ¡

  • Kendo ¡UI ¡

– AutoComplete ¡ – ColorPicker ¡ – ComboBox ¡ – DatePicker ¡ – DateTimePicker ¡ – DropDownList ¡ – Editor ¡ – MulOSelect ¡ – NumericTextBox ¡ – Slider ¡ – TimePicker ¡ – Upload ¡

slide-33
SLIDE 33

The ¡catch ¡

  • Polyfilling ¡shadow ¡DOM ¡
  • Resolving ¡HTML ¡import ¡dependencies ¡
  • Changing ¡form ¡elements’ ¡UI ¡
  • Browser ¡support ¡
slide-34
SLIDE 34

Browser ¡support ¡

  • One ¡of ¡the ¡biggest ¡things ¡holding ¡back ¡web ¡

components ¡is ¡lack ¡of ¡browser ¡support. ¡

– Related: ¡water ¡is ¡wet; ¡the ¡sun ¡is ¡hot ¡

  • jQuery ¡UI ¡/ ¡Kendo ¡UI ¡have ¡to ¡be ¡very ¡

cognizant ¡of ¡file ¡size ¡and ¡almost ¡never ¡use ¡ polyfills ¡other ¡than ¡those ¡in ¡jQuery ¡Core. ¡

  • The ¡web ¡components ¡polyfills ¡don’t ¡support ¡a ¡

lot ¡of ¡the ¡browsers ¡jQuery ¡UI ¡/ ¡Kendo ¡UI ¡ support ¡today ¡(IE ¡8–10, ¡Android ¡2.3–4.4)1. ¡

1: https://github.com/webcomponents/webcomponentsjs/#browser-support ¡

slide-35
SLIDE 35

My ¡advice ¡

  • Think ¡of ¡web ¡components ¡as ¡4 ¡separate ¡

technologies ¡that ¡may ¡be ¡able ¡to ¡help ¡your ¡

  • apps. ¡

– Shadow ¡DOM ¡ – HTML ¡imports ¡ – <template> ¡ – Custom ¡elements ¡

slide-36
SLIDE 36

Shadow ¡DOM ¡

  • Complex, ¡big, ¡and ¡slow ¡polyfill ¡
  • Chrome ¡has ¡the ¡only ¡implementaOon ¡

– Firefox ¡working ¡on ¡supporOng ¡but ¡working ¡ through ¡a ¡number ¡of ¡issues1 ¡

  • Provides ¡more ¡value ¡to ¡frameworks ¡than ¡

individual ¡apps ¡

  • My ¡recommendaOon: ¡Hold ¡off ¡

¡

1: https://github.com/w3c/webcomponents/wiki/Shadow-DOM:-Contentious-Bits & https://lists.w3.org/Archives/Public/public-webapps/2015AprJun/0052.html

slide-37
SLIDE 37

HTML ¡Imports ¡

  • Chrome ¡has ¡the ¡only ¡stable ¡implementaOon ¡

– Firefox ¡is ¡holding ¡off1 ¡

  • No ¡good ¡soluOon ¡to ¡manage ¡third-­‑party ¡

dependencies ¡

  • My ¡recommendaOon: ¡Hold ¡off ¡

1: https://hacks.mozilla.org/2014/12/mozilla-and-web-components/

slide-38
SLIDE 38

<template> ¡

  • Chrome, ¡Firefox, ¡and ¡Safari ¡all ¡have ¡

implementaOons ¡

  • A ¡way ¡to ¡add ¡inert ¡DOM ¡elements ¡to ¡your ¡

document ¡

– Most ¡common ¡use ¡case ¡is ¡a ¡replacement ¡for ¡<script ¡ type=“text/html”> ¡

  • Not ¡something ¡that’s ¡going ¡to ¡revoluOonize ¡your ¡

apps ¡

  • My ¡recommendaOon: ¡Hold ¡off ¡unOl ¡browser ¡

support ¡is ¡ubiquitous ¡ ¡

slide-39
SLIDE 39

Custom ¡elements ¡

  • Chrome ¡has ¡the ¡only ¡implementaOon ¡
  • RelaOvely ¡easy ¡to ¡polyfill ¡

– Polyfills ¡have ¡much ¡beEer ¡browser ¡support ¡

  • Provide ¡a ¡lot ¡of ¡value ¡(creaOng ¡custom ¡HTML ¡

elements) ¡with ¡relaOvely ¡liEle ¡downside ¡

  • My ¡recommendaOon: ¡Use! ¡
slide-40
SLIDE 40

Custom ¡elements ¡polyfills ¡

  • hEps://github.com/webcomponents/

webcomponentsjs/ ¡

– Evergreen ¡browsers, ¡IE9+, ¡Android ¡4+ ¡

  • hEps://github.com/WebReflecOon/document-­‑

register-­‑element ¡

– Evergreen ¡browsers, ¡IE8+, ¡iOS ¡5+, ¡Android ¡2.2+ ¡ – 2.5K! ¡

slide-41
SLIDE 41

¡Custom ¡elements ¡API ¡improvements ¡

slide-42
SLIDE 42

Why ¡I’m ¡personally ¡excited ¡for ¡custom ¡ elements ¡

  • One ¡of ¡the ¡more ¡common ¡requests ¡we ¡get ¡at ¡

jQuery ¡UI ¡and ¡Kendo ¡UI ¡is ¡for ¡integraOon ¡with ¡

  • r ¡compaObility ¡with ¡{{ ¡framework ¡}}. ¡
slide-43
SLIDE 43
slide-44
SLIDE 44
slide-45
SLIDE 45
slide-46
SLIDE 46

Kendo ¡UI ¡provides ¡official ¡Angular ¡ direcOves ¡for ¡both ¡Kendo ¡UI ¡Core ¡and ¡ Professional ¡

  • Kendo ¡UI ¡Core ¡

– hEps://github.com/telerik/kendo-­‑ui-­‑core ¡ ¡ – 30+ ¡widgets ¡ – Free ¡to ¡use ¡and ¡open ¡source ¡

  • Kendo ¡UI ¡Professional ¡

– ~10 ¡widgets ¡

  • Grid, ¡Charts, ¡Schedulers, ¡Editors ¡ ¡

– Commercial ¡product ¡

slide-47
SLIDE 47
slide-48
SLIDE 48
slide-49
SLIDE 49

It’s ¡silly ¡to ¡reinvent ¡the ¡wheel ¡every ¡ Ome ¡a ¡new ¡framework ¡comes ¡out. ¡ ¡ ¡

slide-50
SLIDE 50

Wrapping ¡up ¡

  • Ignore ¡the ¡hype; ¡evaluate ¡web ¡components ¡

for ¡yourself. ¡

  • Try ¡each ¡of ¡the ¡web ¡components ¡technologies ¡
  • individually. ¡
  • Start ¡with ¡custom ¡elements. ¡
slide-51
SLIDE 51

Resources ¡

  • Guide ¡to ¡using ¡custom ¡elements ¡

– http://developer.telerik.com/featured/web- components-ready-production/ ¡

  • Simple ¡custom ¡element ¡example—<clock-­‑face> ¡

– https://github.com/tjvantoll/clock-face ¡

  • GitHub’s ¡extension ¡to ¡the ¡<Ome> ¡element ¡

– https://github.com/github/time-elements ¡

  • Angelina ¡Fabbro: ¡Web ¡Components—Drunk ¡on ¡

the ¡Panacea ¡(more ¡detail ¡than ¡I’ve ¡been ¡able ¡to ¡ get ¡into) ¡

– hEps://vimeo.com/110972839 ¡ ¡

slide-52
SLIDE 52

Thanks! ¡

¡ TJ ¡VanToll ¡ hEp://tjvantoll.com ¡ hEp://twiEer.com/tjvantoll ¡