- 데스크탑, 네이티브: 쓰레딩 모델 접근가능
- 브라우저 : 쓰레딩 모델 접근 불가능(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 애니매이션:
쥬케의 개발다이어리
2017년 2월 26일 일요일
Asynch JS. The Poser of $.Defferred (번역중)
javascript 에서 e.preventDefault()를 쓰는 이유
1. 앱에서 뒤로가기 버튼 눌러도 기대동작 안하는 경우 방지
- 이벤트 바인딩 형식으로 이벤트를 구성하고, ahref="#" 이걸 기본으로 넣는경우가 많음--> 이럴경우에는 url끝에 hash(#)가 붙음
- 그래서 뒤로가기 눌러도 url hash붙기전 기본 페이지로 동작하여, 우리가 기대하는 기존 web view로 return되지 않아을 수 있음
- 히스토리 꼬일 수 있기 때문에, 왠만한 event binding들에는 e.preventDefault()를 걸어주는 것을 추천
2016년 6월 2일 목요일
jQuery.extend의 의미
자바스크립트 jQuery를 보다가 혹은 include되어있는 js파일에서 흔히 보이던 문구
- jQuery 1.0 version
jQuery.extend = jQuery.fn.extend = function (obj, prop) {
if(!prop) {prop = obj; obj = this;}
for( var i in prop) obj[i] = prop[i];
return obj;
}; - jQuery.fn
- jQuery.prototype( jQuery 객체의 부모같은 역할)
- jQuery.extend = jQuery.fn.extend = ...
- jQuery함수 객체와 jQuery 함수 객체의 인스턴스 모두 extend함수가 있다는 말.
> new jQuery(..).extend(); jQuery.extend() 둘 다 가능하다는말 - if( !prop) { prop = obj; obj = this;}
- extend함수 인자가 한개만 들어올 경우, 현재 객체 (this)에 인자로 들어오는 객체의 프로퍼티 복사, 두개가 들어오는 경우에는 첫번째에 두번째 객체의 프로퍼티를 복사하겠다는 것
- for( var i in prop) obj [i] = prop [i];
- 얕은복사 (shallow copy) : not copy the data just reference it.
> 보통 extend구현 대상이 객체일경우 deep copy를 하는 것이 일반적
함수 객체인 경우는 그대로 얕은 복사 진행.
출처: 인사이드 자바스크립트 06장 - 객체 지향 프로그래밍
2016년 6월 1일 수요일
jQuery에서 즉시 실행 함수 (immediate function) window 를 사용하는 이유
jQuery 코드를 보면 아래와 같이 작성되어 있다.
- ( function(window, undefined) {
//to implement
} )( window ); - jQuery에서 immediate function을 쓰는이유는 자바스크립트에서 variable scope때문.
function안에서만 존재하는 "함수유효범위"를 사용하여, 그 내부에서만 사용되어 외부에서 접근하여 조작되는 data corruption을 방지할 수 있기 때문이다.
(왜냐하면 자바스크립트에서는 변수를 선언하면 보통 전역변수로 사용되기 때문이다.)
프론트엔드 개발자를 위한 자바스크립트 프로그래밍 - 발췌독 및 정리 (수정중)
1장. 자바스크립트란 무엇인가
|
1.2 자바스크립트 구현
|
자바스크립트 구성
| ||||||||||||||||||||||||||||||||||||||
1.4 요약
|
자바스크립트는 웹 페이지와 상호작용하도록 디자인된 스크립트 언어이며 다음 세 부분으로 구성됨
| |||||||||||||||||||||||||||||||||||||||
2장. HTML속의 자바스크립트
|
자바스크립트가 HTML페이지 렌더링을 방해하지 않으면서 공존할 길을 모색
//todo..
| |||||||||||||||||||||||||||||||||||||||
3장. 언어의 기초
|
| |||||||||||||||||||||||||||||||||||||||
//todo: 변수 등등 다 정리해야해 중요
| ||||||||||||||||||||||||||||||||||||||||
5장. 참조 타입
|
5.2 Array 타입
|
다른 언어와 달리, 어떤 타입의 데이터도 넣을 수 있음
생성방법: 생성자 new Array(length), new Array("data1", "data2" , "data3");
배열 리터럴 var colors = ["red","green","blue"];
| ||||||||||||||||||||||||||||||||||||||
5.8 요약
|
자바스크립트 객체는 참조 값이라고 불리며 다음과 같이 내장된 참조 타입을 통해 특정 타입의 객체를 만들 수 있음
자바스크립트의 독특한 점은 함수가 Function 타입의 인스턴스, 즉 함수도 객체의 일종
함수는 객체이므로 메서드가 있고, 이 메서드를 통해 함수 동작방식 확장 가능
JS는 원시 래퍼 타입이 있어서 원시값을 객체처럼 다룰 수 있음.
원시 래퍼 타입: Boolean, Number, String
내장 객체인 Global, Math 객체는 코드가 실행되는 즉시 생성.
ECMAScript에서 Global 객체에 접근방법은 없지만 웹 브라우저는 Global 객체를 window객체로 구현. Global 객체는 모든 전역 변수와 함수를 프로퍼티 형태로 포함. Math객체에는 수학계산에 필요한 프로퍼티와 메서드 내포. | |||||||||||||||||||||||||||||||||||||||
8장. 브라우저 객체 모델
|
8.1 window객체
|
BOM의 핵심에는 브라우저의 인스턴스인 window객체가 있음
window객체의 역할: 브라우저 창의 자바스크립트 인터페이스 구실, ECMAScript Global객체로 기능
Therefore, window가 global객체 구실함 > @ 웹페이지에서 정의한 모든 객체,변수,함수 8.1.6 인터벌과 타임아웃 브라우저에서 자바스크립트는 단일 스레드로 실행되지만, 타임아웃과 인터벌을 통해 코드가 특정 시간에 실행될 수 있도록 조절 가능.
| ||||||||||||||||||||||||||||||||||||||
2016년 5월 25일 수요일
Cross Domain 문제 해결법 (jsonp, cors )
- 문제상황: Cross Domain
- Cross Domain문제란?
- ajax호출을 통해 다른 도메인에 있는 자원에 접근할 때
다른 도메인에 존재하는 데이터를 가져오는 경우, 자바스크립트가 있는 서버가 아닌 다른 서버와 통신하면 보안이슈에 의해서 통신할 수 없음. ( mash up application개발시에 주로 발생) - 해결방법
- Server Proxy
- 웹 브라우저에서 보여지고 있는 문서와 동일한 origin에 proxy를 두고, 다른 origin의 데이터를 가져옴.
- Cross Document Messaging
- 페이지간 커뮤니케이션 지원하는 API
- JSONP
- html에 script src를 추가하여, 필요한 자원을 로드하듯이, 필요한 페이지 주소를 cript사이에 넣음
- 예)
<script> function test(data) {
console.log(data); //log로 데이터 출력됨
}
</script>
<script src="http://google.co.kr/example/api/getSearchPages/news.json?callback=test"></script> - 한계점: HTTP METHOD:GET만 가능
- CORS
- cors.js를 이용하여 요청
- response.setHeader("Access-Control-Allow-Origin","*");
- 참고
- https://www.w3.org/TR/cors/
- https://en.wikipedia.org/wiki/Cross-origin_resource_sharing
2016년 5월 12일 목요일
IntelliJ 한글 인코딩 깨짐 해결 (properties file, utf-8 encoding): "Transparent natvie-to-ascii conversion"
- [문제상황]: 프로젝트 Import후 모든 한글 파일들이 깨짐
- project > preferences > 에서 인코딩 UTF-8선택하였지만 --> 한글깨짐
- [해결방법]: 다음과 같이
- Project> preferences > editor> file encodings에서 Properties File에 Transparent native-to-ascii conversion체크
- Transparent native-to-ascii conversion:
JetsBrains의 설명에 따르면, Standard JAVA API는 ISO 8859-1을 이용하여 Properties파일을 인코딩함.
하지만 위에서 properties파일을 UTF-8로 세팅함 - 만약 위의 설정을 체크하면 다른인코딩을 사용한다면, properties파일은 \0A 과 같은 escape들의 연속으로 저장되더라도, 보여지기는 한글이나 ASCII아스키로 보일 수 있도록 지정해주는 옵션이다. //해결!
https://www.jetbrains.com/help/idea/2016.1/configuring-encoding-for-properties-files.html?origin=old_help
피드 구독하기:
글 (Atom)