일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- ECS
- visualizing
- data analyze
- analyzing
- 자바스크립트
- Agile
- tensorflow
- TypeScript
- python
- keras
- angular
- adaptive life cycle
- webcrawling
- DANAWA
- javascript
- 다나와
- data
- pandas
- Scrum
- opencv
- 프로젝트
- algorithm
- 크롤링
- Crawling
- AWS
- Project
- Method
- instance
- matplotlib
- 애자일
Archives
- Today
- Total
LiJell's 성장기
검색 기능 개선 본문
반응형
1. 관리자 페이지 검색 기능이 느리고,
2. 종종 잘못된 정보를 받는 상황을 처리한 내용이다.
해결방법
throttleTime >> debounceTime
throttleTime을 사용해서 발생한 문제이다.
throttleTime
throttleTime
연산자는 설정한 주기(ms) 안에observable
값을 방출하면 그 값을 방출한 즉시 해당 값을 무시한다.- 설정한 주기(ms)가 지난 후 다음 값을 방출할 때까지 다른 값들도 무시한다.
- 즉, 설정한 주기(ms) 안에 최대 1번의 값을 방출한다.
debounceTime
debounceTime
연산자는 설정한 주기(ms) 안에 소스 옵저버블이 값을 방출하면 해당 주기(ms)가 다 지난 후에 그 값을 방출한다.- 그리고 이 주기(ms) 안에 다른 값들이 방출되면 이전 값은 취소한다.
- 즉, 설정한 주기(ms) 안에 마지막 값을 방출한다.
일반적으로 throttleTime
은 이벤트가 빈번하게 발생하고도 일정 시간마다 처리할 필요가 있는 경우에 사용하며, debounceTime
은 이벤트가 빈번하게 발생하지만 마지막 이벤트만 처리할 필요가 있는 경우에 사용한다.
결론
즉, throttleTime
을 사용했을 때. 첫번째 event
를 받은 후 이후 event
를 일정 시간동안 무시하기 때문에 발생한 문제이다.
distinctUntilChanged() 사용
유저가 typing을 멈추거나 이전과 다른 검색을 했을 때 때만 api call을 해준다.
- 불필요한 call을 줄여준다.
shareReplay() 삭제
shareReplay
는 obserables
의 결과를 caching해준다.
Multiple subscribers
에게 single subscription
을 share
하는 것이다.
subscriber
이 하나여서 불필요했다.
- 불필요한 cache로 성능 저하가 생긴다.
forkJoin 사용
array of observables을 처리하는 부분이 있었다.
Oberables
들이 모두 완료될 때 까지 기다린 후 emit한다.Promise.all
보다 성능이 좋다.promises
가 created 되고 resolved되는 수를 줄여준다.observables
이 많을수록 효과가 좋다.
combineLatest와 다른점
combineLatest
는 observables
가 value를 emit할 때 마다 emit한다.
반응형
Comments