SlideShare une entreprise Scribd logo
1  sur  24
Télécharger pour lire hors ligne
2014.07.31 / 박재성
Polymer is a library that makes
building applications easier.
Is built on Web Components.
”
“
재사용 가능한 컴포넌트를 만들 수 있는 표준 기술들의 모
음
Custom Elements – 커스텀 태그를 통한 요소 생성
HTML Imports – HTML 페이지 로딩
HTML Templates - 템플릿
Shadow DOM – DOM과 스타일의 캡슐화
커스텀 태그를 통한 요소 생성
▪ 새로운 HTML 요소를 생성
▪ 다른 요소를 확장해 생성가능
▪ 단일 태그에 커스텀 기능의 묶음 가능
▪ 기존 DOM 요소의 API를 확장
// 1. HTML 객체 생성
var XFooProto = Object.create(HTMLElement.prototype);
// 2. ‘hi’ 메서드 추가
XFooProto.hi = function() { alert('foo() called'); };
// 3. 읽기 전용 ‘bar’ 속성 설정
Object.defineProperty(XFooProto, "bar", {value: 5});
// 4. <x-foo> 태그 등록
var XFoo = document.registerElement('x-foo', {prototype: XFooProto});
HTML Imports – HTML 페이지를 로딩
▪ JS/HTML/CSS를 묶음 형태로 사용  단일 URL 호출
▪ HTML import를 통한 추가되는 컴포넌트들은 중복되는 경우라도 호출,
파싱 및 실행은 단 한 번만 수행
▪ 다른 도메인의 리소스를 로딩하기 위해선 CORS 활성화 필요
▪ Import 내의 스크립트는 메인 문서의 파싱을 블럭하지 않음
▪ 스크립트는 import 시 실행되나, 다른 요소(마크업, CSS 등)들은
메인 페이지에 추가되는 시점에 활성화
HTML Imports – HTML 페이지를 로딩
some.html
main.html
<head><link rel="import" href="some.html"></head>
<body>
<script>
var link = document.querySelector('link[rel="import"]');
var content = link.import;
var el = content.querySelector('.warning');
document.body.appendChild(el.cloneNode(true));
</script>
</body>
<script> console.log(123);</script>
<div class="warning">
<style> h3 { color: red; } </style>
<h3>Warning!</h3>
<p>This page is under construction</p>
</div>
▪ 비활성화 상태의 복제 가능한 DOM chunk
▪ 새로운 태그 : <template> … </template>
▪ 태그 내의 태그들은 사용되기 전까진 파싱은 되나 렌더링되지 않음
▪ 컨텐츠는 클론/사용 되기전까진 비활성
▪ 페이지의 일부분이 아님
재사용을 위한 템플릿
재사용을 위한 템플릿
// 1. 템플릿 컨텐츠를 얻어온다.
var content = document.getElementById("count").content;
// 2. 템플릿내의 DOM에 대한 작업을 한다.
var span = content.querySelector('span');
span.textContent = parseInt(span.textContent) + 1;
// 3. 메인 DOM에 추가한다.
document.body.appendChild(document.importNode(content, true));
<template id="count">
<div>Template used: <span>0</span></div>
<script>alert('클릭하셨네요!');</script>
</template>
▪ 별도의 스코프를 갖는 DOM
▪ 폴리머에서 생성하는 모든 요소들은 shadow DOM으로 처리
DOM과 스타일의 캡슐화
<h3>제목</h3>
<div id="scoped"><h3>Light DOM</h3></div>
<script>
var el = document.getElementById('scoped');
var root = el.createShadowRoot();
root.innerHTML = '<style>h3{ color: red; }</style><h3>Shadow DOM</h3>';
</script>
DOM과 스타일의 캡슐화
<button id="btn" onclick="shadow()">Hello, world!</button>
<script>
function shadow() {
var host = document.getElementById("btn");
// 1. shadow root 생성
var root = host.createShadowRoot();
// 2. shadow DOM의 내용 변경
root.textContent = '안녕하세요!';
}
</script>
document.
getElementById("btn").
innerHTML?
태그 형태로 특정 기능을 갖는 UI 컴포넌트들을 손쉽게 삽입할 수 있으며,
재사용이 가능해 진다.
<body>
<google-map
latitude="37.3596274“
longitude="127.105464“
zoom="17“
fitToMarkers="true">
<google-map-marker
latitude="37.3596274“
longitude="127.105464“
title="그린팩토리"></google-map-marker>
</google-map>
</body>
<paper-input label="Your Name"></paper-input><br>
<paper-input multiline label="Enter multiple lines here"></paper-input>
<paper-tabs id="tabs" valueattr="name" selected="all" self-end>
<paper-tab name="all">All</paper-tab>
<paper-tab name="favorites">Favorites</paper-tab>
</paper-tabs>
<paper-toggle-button></paper-toggle-button>
<paper-checkbox id="chkitem"></paper-checkbox>
 platform.js
 polymer.js
