bsSelector (GDG DevFest 2014)

Post on 30-Jun-2015

716 views 4 download

description

bsSelector 발표자료 (GDG DevFest 2014)

Transcript of bsSelector (GDG DevFest 2014)

PAEK, Seung-Hyun

- ProjectBS 재배하는 농부 (committer)- SHOU Communications 근무-웹개발자 (JavaScript 사랑함 )

projectBS

projectBSbsJS??

projectBSbsJS??

#domID 요소의

1. 모서리를 둥글게2. 넓이를 지정3. 글자색을 지정4. Click event 설정5. 글자색 취득

bsJS

var color = $('#domID').css( {

'borderRadius' : 5,‘color’ : ‘#fff’

} ).attr('width', 100).click(function(){alert(1)}).css('color');console.log(color) // "#fff"

bsJS

var color = $('#domID').css( {

'borderRadius' : 5,‘color’ : ‘#fff’

} ).attr('width', 100).click(function(){alert(1)}).css('color');console.log(color) // "#fff"

var color = bs.Dom('#domID').S('border-radius', 5, '@width', 100, ‘click’, function(){alert(1)}, ’color', '#fff');

console.log(color) // "#fff"

bsJS

var color = $('#domID').css( {

'borderRadius' : 5,‘color’ : ‘#fff’

} ).attr('width', 100).click(function(){alert(1)}).css('color');console.log(color) // "#fff"

var color = bs.Dom('#domID').S('border-radius', 5, '@width', 100, ‘click’, function(){alert(1)}, ’color', '#fff');

console.log(color) // "#fff"

호스트코드 : 110 byte

오브젝트 생성 : O함수호출 : 4 회

호스트코드 : 94 byte

오브젝트 생성 : X함수호출 : 1 회

Selector engine왜 만들게되었나 ?

bsJS 의Selector en-

gine

bsJS 에 독자적인 셀렉터를 갖고싶은데 ..

bsJS 에 독자적인 셀렉터를 갖고싶은데 ..

ㅇㅇ ??

승현이 니가 만들면 되겠네~!!

승현이 니가 만들면 되겠네~!!

!!??(=_=);;;;

Selector processquery 의 tokenizer

요소 선택요소 순환요소 판정결과 반환

Selector processquery 의 tokenizer

요소 선택요소 순환요소 판정결과 반환

Selector processquery 의 tokenizer

요소 선택요소 순환요소 판정결과 반환

Selector processquery 의 tokenizer

요소 선택요소 순환요소 판정결과 반환

Selector processquery 의 tokenizer

요소 선택요소 순환요소 판정결과 반환

Selector processquery 의 tokenizer

요소 선택요소 순환요소 판정결과 반환

query = 'ul.toc li.tocline2‘;tokens = ['ul', '.toc', ' ', 'li', ‘.tocline2‘];

if(tokens[i].charAt(0) == '#') document.getElementById(tokens[i].substr(1));else if(tokens[i].charAt(0) == '.') document.getElementByClassName(tokens[i].substr(1));else document.getElementsByTagName('*');

CSS2 spec 은 기본아냐 ?

CSS2 spec 은 기본아냐 ?

ㅇㅇ ~

CSS3 spec 도하는김에 하지 ?

CSS3 spec 도하는김에 하지 ?

으 .. 으응 ..;;;

CSS4 spec 이 새로 나왔던데 ?

CSS4 spec 이 새로 나왔던데 ?

뭐 ?? ( 이 **야 )

일단 완성성능이 궁금하다 !!

일단 완성성능이 궁금하다 !!

Sizzle speed

jsPerf.com

getElementByIdgetElementsByTagName

getElementsByClass-Name

getElementsByNamequerySelectorAll

ID TAG CLASS NAME

2,096,567 1,876,875 1,841,273 1,575,123

17,090,351 8,920,145 8,285,463 8,031,034

19,384,745 16,661,97317,559,67

819,073,48

5

ID TAG CLASS

124,963 126,480 106,504

1,091,549

222,199 210,918

2,020,367

321,119 339,747

쿼리 패턴별로각 메서드 성능을

정리한 뒤효율이 좋은 부분에 반영

jQuery

Sizzle

Mootools

bsSelector

0 500000 1000000 1500000 2000000 2500000

820424

1501379

1372821

2343437

Sizzle Benchmark

상황은 나아졌지만…

다음은 ???

JavaScript 는인터프리터 언어

인터프리터 ?

몇가지힌트를 통해 얻은

결론기계적인 접근

몇가지힌트를 통해 얻은

결론기계적인 접근

기계적인 접근 ??JavaScript 엔진이하는일을 줄이는것

기계적인 접근 ??JavaScript 엔진이하는일을 줄이는것

함수 호출을최소화

함수 호출을 최소화 한다

함수 호출을 최소화 한다

function Non function

16,830 54,080

49,063 49,436

51,524 52,066

캐쉬 활용

LinkedListgetElementsByTagName

getElementsByClassName

var els = document.getElementsByTagName(‘div’);

Console.log(els.length); // 1

var newEl = document.createElement(‘div’);

document.body.appendChild(newEl);

console.log(els.length); // 2

반복의 제거

div

P[0] P[1] P[2]

‘p:last-child’

새로운DOM 속성 활용

element.childNodes;children.nodeType == 1;

VSelement.children

이런 사실들을바탕으로 재작성

이런 사실들을바탕으로 재작성

Sizzle Mootools-slick

bsSelector

함수개수 140 93 13

라인수 1,214 2,037 305

용량 60,335 37,935 13,485

그 결과

Chrome

IE10

Sizzle

Mootools

bsSelector

0 2000000 4000000 6000000 8000000 10000000

3010190

2758557

9054979

1960305

1941198

7240460

with querySelectorAll

IE10 chrome

Sizzle

Mootools

bsSelector

0 2000000 4000000 6000000 8000000 10000000

3155191

2662334

9036840

2408144

1749609

8094011

without querySelectorAll

IE10 chrome

외제라고넘사벽은 아닙니다 .

국산도할 수 있어요 !!

감사합니다 .ProjectBS group

https://www.facebook.com/groups/bs5js/github bsJS

http://ligo.kr/i7github bsSelectorhttp://ligo.kr/o8