작은 API를 고려할 때 React의 파일 크기가 왜 그렇게 큰가요?


88

숫자는 다음과 같습니다.

  • min + gzip 26k
  • gzip 90k
  • 오리지널 450 + k

그리고 React는 문서에 많은 기능이 없습니다. 왜 그렇게 큽니까?

나는 그것이 경량 DOM의 구현이라고 느낍니다. 하지만 확신하고 싶습니다.


4
소스가 어떤 역할을하는지 살펴 보셨나요? 유용한 팁, 축소 된 버전을 보지 마십시오.
Mr Lister 2013

6
나는 코드를 시작하기 전에 물어보기로했다. 리 액트를 사용할 계획이지만 어쨌든 그곳에서 다이빙을 할 것입니다.)
Eldar Djafarov 2013

2
26K는 모든 ..에서이 크지 않다
BT

사람들은 반응이 크지 않다고 말합니다. 예, reactjs 자체는 매우 작지만 (버전 16.1.1의 경우 6.41KB) React가 작동하려면 ReactDOM이 필요하고 ReactDOM의 크기는 92.4KB임을 기억하세요
Dinh Tran

답변:


187

React는 꽤 많이합니다! React의 가장 눈에 띄지 않는 부분은 아마도 이벤트 시스템 일 것입니다. React는 자체 이벤트 디스패치 및 버블 링을 구현할뿐만 아니라 브라우저 전반에 걸쳐 공통 이벤트를 정규화하므로 걱정할 필요가 없습니다. 예를 들어, SelectEventPluginonSelect모든 브라우저에서 동일한 방식으로 작동 하는 이벤트를 제공하는 기본 제공 이벤트 "플러그인"입니다 .

가상 DOM의 구현뿐만 아니라 코드의 상당한 금액을 가지고 간다; 성능 최적화에 많은 노력이 들기 때문에 축소되지 않은 버전에는 렌더링 성능을 측정하기위한 도구 인 ReactPerf가 포함되어 있습니다. DOM을 업데이트 할 때 React는 입력 선택을 유지하고 현재 스크롤 위치를 동일하게 유지하는 것과 같은 편리한 작업도 수행합니다.

React에는 몇 가지 다른 트릭이 있습니다. 가장 멋진 것 중 하나는 브라우저 환경이 없더라도 컴포넌트를 HTML 문자열로 렌더링하는 것을 완벽하게 지원하므로 JS가로드되기 전에도 작동하는 페이지를 보낼 수 있다는 것입니다.


React를 무엇과 비교하고 있습니까? react-15.0.2.min.js입니다 43k (gzipped)만, jQuery를이 33K 동안은 ember-2.6.0.prod.js입니다 363k (also gzipped). 분명히 이러한 프레임 워크는 똑같은 작업을 수행하지는 않지만 중복되는 부분이 많기 때문에 비교가 합리적이라고 생각합니다.

다운로드 크기가 걱정된다면 JS 코드가 이에 기여하는 것에 대해 너무 걱정하지 않을 것입니다. 현재 내 Stack Overflow 페이지 오른쪽에 표시되는 광고는 다음과 같습니다.

다운로드 크기는 95k입니다. (성능에 대해 걱정 했더라도) 일반적으로 더 유리한 수정해야 할 다른 성능 관련 사항이 많기 때문에 페이지에 이와 같은 이미지를 포함하는 것에 대해 두 번 생각하지 않습니다.


요컨대, React가 그렇게 크지 않다고 생각하며, 그 크기는 당신을 돕기 위해하는 많은 작은 일들에서 비롯됩니다. React의 코드가 작아야하는 이유로 React의 작은 API를 언급하지만 더 좋은 질문은 "React의 API가 당신을 위해하는 모든 일을 감안할 때 어떻게 그렇게 간단 할 수 있습니까?"입니다.

… 그러나 그것은 완전히 별개의 질문입니다. :) 내가 귀하의 질문에 답했으면 좋겠습니다. 그렇지 않으면 확장하게되어 기쁩니다.


4
당신은 내 질문에 완전히 대답했습니다. React는 굉장합니다. 모바일에 사용할 생각이라 크기가 중요 해요. 그것이하는 일에 대한 정보가 많지 않을뿐입니다. 그리고 사용할 수있는 더 많은 트릭이 있다고 생각합니다.) jquery 물건을 제거 할 수 있다고 생각합니다. 그리고 paulmillr / exoskeleton은 제 시간에 있습니다 :)
Eldar Djafarov 2013

2
저는 완전히 다른 앱 구축 개념을 파헤 치고 있습니다. vimeo.com/78151404github.com/component/component 확인 -jQuery 가 전혀 필요하지 않은 것을 사용하고 jsxtransformations와 잘 어울립니다. 그리고 React는 가장 어려운 작업을 수행합니다. 다른 모든 (모델, 라우팅, 서버 통신)은 마이크로 구성 요소로 처리 할 수 ​​있습니다.
Eldar Djafarov 2013

30
참고, 우리는 크기가 매우 중요한 Facebook의 모바일 웹 사이트에서 React를 사용하고 있습니다. :)
Vjeux

4
@lightblade 음 ... 아니. 메모리 사용량은 코드가 할당하는 수에 따라 다릅니다. React는 할당을 피하기 위해 매우 열심히 노력합니다.
Dan Abramov

2
@ 1nfiniti 좋아, 2 년 반이 지난 이후 몇 가지 새로운 숫자로 업데이트되었습니다.
Sophie Alpert

-1

몇 가지 생각 .. 크기에 대해서도 똑같은 고민이 있었는데, 사용 후 농담없이 5MB라면 사용하겠다. 그것은 단지 좋은 일입니다. 즉, 가능한 한 다른 라이브러리에 대한 종속성을 줄이기로 결정했습니다. 두 가지를 위해 jquery를 사용했습니다. ajax와 자동 ajax 응답 및 로그인 후 토큰이 응답에있을 때 처리 할 요청 처리 (beforeSend 등)를 사용한 다음 모든 ajax 요청이 이전에 Authorization 헤더에 추가했는지 확인합니다. 배상. 나는 이것을 아주 작은 간단한 네이티브 자바 스크립트로 대체했습니다. 잘 작동합니다. 또한 _underscore를 사용하려고했습니다. 나는 그것을 더 작고 더 빠른 lodash로 대체했지만 현재는 사용하지 않고 있으므로 완전히 제거 할 수 있습니다.

다음은 jquery를 통해 네이티브 JS를 사용하는 몇 가지 대안이있는 Google의 많은 기사 중 하나입니다.

http://www.sitepoint.com/jquery-vs-raw-javascript-1-dom-forms/


1
당신은 또한 당신이 여러 브라우저를 대상으로하는 경우 사용하는 조각 jQuery를의 사용자 지정 버전을 만들 수
댄 Heberden
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.