▪ Core Elements
▪ Paper Elements
브라우저가 네이티브 하게 지원하지 않는 기능을 사용 가능하도록 만들어
주는 코드 모음
Web Components polyfill :
▪ Mozilla X-Tag : http://www.x-tags.org/
▪ Google Polymer : http://www.polymer-project.org/
 http://remysharp.com/2010/10/08/what-is-a-polyfill/
Chrome Firefox IE Android iOS
HTML Templates 26+ 22+ N/A 4.4+ 8+
HTML Imports 36+ N/A N/A N/A N/A
Custom Elements 33+ N/A N/A N/A N/A
Shadow DOM 25+ 32+ N/A 4.4+ N/A
▪ Polymer는 Evergreen Browser*에서 문제없는 실행을 목표
http://www.polymer-project.org/resources/compatibility.html
*Evergreen Web Browser is a web browser that automatically updates itself on startup.
유틸리티 요소와 공통적 UI 요소들의 모음
Ajax, 애니메이션, 드래그&드롭, 아이콘 모음, 툴팁, etc.
http://www.polymer-project.org/docs/elements/core-elements.html
Material design*이 적용된 UI 요소들의 모음
버튼, 체크박스, 다이얼로그, 입력요소, 탭, 토스트, etc.
http://www.polymer-project.org/docs/elements/paper-elements.html
http://www.polymer-
project.org/docs/elements/paper-elements.html
▪ 이미 만들어진 요소들을 사용하는 방법
1. 사용할 요소를 페이지에 삽입
2. 새로 추가된 요소를 태그로 선언
$ bower install Polymer/paper-checkbox
 현재 폴더의 ./components/paper-checkbox/
<link rel="import" href="components/paper-checkbox/paper-checkbox.html">
<paper-checkbox></paper-checkbox>
▪ 직접 요소를 생성하는 방법
1. 요소에 해당되는 페이지 작성
a) Polymer core를 페이지에 삽입
b) <polymer-element>를 사용해 새로운 태그 등록
<link rel="import" href="../components/polymer/polymer.html">
<polymer-element name="사용자정의-태그" noscript>
<template>
<span>내용</span>
</template>
</polymer-element>
2. 사용될 페이지에서 요소 페이지 삽입 후, 태그로 선언
<head>
<script src="../components/platform/platform.js"></script>
<link rel="import" href="./파일.html">
</head>
<body>
<사용자정의-태그></사용자정의-태그>
</body>
▪ 사용되는 웹 컴포넌트 파일들을 병합해 HTTP request를 줄일 수 있도록
해주는 도구
$ vulcanize 대상파일.html --inline --strip -o 결과파일.html
https://github.com/Polymer/vulcanize
http://component.kitchen/
http://customelements.io/
http://googlewebcomponents.github.io/
▪ WebComponents.org
http://webcomponents.org/
▪ Google I/O 2014 - Polymer and Web Components change everything you know about Web
development
https://www.youtube.com/watch?v=8OJ7ih8EE7
▪ Google I/O 2014 - Polymer and the Web Components revolution
https://www.youtube.com/watch?v=yRbOSdAe_JU
▪ Google I/O 2014 - Unlock the next era of UI development with Polymer
https://www.youtube.com/watch?v=HKrYfrAzqFA
▪ Custom Elements
http://www.html5rocks.com/en/tutorials/webcomponents/customelements/
▪ HTML Imports
http://www.html5rocks.com/en/tutorials/webcomponents/imports/
▪ HTML's New Template Tag
http://www.html5rocks.com/en/tutorials/webcomponents/template/
▪ Shadow DOM
http://www.html5rocks.com/en/tutorials/webcomponents/shadowdom/
혁신적인 웹컴포넌트 라이브러리 - Polymer

Contenu connexe

Tendances

AngularJS In Production
AngularJS In ProductionAngularJS In Production
AngularJS In ProductionMooYeol Lee
 
Polymer Codelab: Before diving into polymer
Polymer Codelab: Before diving into polymerPolymer Codelab: Before diving into polymer
Polymer Codelab: Before diving into polymerChang W. Doh
 
Front end dev 2016 & beyond
Front end dev 2016 & beyondFront end dev 2016 & beyond
Front end dev 2016 & beyondJae Sung Park
 
React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작Taegon Kim
 
Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나JeongHun Byeon
 
Meteor 0.3.6 Preview
Meteor 0.3.6 PreviewMeteor 0.3.6 Preview
Meteor 0.3.6 PreviewJuntai Park
 
Vuejs 시작하기
Vuejs 시작하기Vuejs 시작하기
Vuejs 시작하기성일 한
 
AngularJS의 개발방식에 대하여
AngularJS의 개발방식에 대하여AngularJS의 개발방식에 대하여
AngularJS의 개발방식에 대하여Jin wook
 
막하는 스터디 네 번째 만남 AngularJs (20151108)
막하는 스터디 네 번째 만남 AngularJs (20151108)막하는 스터디 네 번째 만남 AngularJs (20151108)
막하는 스터디 네 번째 만남 AngularJs (20151108)연웅 조
 
