Skip to content

jquery_in_depth_3

KyusungDev edited this page May 12, 2017 · 2 revisions

μ„ νƒμžμ™€ μ„±λŠ₯

κΈ°λ³Έ μ„ νƒμžμ˜ μ„±λŠ₯

ID μ„ νƒμž >= 클래슀 μ„ νƒμž = νƒœκ·Έ 이름 μ„ νƒμž
ID μ„ νƒμž, 클래슀 μ„ νƒμž, νƒœκ·Έ 이름 μ„ νƒμžλŠ” κ°€μž₯ 속도가 λΉ λ₯΄λ‹€. 이 3개의 μ„ νƒμžλŠ” λ‹€λ₯Έ μ„ νƒμžμ™€ κ²°ν•©ν•΄ μ‚¬μš©ν•˜μ§€ μ•ŠκΈ°λ₯Ό μΆ”μ²œν•œλ‹€.

후손 μ„ νƒμžμ™€ find() λ©”μ„œλ“œ

νŠΉμ • μš”μ†Œ λ‚΄μ—μ„œ λ°˜λ³΅ν•΄μ„œ 선택할 경우 후손 μ„ νƒμžλ₯Ό λ°˜λ³΅ν•΄μ„œ μ‚¬μš©ν•˜μ§€ 말고, 선택 λ²”μœ„λ₯Ό 미리 μ„ νƒν•˜μ—¬ μΊμ‹±ν•˜κ³  find() λ©”μ„œλ“œλ₯Ό ν™œμš©ν•˜λŠ” 편이 λ°”λžŒμ§ν•˜λ‹€.

jQuery ν™•μž₯ μ„ νƒμž

jQueryμ—μ„œ μ‚¬μš©ν•˜λŠ” λͺ¨λ“  μ„ νƒμžκ°€ CSS ν‘œμ€€μŠ€νŽ™μ„ λ§Œμ‘±ν•˜μ§€ μ•ŠλŠ”λ‹€. ν‘œμ€€ CSS μŠ€νŽ™μ—λŠ” μ—†μ§€λ§Œ jQueryμ—μ„œ μ‚¬μš©ν•˜λŠ” μ„ νƒμžλŠ” jQuery ν™•μž₯ μ„ νƒμž(jQuery Extension selector)라고 λΆ€λ₯Έλ‹€.

jQuery ν™•μž₯ μ„ νƒμžλŠ” κ°€λŠ₯ν•˜λ©΄ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 것이 λ°”λžŒμ§ν•˜λ©° μ‚¬μš©ν•΄μ•Όλ§Œ ν•˜λŠ” 경우라면 λ‹€λ₯Έ μ„ νƒμžμ™€ κ²°ν•©ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” 것이 λ°”λžŒμ§ν•˜λ‹€. λ˜ν•œ jQuery ν™•μž₯ μ„ νƒμžλ₯Ό μ‚¬μš©ν•  λ•Œ find()와 같은 νš‘λ‹¨ 탐색 λ©”μ„œλ“œλ₯Ό 적극 ν™œμš©ν•˜λŠ” 것도 쒋은 방법이닀. μš°μ„  μ‹€ν–‰ 속도가 λΉ λ₯Έ μ„ νƒμžλ₯Ό μ‚¬μš©ν•˜μ—¬ μ΅œμ’…μ μœΌλ‘œ 선택해야 ν•  μš”μ†Œλ₯Ό 찾을 λ²”μœ„λ₯Ό 쒁힌 후에 filter()λ‚˜ find()와 같은 νš‘λ‹¨ 탐색 λ©”μ„œλ“œλ₯Ό μ΄μš©ν•˜λŠ” 것이 λ°”λžŒμ§ν•˜λ‹€.

μš”μ•½

이미 μ„ νƒλœ μš”μ†Œκ°€ μžˆλ‹€λ©΄ $() ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  ν•„μš” 없이 μš”μ†Œμ— 직접 μ ‘κ·Όν•˜λŠ” 것이 μ„±λŠ₯을 λ†’μ΄λŠ” 방법이닀. μ„±λŠ₯이 μ΅œμš°μ„  κ³ λ € 사항이라면 λ„€μ΄ν‹°λΈŒ APIλ₯Ό μ‚¬μš©ν•˜μž. jQueryλ₯Ό μ‚¬μš©ν•˜λŠ” 것보닀 λΉ λ₯΄λ‹€. λ‹€λ§Œ μ„±λŠ₯이 μ€‘μš”ν•œ κ³ λ € 사항이 μ•„λ‹ˆλΌλ©΄ jQueryλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 개발 생산성 ν–₯상, 크둜슀 λΈŒλΌμš°μ € μ§€μ›λ“±μ˜ μž₯점을 얻을 수 μžˆλ‹€.

