[JavaScript] range와 느긋한 L.range 테스트

2023. 5. 1. 23:46· Node.js/JS
목차
  1. range, L.range 테스트

range, L.range 테스트

const range = l => {
	let i = -1;
	const res = [];
    while (++i < l) {
	    res.push(i);
    }
    return res;
};

const L = {};
L.range = function *(l) {
	let i = -1;
    while (++i < l) {
        yield i;
    }
};

위 두 함수는 성능 면에서 어떤 차이가 있을까?

 

테스트를 위해 함수를 하나 만들 수 있다.

const test = (name, time, f) => {
	console.time(name);
    while (time--) f();
    console.timeEnd(name);
};

test('range', 10, () => reduce(add, range(1000000)));
test('L.range', 10, () => reduce(add, L.range(1000000)));

// range: 약 500ms
// L.range: 약 300ms

 

앞선 강의에서 range는 reduce 함수에서 array를 만들고, 이 array에서 iterator를 꺼내어 next로 값을 뽑아낸 다음 이를 활용하였다.

반면 L.range는 이터레이터가 자기 자신을 리턴하여 이 이터레이터로 순회를 하므로 조금 더 효율적이라는 언급이 있었다. 처음에는 이게 얼마나 크리티컬할지 예상이 되지 않았다. 실제로도 미미한 차이이지만, 어느 정도 차이가 발생한다는 것은 사실이기 때문에 흥미로운 부분이었다.  제너레이터는 이터러블을 만든다는 것은 알지만, 이것이 과연 어떤 부분이 장점이고 왜 이를 도입하게 되었는지 아직까지 확실하게 와닿지는 않는다. 게다가 서버에서 함수형 프로그래밍을 활발하게 사용할 수 있을지도 아직은 의문이다. 어떤 점이 좋은 것이고, 어떤 점이 좋지 않은 것인지 잘 파악하며 공부해야겠다.


출처: 인프런 함수형 프로그래밍과 JavaScript ES6+

저작자표시 비영리 (새창열림)

'Node.js > JS' 카테고리의 다른 글

[JavaScript] 제너레이터/이터레이터 프로토콜로 구현하는 지연 평가  (0) 2023.05.02
[JavaScript] take 함수  (2) 2023.05.02
[JavaScript] range와 느긋한 L.range  (0) 2023.04.30
[JavaScript] 이터러블 객체와 순회 함수 응용  (0) 2023.04.30
[JavaScript] go, curry 함수를 만들어 읽기 좋은 코드 만들기  (0) 2023.04.29
  1. range, L.range 테스트
'Node.js/JS' 카테고리의 다른 글
  • [JavaScript] 제너레이터/이터레이터 프로토콜로 구현하는 지연 평가
  • [JavaScript] take 함수
  • [JavaScript] range와 느긋한 L.range
  • [JavaScript] 이터러블 객체와 순회 함수 응용
턴태
턴태
import { Dream } from "future";
턴태
턴태의 밑바닥부터 시작하는 de-vlog
턴태
전체
오늘
어제
  • ROOT (187)
    • Node.js (37)
      • ES6 (1)
      • TypeScript (3)
      • Express.js (16)
      • NestJS (16)
      • JS (24)
    • 프론트엔드 (29)
      • CS (5)
    • 백엔드 (1)
      • 검색 (2)
      • Database (1)
    • 기타 툴 (1)
      • git (1)
    • 데브옵스 & 인프라 (19)
      • Kubernetes (15)
      • Docker (2)
      • Monitoring (1)
      • IaC (1)
    • Algorithm (90)
      • Implementation & simulation (5)
      • Math (4)
      • Brute Force (1)
      • String (0)
      • Graph (5)
      • Recursion & Backtracking (19)
      • Divide & Conquer (2)
      • Dynamic Programming (18)
      • Greedy (13)
      • Priority Queue (2)
      • Binary Search (6)
      • Data Structure (7)
      • Shortest Path (5)
      • Minimum Spanning Tree (1)
      • Sorting (1)
      • Prefix Sum (1)
    • Linux (1)
      • Ubuntu (1)
    • Diary (5)
      • Algorithm (1)
      • Conference (1)
      • Retrospective (3)
    • Book (0)
      • Self-Development (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 함수형 프로그래밍
  • 디프만
  • Toy Project
  • 익스프레스
  • 다이나믹 프로그래밍
  • k8s
  • baekjoon
  • 백준
  • node.js
  • 토이프로젝트
  • 백트래킹
  • dynamic programming
  • 파이썬
  • Omuk
  • 네스트
  • 노드
  • 오먹
  • GREEDY
  • backtracking
  • 인프런X디프만
  • Kubernetes
  • N과 M
  • nestjs
  • python
  • 인프런
  • 자바스크립트
  • 쿠버네티스
  • TypeScript
  • Express
  • 타입스크립트

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
턴태
[JavaScript] range와 느긋한 L.range 테스트
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.