Hacosa js study 4주차
Hacosa js study 4주차Hacosa js study 4주차
Hacosa js study 4주차Seong Bong Ji
 
Clean Front-End Development
Clean Front-End DevelopmentClean Front-End Development
Clean Front-End Development지수 윤
 
Angularjs 도입 선택 가이드
Angularjs 도입 선택 가이드Angularjs 도입 선택 가이드
Angularjs 도입 선택 가이드NAVER D2
 
Vue SSR vs Prerender
Vue SSR vs PrerenderVue SSR vs Prerender
Vue SSR vs PrerenderChangwan Jun
 
웹 Front-End 실무 이야기
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기JinKwon Lee
 
자바스크립트의 또다른 발전, Backbone.js
자바스크립트의 또다른 발전, Backbone.js자바스크립트의 또다른 발전, Backbone.js
자바스크립트의 또다른 발전, Backbone.jsJinKwon Lee
 
Angular2를 활용한 컴포넌트 중심의 개발
Angular2를 활용한 컴포넌트 중심의 개발Angular2를 활용한 컴포넌트 중심의 개발
Angular2를 활용한 컴포넌트 중심의 개발Jin wook
 
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기Chang W. Doh
 
AngularJS 2, version 1 and ReactJS
AngularJS 2, version 1 and ReactJSAngularJS 2, version 1 and ReactJS
AngularJS 2, version 1 and ReactJSKenneth Ceyer
 
[DevOn 2013] Backbone.js로 능동적 M-V 디자인 구현하기
[DevOn 2013] Backbone.js로 능동적  M-V 디자인 구현하기[DevOn 2013] Backbone.js로 능동적  M-V 디자인 구현하기
[DevOn 2013] Backbone.js로 능동적 M-V 디자인 구현하기Gyutae Jo
 

Tendances (20)

AngularJS In Production
AngularJS In ProductionAngularJS In Production
AngularJS In Production
 
Handlebars
HandlebarsHandlebars
Handlebars
 
Polymer Codelab: Before diving into polymer
Polymer Codelab: Before diving into polymerPolymer Codelab: Before diving into polymer
Polymer Codelab: Before diving into polymer
 
Front end dev 2016 & beyond
Front end dev 2016 & beyondFront end dev 2016 & beyond
Front end dev 2016 & beyond
 
React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작
 
Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나
 
Meteor 0.3.6 Preview
Meteor 0.3.6 PreviewMeteor 0.3.6 Preview
Meteor 0.3.6 Preview
 
Vuejs 시작하기
Vuejs 시작하기Vuejs 시작하기
Vuejs 시작하기
 
AngularJS의 개발방식에 대하여
AngularJS의 개발방식에 대하여AngularJS의 개발방식에 대하여
AngularJS의 개발방식에 대하여
 
막하는 스터디 네 번째 만남 AngularJs (20151108)
막하는 스터디 네 번째 만남 AngularJs (20151108)막하는 스터디 네 번째 만남 AngularJs (20151108)
막하는 스터디 네 번째 만남 AngularJs (20151108)
 
Hacosa js study 4주차
Hacosa js study 4주차Hacosa js study 4주차
Hacosa js study 4주차
 
Clean Front-End Development
Clean Front-End DevelopmentClean Front-End Development
Clean Front-End Development
 
Angularjs 도입 선택 가이드
Angularjs 도입 선택 가이드Angularjs 도입 선택 가이드
Angularjs 도입 선택 가이드
 
Vue SSR vs Prerender
Vue SSR vs PrerenderVue SSR vs Prerender
Vue SSR vs Prerender
 
웹 Front-End 실무 이야기
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기
 
자바스크립트의 또다른 발전, Backbone.js
자바스크립트의 또다른 발전, Backbone.js자바스크립트의 또다른 발전, Backbone.js
자바스크립트의 또다른 발전, Backbone.js
 
Angular2를 활용한 컴포넌트 중심의 개발
Angular2를 활용한 컴포넌트 중심의 개발Angular2를 활용한 컴포넌트 중심의 개발
Angular2를 활용한 컴포넌트 중심의 개발
 
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
 
AngularJS 2, version 1 and ReactJS
AngularJS 2, version 1 and ReactJSAngularJS 2, version 1 and ReactJS
AngularJS 2, version 1 and ReactJS
 
[DevOn 2013] Backbone.js로 능동적 M-V 디자인 구현하기
[DevOn 2013] Backbone.js로 능동적  M-V 디자인 구현하기[DevOn 2013] Backbone.js로 능동적  M-V 디자인 구현하기
[DevOn 2013] Backbone.js로 능동적 M-V 디자인 구현하기
 

En vedette

FalsyValues. Dmitry Soshnikov - ECMAScript 6
FalsyValues. Dmitry Soshnikov - ECMAScript 6FalsyValues. Dmitry Soshnikov - ECMAScript 6
FalsyValues. Dmitry Soshnikov - ECMAScript 6Dmitry Soshnikov
 
