JavaScript 5

[이슈] 스네이크 케이스 <-> 카멜 케이스 변환시 성능 이슈 해결 (feat. defineProperty, laze access)

You don't know JS 를 스터디하면서 defineProperty 같은 함수는 내부적으로 쓰이는거고 서비스 개발할땐 별로 쓰일일이 없겠다 생각하고 넘겼는데, 어쩌다보니 써야하는 상황이 왔고, 나름 훌륭하게 해결한것 같아서 정리하고 공유할겸 글을 남기게 되었다. 이슈 상황 API 서버와 통신할때 JSON 을 통해서 데이터를 주고받는 상황이다. 이때 서버에선 스네이크 케이스를 사용하고, 클라이언트에선 카멜 케이스를 사용한다. 이때 클라이언트에선 받아온 JSON의 key들을 카멜 케이스로 변환해주어야 하는데, 방법은 여러가지가 있다. key를 순환하면서 변경시키기 defineProperty 를 사용하여 laze access 내가 직접 작업한 방법은 위에 2가지 인데, 우선 별 생각 없이 key값을 순..

개발/Javascript 2021.05.27

[You don't know JS] Part3 - 6장. 벤치마킹과 튜닝

a++와 ++a 사이에 어떤것이 성능이 좋을것인가? 학부생때도 뭐가 더 좋은지 많이 고민해보았고, 써져있는 글마다 달랐다. 결론적으로 의미가 없다는걸 알게되었다. 저 둘이 성능차이가 있으면 얼마나 있을꺼고, 내 서비스에 얼마나 큰 영향을 줄수 있을까... 책에서도 그러한 미시적 성능 튜닝에 초점을 두고있진 않았다. 6.1 벤치마킹 일반적으로 많이 사용하는 성능 측정 코드이다. var start = (new Date()).getTime(); // TODO: 테스트할 작업 var end = (new Date()).getTime(); console.log(end - start); 위와같은 방법으론 정확한 성능을 알아낼 수 없다. 문제점은 다음과 같다. getTime의 최소값인 밀리세컨 이하의 값은 측정 불가 ..

개발/Javascript 2020.10.11

[You don't know JS] Part4 - 5장. 프로그램 성능

비동기 패턴 덕분에 성능 좋은 코드를 작성할 수 있었다. 하지만 근본적으로 단일 이벤트 루프 스레드에 묶여있기 때문에 한계가 있다. 이러한 문제를 극복하기 위한 3가지를 알아보았다. 1. 웹 워커 비동기 이벤트를 이용하여 스레드간에 메시지를 교환하며 자바스크립트 파일을 개별 스레드 단위로 실행하게 해준다. 메인 UI 스레드의 응답성을 높이면서도 소요 시간이 길거나 자원을 집중적으로 소모하는 작업을 다른 스레드로 분산하는 장점을 가진다. 2. SIMD CPU 수준의 병렬 수학 연산을 대량 데이터의 수치 연산 같은 고성능 병렬 데이터 연산에 특화된 JS API로 연결하는 기법이다. 3. asm.js GC나 강제변환 등 최적화 하기 어려운 영역을 피해서 자바스크립트 엔진이 이런 부류의 코드를 자동으로 인식하여..

개발/Javascript 2020.10.11

[You don't know JS] Part1 - 1장. 타입

Ch1. 타입 타입이란 자바스크립트 엔진, 개발자 모두에게 어떤 값을 다른 값과 분별할 수 있는, 고유한 내부 특성의 집합이다. 즉, 기계와 사람이 24와 "24" 를 다르게 처리한다면 두 값의 타입은 서로 다르다. 1.1 타입, 그 실체를 이해하자 타입이 명확하지 않다. 어떤 타입으로든 형 변환이 일어난다. 따라서 그 실체를 잘 이해해야 어떻게 변하게 될지 예측이 가능해진다. 1.2 내장 타입 자바스크립트에는 7개의 내장 타입이 존재한다. null undefined number boolean string object symbol object를 제외한 나머지를 원시 타입 이라고 한다. typeof 연산자를 사용하여 각 변수의 타입을 확인할 수 있다. 하지만 정확히 1:1로 매칭되지 않는다. typeof ..

개발/Javascript 2020.08.23

[You don't know JS] 스터디 시작

좀 시간이 흘렀지만 정리도 할겸 블로그에 조금 정리하려고 한다. Javascript를 사용한지 4년 조금 넘어가는데, 매년 Javascript 책을 볼때마다 새로운 내용이 나왔고, 정확히 알지 못하지만 습관적으로 사용하고 있던 개념들이 있었다. 커뮤니티에서 Javascript 스터디를 구한다는 글을 보고 지원했고 매주 두챕터씩 정리하고 발표를 하기로 했다. 확실히 혼자 하는것보단 속도는 느리지만 꾸준히 할 수 있다는게 좋은것같다. 내가 놓친 내용을 듣기도 하고, 이해되지 않은 부분들도 질문하며 각자의 생각과 실무 적용 사례도 공유하면서 진행하고 있다. 이번기회에 잘 정리해보고 매년 살펴보며 정리할 계획이다. 책은 You don't know JS 를 선택했고, 번역본은 1권과 2권으로 나와있다. 사용 사례..

개발/Javascript 2020.08.23