전체 글 219

함수형 프로그래밍의 백미 currying & composition, 그리고 React작동원리

f1: fullname f2: appendAddr f3: removeNames 3개가 각각 타도되고 안타도되는거라면 보통 처음 코딩을하면 이것을 함수하나에서 전부 짜게된다 이는 명령형으로 함수를 짜는것이다. 우리는 선언형으로 짜도록 노력해야한다. 처음짜는 사람은 const useResult (u,caller)=>{ if(caller==="fullname")... else if (caller === "appendAddr") .... } //이런식으로 짜게된다. 하지만 이것을 컴포즈로 짜게되면 //화살표 화살표는 커링 //배열의 reduce는 함수형 언어에서 정말 중요하다! //reduce에서는 함수에 기본값을 주면 함수의 인자로서 넣어준다. const compose = (...fns) => (obj) =>..

카테고리 없음 2021.11.13

deep dive Promise, Generator, async/await

디바운스 쓰로틀은 무조건 알고가기! 자원의 20%는 항상 미래를 위해 써야한다! (10시간 업무중 2시간은 미래를 위해 사용해야 한다) 이벤트루프라는것은 계속 도는것이다. 비동기프로그래밍의 핵심은 마이크로테스크큐와 이벤트루프이다. JS는 싱글스레드이다. 현재 실행되는 스래드를 thread local이라고 한다. 싱글쓰레드는 프로세스 하나에 쓰레드 하나만 쓰기 때문에 빠르다. 동접자가 많은 서비스는 싱글쓰레드를 선호한다 (이유 : queue를 빨리 비워주는게 좋기 때문에) 모든 비동기는 Promise로 되어있고 Promise는 iterator이다. Promise로 짜면 비동기라 하고 그렇지 않으면 동기라고 한다. 비동기는 I/O에서 일어난다 (input output) input (Write) / outpu..

deep dive DOM EVENT

모르면안된다 Event는 EventRegistry라는것이 브라우저에 있다, (event queue라는것도 잇다); addEventListner에서 focus, focus in / blur, focus out의 차이를 알아야한다 focus blur는 bubbling이 발생하지 않는다 focus in, focus out은 버블링이 발생한다. 이벤트는 비동기이다. event.stopPropagation(); 을 쓰면 부모의 이벤트를 실행하지 않는것이다. event.preventDefault();는 원래 실행하는 이벤트를 실행하지 않는것이다 요즘 브라우저는 다 버블링이다. 이벤트리스너를 걸때는 무조건 돔이 먼저 생성되고나서 리스너를 걸 수 있도록 한다. onClick은 첫번쨰인자를 함수로받는다. event.ta..

deep dive 브라우저의 랜더링 과정

뭘 만들려고하는데 어떻게 구조를 짜야할지 모르겟다... -> 이런컨설팅은 재미가 있다. 아이디어에 대해서 아키텍쳐를 잡아주니까 근데 그런건 10%도 안되고 90%는 서비스중인데 문제가있을때 한다. 새로 시작하는 프로젝트 하는 회사가는게 마음이 편할 수 있다. 노드는 쓰레드기반이 아니라 프로세스기반이라 cpu한장당 하나밖에 일 못한다. 메모리를 공유하기위해서는 Redis를 쓴다. redis의 단점은 key value 모두 String 이라 string을 json.parse를 해야한다. parse하는동안 error가 나거나 시간이 오래걸리면 뻑이난다. ----------------------------------------------------------------------------------------..

deep dive Set & Map

셋은 집합의 Set이ㅣ고 Map은 줄여쓴것이다(HashMap) Map이라는 자료구조는 다 Key - Value쌍이다. Set은 Array이지만 Unique한 Array이다. Map과 Set은 Index가 없다 (속에서는 다 해쉬테이블로 하기때문에) 자바스크립트는 map을 array의 형태로 가지고있다 ['key', 'value']의 형태이다. Set은 중복하기 위해 많이쓰는데 Map은 왜쓰는것일까 Map.get('k2')를 하면 한번에 k2에 대한 값을 가져올수있으니 편하다 데이터베이스에 병목이 일어난 다음에 소켓에 병목이 일어난다. node를 실행시킬때 힙이 잡힌다. (처음에 시작할때 넓게 공간을 잡는다) Map과 Set은 WeakSet과 WeakMap을 써야한다(가급적이면) WeakMap을 쓰는 이유..