[1B4]안드로이드 동시성_프로그래밍
[1B4]안드로이드 동시성_프로그래밍[1B4]안드로이드 동시성_프로그래밍
[1B4]안드로이드 동시성_프로그래밍NAVER D2
 
NDC14 - Rx와 Functional Reactive Programming으로 고성능 서버 만들기
NDC14 - Rx와 Functional Reactive Programming으로 고성능 서버 만들기NDC14 - Rx와 Functional Reactive Programming으로 고성능 서버 만들기
NDC14 - Rx와 Functional Reactive Programming으로 고성능 서버 만들기Jong Wook Kim
 
Functional Reactive Programming with RxJS
Functional Reactive Programming with RxJSFunctional Reactive Programming with RxJS
Functional Reactive Programming with RxJSstefanmayer13
 
Functional Reactive Programming With RxSwift
Functional Reactive Programming With RxSwiftFunctional Reactive Programming With RxSwift
Functional Reactive Programming With RxSwift선협 이
 
Cascadia.js: Don't Cross the Streams
Cascadia.js: Don't Cross the StreamsCascadia.js: Don't Cross the Streams
Cascadia.js: Don't Cross the Streamsmattpodwysocki
 
RxJS and Reactive Programming - Modern Web UI - May 2015
RxJS and Reactive Programming - Modern Web UI - May 2015RxJS and Reactive Programming - Modern Web UI - May 2015
RxJS and Reactive Programming - Modern Web UI - May 2015Ben Lesh
 
Module, AMD, RequireJS
Module, AMD, RequireJSModule, AMD, RequireJS
Module, AMD, RequireJS偉格 高
 
서버 개발자가 바라 본 Functional Reactive Programming with RxJava - SpringCamp2015
서버 개발자가 바라 본 Functional Reactive Programming with RxJava - SpringCamp2015서버 개발자가 바라 본 Functional Reactive Programming with RxJava - SpringCamp2015
서버 개발자가 바라 본 Functional Reactive Programming with RxJava - SpringCamp2015NAVER / MusicPlatform
 
System webpack-jspm
System webpack-jspmSystem webpack-jspm
System webpack-jspmJesse Warden
 
Compose Async with RxJS
Compose Async with RxJSCompose Async with RxJS
Compose Async with RxJSKyung Yeol Kim
 

En vedette (12)

FalsyValues. Dmitry Soshnikov - ECMAScript 6
FalsyValues. Dmitry Soshnikov - ECMAScript 6FalsyValues. Dmitry Soshnikov - ECMAScript 6
FalsyValues. Dmitry Soshnikov - ECMAScript 6
 
[1B4]안드로이드 동시성_프로그래밍
[1B4]안드로이드 동시성_프로그래밍[1B4]안드로이드 동시성_프로그래밍
[1B4]안드로이드 동시성_프로그래밍
 
NDC14 - Rx와 Functional Reactive Programming으로 고성능 서버 만들기
NDC14 - Rx와 Functional Reactive Programming으로 고성능 서버 만들기NDC14 - Rx와 Functional Reactive Programming으로 고성능 서버 만들기
NDC14 - Rx와 Functional Reactive Programming으로 고성능 서버 만들기
 
Functional Reactive Programming with RxJS
Functional Reactive Programming with RxJSFunctional Reactive Programming with RxJS
Functional Reactive Programming with RxJS
 
Functional Reactive Programming With RxSwift
Functional Reactive Programming With RxSwiftFunctional Reactive Programming With RxSwift
Functional Reactive Programming With RxSwift
 
Cascadia.js: Don't Cross the Streams
Cascadia.js: Don't Cross the StreamsCascadia.js: Don't Cross the Streams
Cascadia.js: Don't Cross the Streams
 
RxJS and Reactive Programming - Modern Web UI - May 2015
RxJS and Reactive Programming - Modern Web UI - May 2015RxJS and Reactive Programming - Modern Web UI - May 2015
RxJS and Reactive Programming - Modern Web UI - May 2015
 
Module, AMD, RequireJS
Module, AMD, RequireJSModule, AMD, RequireJS
Module, AMD, RequireJS
 
서버 개발자가 바라 본 Functional Reactive Programming with RxJava - SpringCamp2015
서버 개발자가 바라 본 Functional Reactive Programming with RxJava - SpringCamp2015서버 개발자가 바라 본 Functional Reactive Programming with RxJava - SpringCamp2015
서버 개발자가 바라 본 Functional Reactive Programming with RxJava - SpringCamp2015
 
System webpack-jspm
System webpack-jspmSystem webpack-jspm
System webpack-jspm
 
Angular2 ecosystem
Angular2 ecosystemAngular2 ecosystem
Angular2 ecosystem
 
Compose Async with RxJS
Compose Async with RxJSCompose Async with RxJS
Compose Async with RxJS
 

Similaire à 혁신적인 웹컴포넌트 라이브러리 - Polymer

Web Components - Part.I, @KIG 30th
Web Components - Part.I, @KIG 30thWeb Components - Part.I, @KIG 30th
Web Components - Part.I, @KIG 30thChang W. Doh
 
