Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[정리] FEConf 2021 : A track #20

Open
sbyeol3 opened this issue Nov 1, 2021 · 1 comment
Open

[정리] FEConf 2021 : A track #20

sbyeol3 opened this issue Nov 1, 2021 · 1 comment

Comments

@sbyeol3
Copy link
Owner

sbyeol3 commented Nov 1, 2021

컴포넌트, 다시 생각하기

영상 링크, 원지혁님

  • React Component의 의존성을 기능적으로 분류하면 props, hooks가 있다.
  • 특징적(feature)으로 분류하면 style, logic, global state, remote data schema (API 서버에서 내려주는 데이터 모양)
  • 새로운 정보를 추가하기 위해 그 정보 뿐만 아니라 필연적으로 다른 컴포넌트를 수정하게 된다 숨은 의존성

컴포넌트 리팩토링

  • 비슷한 관심사라면 가까운 곳에 Keep Locality
    • 보통 로직이나 스타일을 같은 위치에 두게 됨
    • 위에서는 아이디만 받고, 모양(스키마)는 전역 상태에서 받음으로써 의존성을 끊자
  • 데이터를 ID 기반으로 정리하기 Abstraction by Normalization
    • 데이터 정규화를 도와주는 라이브러리 normalizr 참고
  • 의존한다면 그대로 드러내기 Make Explicit
    • props 네이밍을 지을 때는 의존성을 명확하게 드러내는 것이 좋다.
  • 모델 기준으로 컴포넌트 분리하기 Separating Components by Model
    • 함께 변해야 하는 것들과 따로 변해야 하는 것들?
    • 유저들이 생각하는 일관성은 모델이 중심 -> 같은 모델을 의존한다면 재사용, 다른 모델을 의존한다면 분리

Global ID

  • 아이디만 가지고 특정 데이터를 유일하게 식별하는 ID 체계
  • 사용할 데이터 모델 정보마저 컴포넌트 내부에서 co-locate 할 수 있음
  • GOI(Global Object Identification) : 어떠한 코드 위치, 맥락에 있든 global ID를 기반으로 특정 객체를 가져올 수 있는 API
  • data flow : 루트 컴포넌트에서 가져온 데이터를 정규화, 내 컴포넌트에서 Global ID로 저장소에서 특정 데이터 요청, 만약 데이터가 없는 경우에는 API 서버에서 데이터 요청하고 저장 후 내 컴포넌트로 전달
  • Refetch를 할 때도 유용

왜 나는 React를 사랑하는가

영상 링크, 안희종님

  • Reconciler : 렌더러와 무관하게 공유되며 우리가 리액트의 문법이라고 생각되어지는 부분 (components, props, state 등...)
    • React 코드를 해석하는 엔진의 역할을 수행함
  • React UI Tree가 그려지는 환경은 호스트 환경과 상호작용 -> 어셈블리
호스팅 환경 패키지
HTML react-dom
iOS, Android ... react-native
terminal ink
Three.js react-three-fiber
JSON react-test-render
  • React의 코어 로직이 웹 환경과 직접적으로 붙지 않는 것이 React의 의도적 결정
  • 프로그래밍 언어의 동적 스코핑 -> Context API
  • Fiber Reconciler 방식 -> 운영체제 스케쥴링
  • 대수적 효과 -> Hooks, Suspense
  • 도전적인 과제에 대한 좋은 해결책은 답안지를 훔쳐봄으로써 얻을 수도 있다.
@sbyeol3
Copy link
Owner Author

sbyeol3 commented Mar 22, 2022

SWC와 웹 개발의 미래

강동윤님, Vercel

  • ECMAScript6 + Babel의 영향으로 웹 프로젝트 빌드의 개념이 강해짐
  • React, JSX의 등장 > 브라우저가 이해할 수 있는 코드로 바꾸어주어야 함 (트랜스파일링)
  • 빌드라는 작업은 CPU를 많이 쓰는 작업, Nodejs는 이벤트 루프 기반이므로 CPU를 많이 쓰는 작업ㅇ 맞지 않음
  • 성능은 컴파일러가 어떻게 얼마나 최적화하는지가 중요
  • Babel은 JS로 만들어졌기 때문에 JS의 제약도 그래도 적용 > 1개의 CPU 코어만 사용
    • 트랜스파일링하는 동안 자바스크립트 스레드는 다른 일들을 할 수 없음

언어를 바꾸자

SWC (Speedy Web Compiler)

  • Rust로 작성됨, 여러 웹 빌드 툴을 대체하는 것이 목적
  • 왜 Rust인가? 제일 중요한 성능! 성능에 영향을 끼치는 건 언어설정, 병렬처리를 위한 Rust는 FFI 편의성이 좋음, 여러 언어가 섞이는 경우 GC가 없는 것이 오히려 편해짐. 제너릭이 있고 proc macro(코드 유틸리티)가 있음

SWC 기능

transform

  • babel과 비슷하지만 자바스크립트 코드와 다른 스레드에서 돌아감
  • stage3 이상의 기능은 다 포팅
  • 타입스크립트, 데코레이터, JSX 지원

minify

  • terser와 비슷한 압축률로 성능이 좋음

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant