• 카테고리

    질문 & 답변
  • 세부 분야

    프론트엔드

  • 해결 여부

    해결됨

[질문] 스벨트 최적화에 대해서

20.10.31 14:16 작성 조회수 293

2

안녕하세요. 강사님 강의를 듣다가 갑자기 궁금한게 생겨서 질문드립니다. 제가 리액트를 아주 잘 알지 못하지만 예전에 잠깐 했을 때 최적화하는 부분이 떠올랐습니다.(갑자기 떠오른거라 제가 하는 말이 사실과 조금 다를수도 있습니당)

예를 들어 map을 통해서 리스트를 화면에 출력해야하는 경우에 리액트의 경우 상위 컴포넌트가 바뀌면 아래 하위컴포넌트를 다시 렌더링하는 것으로 알고 있는데요. 그 과정에서 변경된 자식만 렌더링하기 위해 라이프사이클 또는 React.memo로 별도의 작업을 해줬던걸로 기억합니다. 

스벨트도 비슷한 작업을 해주어야하나요? 

답변 5

·

답변을 작성해보세요.

2

우선 해당 파트가 질문하신 부분에 대한 것이어서 다행입니다.

혹시 사용에 대한 구분이 명확하지 않으시면, 말씀하신 것처럼 Props의 자료형에 따라 <svelte:options immutable />을 선언하거나 선언하지 않으시면 됩니다.

특별히 문제 될 여지는 없습니다.

조금 더 설명을 추가하자면, 

강의에서 말씀드린 것처럼 새로운 Props와 기존 Props를 `===`(동등 연산자)로 비교할 때 true가 반환되면,

원시형은 같은 데이터라는 것이 확실하지만, 참조형은 그렇지가 않죠, 그 반대의 경우도 마찬가지고요.

그래서 참조형은 따로 비교하지 않고, <svelte:options immutable />로 비교 값에 따른 동작을 개발자가 보장하는 것입니다.

특히 Vue 같은 경우는 가상 DOM으로 비교하기 때문에, 자동으로 데이터 변경을 통한 반응성을 가집니다.

물론 반응성을 가지지 않도록 선언할 수 있긴 합니다만, 부분적으로 중간에서 하나씩 제어하긴 오히려 훨씬 어렵습니다.

이런 부분에서 분명한 Trade-off가 있죠.

Svelte에 특성에서 말씀드렸던, 명시적 개발의 특징입니다.

잘만 사용하시면 오히려 최적화가 더 쉬울 수 있죠.

아마 '데이터의 불변성' 대해 명확해지면 내용의 구분도 확실해지실 거로 생각합니다.

제가 모든 걸 다 알고 있는 건 아니지만, 관련해 궁금하신 부분이 있으면 편하게 질문 주세요^^

아는 선에서 성실하게 답변드리겠습니다.

1

HEROPY님 답변 감사합니다. 말씀하신대로 제가 원하는게 '특별한 요소 5. options - 불변성 선언(immutable)'입니다.

정리해보자면 부모에서 자식으로 props로 넘기는데 참조형(배열, 함수, 객체 등등)을 넘기는 경우 자식 요소에 <svelte:options

immutable />을 선언하거나 혹은 부모 요소에서 props를 넘길 때 기본자료형(숫자, 문자열)을 넘기면 된다. 라고

생각해도 될까요? 추가적으로 자바스크립트 불변과 가변에 대해서 명확히 이해할 수 있도록 하겠습니다.

1

HEROPY님 주말까지 신경써주셔서 감사합니다. 현재 '특별한 요소 5. options - 불변성 선언(immutable)'까지 학습을 진행하지 못해서 해당 내용에 대해서 추후에 해당 내용을 학습한 후 해소가 된다면 반드시 답글 남기겠습니다. 신경써주셔서 감사합니다. 🥰

1

hellofrontdev님께서 제가 답변드린 '특별한 요소 5. options - 불변성 선언(immutable)' 파트를 학습하셨다면,

혹시 위에서 질문하신 내용이 해당 파트에서 해소되셨나요?

1

React는 저도 잘은 모르지만, React.memo라면..

단순 비교는 어렵겠지만, 질문의 뉘앙스는 아마 <svelte:options immutable />이 해당하는 내용이지 않을까 합니다.

'특별한 요소 5. options - 불변성 선언(immutable)' 파트를 참고하세요.