Image styling with_web_components
Image styling with_web_componentsImage styling with_web_components
Image styling with_web_components민정 김
 
Introduction to Web Components
Introduction to Web ComponentsIntroduction to Web Components
Introduction to Web ComponentsEunYoung Kim
 
Angular2를 위한 컴포넌트 분석과 개발
Angular2를 위한 컴포넌트 분석과 개발Angular2를 위한 컴포넌트 분석과 개발
Angular2를 위한 컴포넌트 분석과 개발Jin wook
 
Java script 강의자료_ed13
Java script 강의자료_ed13Java script 강의자료_ed13
Java script 강의자료_ed13hungrok
 
[KGIT_EWD]class03 0322
[KGIT_EWD]class03 0322[KGIT_EWD]class03 0322
[KGIT_EWD]class03 0322jylee6977
 
퍼블리셔, 프론트엔드개발을 시작하다
퍼블리셔, 프론트엔드개발을 시작하다퍼블리셔, 프론트엔드개발을 시작하다
퍼블리셔, 프론트엔드개발을 시작하다정석 양
 
Web Components 101 polymer & brick
Web Components 101 polymer & brickWeb Components 101 polymer & brick
Web Components 101 polymer & brickyongwoo Jeon
 
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]WSConf.
 
Meteor React Tutorial 따라하기
Meteor React Tutorial 따라하기Meteor React Tutorial 따라하기
Meteor React Tutorial 따라하기Jiam Seo
 
Django - CRUD 기능 구현
Django - CRUD 기능 구현Django - CRUD 기능 구현
Django - CRUD 기능 구현Jessica Lee
 
장고로 웹서비스 만들기 기초
장고로 웹서비스 만들기   기초장고로 웹서비스 만들기   기초
장고로 웹서비스 만들기 기초Kwangyoun Jung
 
2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축
2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축
2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축Youngil Cho
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용중선 곽
 

Similaire à 혁신적인 웹컴포넌트 라이브러리 - Polymer (20)

Web Components - Part.I, @KIG 30th
Web Components - Part.I, @KIG 30thWeb Components - Part.I, @KIG 30th
Web Components - Part.I, @KIG 30th
 
Hacosa jquery 1th
Hacosa jquery 1thHacosa jquery 1th
Hacosa jquery 1th
 
Image styling with_web_components
Image styling with_web_componentsImage styling with_web_components
Image styling with_web_components
 
Html5
Html5 Html5
Html5
 
Introduction to Web Components
Introduction to Web ComponentsIntroduction to Web Components
Introduction to Web Components
 
Angular2를 위한 컴포넌트 분석과 개발
Angular2를 위한 컴포넌트 분석과 개발Angular2를 위한 컴포넌트 분석과 개발
Angular2를 위한 컴포넌트 분석과 개발
 
Java script 강의자료_ed13
Java script 강의자료_ed13Java script 강의자료_ed13
Java script 강의자료_ed13
 
3-2. selector api
3-2. selector api3-2. selector api
3-2. selector api
 
웹표준 교육
웹표준 교육웹표준 교육
웹표준 교육
 
[KGIT_EWD]class03 0322
[KGIT_EWD]class03 0322[KGIT_EWD]class03 0322
[KGIT_EWD]class03 0322
 
퍼블리셔, 프론트엔드개발을 시작하다
퍼블리셔, 프론트엔드개발을 시작하다퍼블리셔, 프론트엔드개발을 시작하다
퍼블리셔, 프론트엔드개발을 시작하다
 
Web Components 101 polymer & brick
Web Components 101 polymer & brickWeb Components 101 polymer & brick
Web Components 101 polymer & brick
 
2 1. html4.01
2 1. html4.012 1. html4.01
2 1. html4.01
 
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
조은 - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
 
Meteor React Tutorial 따라하기
Meteor React Tutorial 따라하기Meteor React Tutorial 따라하기
Meteor React Tutorial 따라하기
 
Atom package part1
Atom package part1Atom package part1
Atom package part1
 
Django - CRUD 기능 구현
Django - CRUD 기능 구현Django - CRUD 기능 구현
Django - CRUD 기능 구현
 
장고로 웹서비스 만들기 기초
장고로 웹서비스 만들기   기초장고로 웹서비스 만들기   기초
장고로 웹서비스 만들기 기초
 
2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축
2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축
2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
 

Plus de Jae Sung Park

[SOSCON 2018] 오픈소스 개발: Behind the scenes
[SOSCON 2018] 오픈소스 개발: Behind the scenes[SOSCON 2018] 오픈소스 개발: Behind the scenes
[SOSCON 2018] 오픈소스 개발: Behind the scenesJae Sung Park
 
[DEVIEW 2018] JavaScript 배틀그라운드로부터 살아남기
[DEVIEW 2018] JavaScript 배틀그라운드로부터 살아남기[DEVIEW 2018] JavaScript 배틀그라운드로부터 살아남기
[DEVIEW 2018] JavaScript 배틀그라운드로부터 살아남기Jae Sung Park
 