jQuery Optimize Selectors (λ²ˆμ—­)

selector μ΅œμ ν™”λŠ” μ˜ˆμ „λ³΄λ‹€ μ€‘μš”ν•˜μ§€ μ•Šλ‹€. λ§Žμ€ λΈŒλΌμš°μ €κ°€ document.querySelectorAll()λ₯Ό κ΅¬ν˜„ν•˜μ—¬ 선택 이동에 λŒ€ν•œ 뢀담이 jQueryμ—μ„œ λΈŒλΌμš°μ €λ‘œ μ΄λ™ν•˜μ˜€λ‹€. κ·ΈλŸ¬λ‚˜, selector μ„±λŠ₯에 병λͺ©ν˜„상이 λ°œμƒν•  λ•Œ 염두해 두어야 ν•  λͺ‡ κ°€μ§€ 팁이 μžˆλ‹€.

jQuery Extensions
κ°€λŠ₯ν•˜λ©΄ jQuery extenstion을 ν¬ν•¨ν•˜λŠ” selectorλ₯Ό μ‚¬μš©ν•˜μ§€ 마라. μ΄λŸ¬ν•œ ν™•μž₯은 native `querySelectorAll() DOM λ©”μ„œλ“œμ—μ„œ μ œκ³΅ν•˜λŠ” μ„±λŠ₯ ν–₯상을 μ΄μš©ν•  수 μ—†κΈ° λ•Œλ¬Έμ—, jQueryμ—μ„œ μ œκ³΅ν•˜λŠ” Sizzle selector 엔진을 μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

// Slower (the zero-based :even selector is a jQuery extension)
$( "#my-table tr:even" );
 
// Better, though not exactly equivalent
$( "#my-table tr:nth-child(odd)" );

μœ„μ˜ 예제 처럼 :even을 ν¬ν•¨ν•œ CSS μŠ€νŽ™μ—μ„œ μ œκ³΅ν•˜μ§€ μ•ŠλŠ” λ§Žμ€ jQuery extensions이 μžˆλ‹€. 일뢀 μƒν™©μ—μ„œλŠ” μ΄λŸ¬ν•œ ν™•μž₯의 νŽΈλ¦¬μ„±μ΄ μ„±λŠ₯ λΉ„μš©λ³΄λ‹€ μ€‘μš”ν•  수 μžˆλ‹€.

Avoid Excessive Specificity

$( ".data table.attendees td.gonzalez" );
 
// Better: Drop the middle if possible.
$( ".data td.gonzalez" );

Selector 엔진은 μš”μ†Œλ₯Ό 찾을 λ•Œ 탐색할 λ ˆμ΄μ–΄κ°€ 적기 λ•Œλ¬Έμ— 보닀 쒋은 DOM은 μ„±λŠ₯ ν–₯μƒμ‹œν‚€λŠ”λ° 도움을 μ€€λ‹€.

link ID-Based Selectors
선택기λ₯Ό ID둜 μ‹œμž‘ν•˜λŠ” 것이 μ•ˆμ „ν•œ 방법이닀.

// Fast:
$( "#container div.robotarm" );
 
// Super-fast:
$( "#container" ).find( "div.robotarm" );

첫번째 μ ‘κ·Ό 방식은 jQueryλŠ” document.querySelectorAll()을 μ‚¬μš©ν•˜μ—¬ DOM을 μΏΌλ¦¬ν•œλ‹€. λ‘λ²ˆμ§Έ μ ‘κ·Ό 방식은 document.getElementById()λ₯Ό μ‚¬μš©ν•œλ‹€. 속도 ν–₯상은 ν›„μ†μœΌλ‘œ μ‚¬μš©λœ find() λ•Œλ¬Έμ— μ€„μ–΄λ“€μ§€λ§Œ μ„±λŠ₯은 더 λΉ λ₯΄λ‹€.

Optimize Selector

Clone this wiki locally