2017년 2월 26일 일요일

Asynch JS. The Poser of $.Defferred (번역중)


  • 데스크탑, 네이티브: 쓰레딩 모델 접근가능
  • 브라우저 : 쓰레딩 모델 접근 불가능(UI: DOM)를 건드리는 모든 것은 single-thread
    •  UI요소들을 건드리고 변경하는 모든 앱 로직이 항상 같은 쓰레드에서 동작
    • > app은 브라우저가 제공하는 비동기 기능을 최대한 사용하여 최대한 효율적으로 잘 동작하도록 유지하는 것이 중요
  • 브라우저의 비동기 API
    • XHR(XMLHttpRequest 또는 AJAX)와 같은 비동기 API제공
    • 예 ) IndexedDb, SQLite, HTML5 Web Workers, HTML5 GeoLocation API
    • 브라우저가 비동기 프로그래밍을 앱 로직에 노출시키는 방법 : 이벤트 또는 콜백 사용
      예) 이벤트 기반 비동기 API경우, DOM에 이벤트 핸들러 등록하고 나서 동작 호출.
      브라우저는 보통 다른 thread로 동작 수행하고, 적절한 때 main-thread에서 이벤트 발생.
  • $.Deferred의 적용
    • Promises라는 비교적 오래된 패턴+ jQuery 코어에 비동기 프로그래밍을 하는데
    • Promises패턴 + $.Deferred (jQuery 코어의 구현체)
      • Promise패턴: promise객체를 반환하는 비동기 API를 정의하는 것.
      • Promise: (결과가 해당 데이터를 가지고 해결될 것이라는 약속)
  • 사용례
    • 데이터 접근: 특히 원격데이터일 경우. 
    • UI 애니매이션: 



javascript 에서 e.preventDefault()를 쓰는 이유

1. 앱에서 뒤로가기 버튼 눌러도 기대동작 안하는 경우 방지

  • 이벤트 바인딩 형식으로 이벤트를 구성하고, ahref="#" 이걸 기본으로 넣는경우가 많음-->  이럴경우에는 url끝에 hash(#)가 붙음
  • 그래서 뒤로가기 눌러도 url  hash붙기전 기본 페이지로 동작하여, 우리가 기대하는 기존 web view로 return되지 않아을 수 있음
  • 히스토리 꼬일 수 있기 때문에, 왠만한 event binding들에는 e.preventDefault()를 걸어주는 것을 추천