[SOSCON 2017] 네이버의 FE 오픈소스: jindo에서 billboard.js까지
[SOSCON 2017] 네이버의 FE 오픈소스: jindo에서 billboard.js까지[SOSCON 2017] 네이버의 FE 오픈소스: jindo에서 billboard.js까지
[SOSCON 2017] 네이버의 FE 오픈소스: jindo에서 billboard.js까지Jae Sung Park
 
[DEVIEW 2017] 14일만에 GitHub 스타 1K 받은 차트 오픈소스 개발기
[DEVIEW 2017] 14일만에 GitHub 스타 1K 받은 차트 오픈소스 개발기[DEVIEW 2017] 14일만에 GitHub 스타 1K 받은 차트 오픈소스 개발기
[DEVIEW 2017] 14일만에 GitHub 스타 1K 받은 차트 오픈소스 개발기Jae Sung Park
 
[DEVIEW 2016] 네이버의 모던 웹 라이브러리 - egjs
[DEVIEW 2016] 네이버의 모던 웹 라이브러리 - egjs[DEVIEW 2016] 네이버의 모던 웹 라이브러리 - egjs
[DEVIEW 2016] 네이버의 모던 웹 라이브러리 - egjsJae Sung Park
 
How jQuery event works
How jQuery event worksHow jQuery event works
How jQuery event worksJae Sung Park
 
현실적 Angular js
현실적 Angular js현실적 Angular js
현실적 Angular jsJae Sung Park
 
가볍게 살펴보는 AngularJS
가볍게 살펴보는 AngularJS가볍게 살펴보는 AngularJS
가볍게 살펴보는 AngularJSJae Sung Park
 
모바일 웹 디버깅
모바일 웹 디버깅모바일 웹 디버깅
모바일 웹 디버깅Jae Sung Park
 
우리가 몰랐던 크롬 개발자 도구
우리가 몰랐던 크롬 개발자 도구우리가 몰랐던 크롬 개발자 도구
우리가 몰랐던 크롬 개발자 도구Jae Sung Park
 
스마트 TV 앱 개발 맛보기
스마트 TV 앱 개발 맛보기스마트 TV 앱 개발 맛보기
스마트 TV 앱 개발 맛보기Jae Sung Park
 
How to create Aptana Ruble
How to create Aptana RubleHow to create Aptana Ruble
How to create Aptana RubleJae Sung Park
 
도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: YeomanJae Sung Park
 
Developing game audio with the Web Audio API
Developing game audio with the Web Audio APIDeveloping game audio with the Web Audio API
Developing game audio with the Web Audio APIJae Sung Park
 
Jindo Plugin for Aptana Studio 3
Jindo Plugin for Aptana Studio 3Jindo Plugin for Aptana Studio 3
Jindo Plugin for Aptana Studio 3Jae Sung Park
 

Plus de Jae Sung Park (20)

[SOSCON 2018] 오픈소스 개발: Behind the scenes
[SOSCON 2018] 오픈소스 개발: Behind the scenes[SOSCON 2018] 오픈소스 개발: Behind the scenes
[SOSCON 2018] 오픈소스 개발: Behind the scenes
 
[DEVIEW 2018] JavaScript 배틀그라운드로부터 살아남기
[DEVIEW 2018] JavaScript 배틀그라운드로부터 살아남기[DEVIEW 2018] JavaScript 배틀그라운드로부터 살아남기
[DEVIEW 2018] JavaScript 배틀그라운드로부터 살아남기
 
[SOSCON 2017] 네이버의 FE 오픈소스: jindo에서 billboard.js까지
[SOSCON 2017] 네이버의 FE 오픈소스: jindo에서 billboard.js까지[SOSCON 2017] 네이버의 FE 오픈소스: jindo에서 billboard.js까지
[SOSCON 2017] 네이버의 FE 오픈소스: jindo에서 billboard.js까지
 
[DEVIEW 2017] 14일만에 GitHub 스타 1K 받은 차트 오픈소스 개발기
[DEVIEW 2017] 14일만에 GitHub 스타 1K 받은 차트 오픈소스 개발기[DEVIEW 2017] 14일만에 GitHub 스타 1K 받은 차트 오픈소스 개발기
[DEVIEW 2017] 14일만에 GitHub 스타 1K 받은 차트 오픈소스 개발기
 
[DEVIEW 2016] 네이버의 모던 웹 라이브러리 - egjs
[DEVIEW 2016] 네이버의 모던 웹 라이브러리 - egjs[DEVIEW 2016] 네이버의 모던 웹 라이브러리 - egjs
[DEVIEW 2016] 네이버의 모던 웹 라이브러리 - egjs
 
현실적 PWA
현실적 PWA현실적 PWA
현실적 PWA
 
How jQuery event works
How jQuery event worksHow jQuery event works
How jQuery event works
 
iOS9 소개
iOS9 소개iOS9 소개
iOS9 소개
 
현실적 Angular js
현실적 Angular js현실적 Angular js
현실적 Angular js
 
가볍게 살펴보는 AngularJS
가볍게 살펴보는 AngularJS가볍게 살펴보는 AngularJS
가볍게 살펴보는 AngularJS
 
모바일 웹 디버깅
모바일 웹 디버깅모바일 웹 디버깅
모바일 웹 디버깅
 
CSS Functions
CSS FunctionsCSS Functions
CSS Functions
 
우리가 몰랐던 크롬 개발자 도구
우리가 몰랐던 크롬 개발자 도구우리가 몰랐던 크롬 개발자 도구
우리가 몰랐던 크롬 개발자 도구
 
What's new in IE11
What's new in IE11What's new in IE11
What's new in IE11
 
스마트 TV 앱 개발 맛보기
스마트 TV 앱 개발 맛보기스마트 TV 앱 개발 맛보기
스마트 TV 앱 개발 맛보기
 
How to create Aptana Ruble
How to create Aptana RubleHow to create Aptana Ruble
How to create Aptana Ruble
 
Web Audio API
Web Audio APIWeb Audio API
Web Audio API
 
도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman
 
Developing game audio with the Web Audio API
Developing game audio with the Web Audio APIDeveloping game audio with the Web Audio API
Developing game audio with the Web Audio API
 
Jindo Plugin for Aptana Studio 3
Jindo Plugin for Aptana Studio 3Jindo Plugin for Aptana Studio 3
Jindo Plugin for Aptana Studio 3
 

혁신적인 웹컴포넌트 라이브러리 - Polymer

  • 2. Polymer is a library that makes building applications easier. Is built on Web Components. ” “
  • 3. 재사용 가능한 컴포넌트를 만들 수 있는 표준 기술들의 모 음 Custom Elements – 커스텀 태그를 통한 요소 생성 HTML Imports – HTML 페이지 로딩 HTML Templates - 템플릿 Shadow DOM – DOM과 스타일의 캡슐화
  • 4. 커스텀 태그를 통한 요소 생성 ▪ 새로운 HTML 요소를 생성 ▪ 다른 요소를 확장해 생성가능 ▪ 단일 태그에 커스텀 기능의 묶음 가능 ▪ 기존 DOM 요소의 API를 확장 // 1. HTML 객체 생성 var XFooProto = Object.create(HTMLElement.prototype); // 2. ‘hi’ 메서드 추가 XFooProto.hi = function() { alert('foo() called'); }; // 3. 읽기 전용 ‘bar’ 속성 설정 Object.defineProperty(XFooProto, "bar", {value: 5}); // 4. <x-foo> 태그 등록 var XFoo = document.registerElement('x-foo', {prototype: XFooProto});
  • 5. HTML Imports – HTML 페이지를 로딩 ▪ JS/HTML/CSS를 묶음 형태로 사용  단일 URL 호출 ▪ HTML import를 통한 추가되는 컴포넌트들은 중복되는 경우라도 호출, 파싱 및 실행은 단 한 번만 수행 ▪ 다른 도메인의 리소스를 로딩하기 위해선 CORS 활성화 필요 ▪ Import 내의 스크립트는 메인 문서의 파싱을 블럭하지 않음 ▪ 스크립트는 import 시 실행되나, 다른 요소(마크업, CSS 등)들은 메인 페이지에 추가되는 시점에 활성화
  • 6. HTML Imports – HTML 페이지를 로딩 some.html main.html <head><link rel="import" href="some.html"></head> <body> <script> var link = document.querySelector('link[rel="import"]'); var content = link.import; var el = content.querySelector('.warning'); document.body.appendChild(el.cloneNode(true)); </script> </body> <script> console.log(123);</script> <div class="warning"> <style> h3 { color: red; } </style> <h3>Warning!</h3> <p>This page is under construction</p> </div>
  • 7. ▪ 비활성화 상태의 복제 가능한 DOM chunk ▪ 새로운 태그 : <template> … </template> ▪ 태그 내의 태그들은 사용되기 전까진 파싱은 되나 렌더링되지 않음 ▪ 컨텐츠는 클론/사용 되기전까진 비활성 ▪ 페이지의 일부분이 아님 재사용을 위한 템플릿
  • 8. 재사용을 위한 템플릿 // 1. 템플릿 컨텐츠를 얻어온다. var content = document.getElementById("count").content; // 2. 템플릿내의 DOM에 대한 작업을 한다. var span = content.querySelector('span'); span.textContent = parseInt(span.textContent) + 1; // 3. 메인 DOM에 추가한다. document.body.appendChild(document.importNode(content, true)); <template id="count"> <div>Template used: <span>0</span></div> <script>alert('클릭하셨네요!');</script> </template>
  • 9. ▪ 별도의 스코프를 갖는 DOM ▪ 폴리머에서 생성하는 모든 요소들은 shadow DOM으로 처리 DOM과 스타일의 캡슐화
  • 10. <h3>제목</h3> <div id="scoped"><h3>Light DOM</h3></div> <script> var el = document.getElementById('scoped'); var root = el.createShadowRoot(); root.innerHTML = '<style>h3{ color: red; }</style><h3>Shadow DOM</h3>'; </script> DOM과 스타일의 캡슐화 <button id="btn" onclick="shadow()">Hello, world!</button> <script> function shadow() { var host = document.getElementById("btn"); // 1. shadow root 생성 var root = host.createShadowRoot(); // 2. shadow DOM의 내용 변경 root.textContent = '안녕하세요!'; } </script> document. getElementById("btn"). innerHTML?
  • 11. 태그 형태로 특정 기능을 갖는 UI 컴포넌트들을 손쉽게 삽입할 수 있으며, 재사용이 가능해 진다. <body> <google-map latitude="37.3596274“ longitude="127.105464“ zoom="17“ fitToMarkers="true"> <google-map-marker latitude="37.3596274“ longitude="127.105464“ title="그린팩토리"></google-map-marker> </google-map> </body>
  • 12. <paper-input label="Your Name"></paper-input><br> <paper-input multiline label="Enter multiple lines here"></paper-input> <paper-tabs id="tabs" valueattr="name" selected="all" self-end> <paper-tab name="all">All</paper-tab> <paper-tab name="favorites">Favorites</paper-tab> </paper-tabs> <paper-toggle-button></paper-toggle-button> <paper-checkbox id="chkitem"></paper-checkbox>
  • 13.  platform.js  polymer.js ▪ Core Elements ▪ Paper Elements
  • 14. 브라우저가 네이티브 하게 지원하지 않는 기능을 사용 가능하도록 만들어 주는 코드 모음 Web Components polyfill : ▪ Mozilla X-Tag : http://www.x-tags.org/ ▪ Google Polymer : http://www.polymer-project.org/  http://remysharp.com/2010/10/08/what-is-a-polyfill/
  • 15. Chrome Firefox IE Android iOS HTML Templates 26+ 22+ N/A 4.4+ 8+ HTML Imports 36+ N/A N/A N/A N/A Custom Elements 33+ N/A N/A N/A N/A Shadow DOM 25+ 32+ N/A 4.4+ N/A
  • 16. ▪ Polymer는 Evergreen Browser*에서 문제없는 실행을 목표 http://www.polymer-project.org/resources/compatibility.html *Evergreen Web Browser is a web browser that automatically updates itself on startup.
  • 17. 유틸리티 요소와 공통적 UI 요소들의 모음 Ajax, 애니메이션, 드래그&드롭, 아이콘 모음, 툴팁, etc. http://www.polymer-project.org/docs/elements/core-elements.html Material design*이 적용된 UI 요소들의 모음 버튼, 체크박스, 다이얼로그, 입력요소, 탭, 토스트, etc. http://www.polymer-project.org/docs/elements/paper-elements.html http://www.polymer- project.org/docs/elements/paper-elements.html
  • 18. ▪ 이미 만들어진 요소들을 사용하는 방법 1. 사용할 요소를 페이지에 삽입 2. 새로 추가된 요소를 태그로 선언 $ bower install Polymer/paper-checkbox  현재 폴더의 ./components/paper-checkbox/ <link rel="import" href="components/paper-checkbox/paper-checkbox.html"> <paper-checkbox></paper-checkbox>
  • 19. ▪ 직접 요소를 생성하는 방법 1. 요소에 해당되는 페이지 작성 a) Polymer core를 페이지에 삽입 b) <polymer-element>를 사용해 새로운 태그 등록 <link rel="import" href="../components/polymer/polymer.html"> <polymer-element name="사용자정의-태그" noscript> <template> <span>내용</span> </template> </polymer-element>
  • 20. 2. 사용될 페이지에서 요소 페이지 삽입 후, 태그로 선언 <head> <script src="../components/platform/platform.js"></script> <link rel="import" href="./파일.html"> </head> <body> <사용자정의-태그></사용자정의-태그> </body>
  • 21. ▪ 사용되는 웹 컴포넌트 파일들을 병합해 HTTP request를 줄일 수 있도록 해주는 도구 $ vulcanize 대상파일.html --inline --strip -o 결과파일.html https://github.com/Polymer/vulcanize
  • 23. ▪ WebComponents.org http://webcomponents.org/ ▪ Google I/O 2014 - Polymer and Web Components change everything you know about Web development https://www.youtube.com/watch?v=8OJ7ih8EE7 ▪ Google I/O 2014 - Polymer and the Web Components revolution https://www.youtube.com/watch?v=yRbOSdAe_JU ▪ Google I/O 2014 - Unlock the next era of UI development with Polymer https://www.youtube.com/watch?v=HKrYfrAzqFA ▪ Custom Elements http://www.html5rocks.com/en/tutorials/webcomponents/customelements/ ▪ HTML Imports http://www.html5rocks.com/en/tutorials/webcomponents/imports/ ▪ HTML's New Template Tag http://www.html5rocks.com/en/tutorials/webcomponents/template/ ▪ Shadow DOM http://www.html5rocks.com/en/tutorials/webcomponents/shadowdom/