답변:
동일한 콘텐츠 를 렌더링 할 때 많은 부분 및 단일 뷰 사이의 렌더링 성능 차이가 크지 않다는 것을 알고 있습니다.
분명히 어떤 경우에는 일부만 렌더링하고 다른 경우에는 일부만 렌더링하는 경우 특정 뷰의 렌더링 볼륨을 효과적으로 줄이면 속도가 향상 될 수 있습니다.
다른 한편으로, 나는 그들의 존재를 정당화하기 위해 적어도 두 곳에서 사용해야하는 부분 추상화를 항상 고려했다. 부분 뷰를 사용하는 다른 이유는 동일한 뷰를 렌더링하지만 일부 비즈니스 논리에 따라 다른 부분을로드하려는 경우입니다.
최신 정보:
렌더링 속도에 대한 측정 또는 구체적인 숫자를 제공 할 수 없습니다. 뷰에서 부분을 사용하는 경우 렌더링하기 위해 render 메소드를 호출하므로 두 번째 메소드 호출이 있습니다. 내 대답에서 말했듯이 이것은 거의 아무것도 아니지만 일의 속도를 높이는 데 도움이 될 수 있습니다.
그러나 부분을 제거하여 성능 문제를 해결하는 프로젝트에 대해서는 들어 본 적이 없습니다. 부분은 뷰에 대한 재사용 메커니즘을 제공하고 프로그래머의 관점에서 해당 범위에 사용해야하는 좋은 방법입니다. 그것들은 뷰에서 일반적인 개념에 대한 추상화 여야합니다.
나는 부분적으로 과도하게 사용 된 프로젝트에서 일했다. Rails가 아니라 동일한 MVC 원칙. 상상할 수있는 모든 것에 작은 부분을 사용하면 수십 개가 나기 시작할 때 찾기가 어렵습니다. 입력 내용을 어디에서 수정 하시겠습니까? 보기에서? 부분적으로? 이 부분에 대해 4 개의 부분이 있습니까? ...
하드 리팩토링 후 뷰가 업데이트 될 때마다 불필요한 부분이 제거되었습니다. 그것들은 완전히 사라지지는 않았지만 프로젝트에 잘 정의 된 추상화가 남아 있습니다. 그것들은 여러 뷰에서 형태로 또는 다른 형태로 반복되는 잘 이해되는 요소 (일종의 객체에 대한 트리 또는 특정 목록 유형)를 나타냅니다. 나는 그 부분이있는 나무를 볼 수 있는지 알고 있습니다. 특정 유형의 목록을 볼 때 그 일부가 있음을 알고 있습니다. 나는 그들을 사냥하지 않았습니다.
코드 가독성은 소프트웨어 코드 기반에서 가장 중요한 일입니다.
Code readability
. 그게 전부입니다.
나는 두 대답에 동의하지 않습니다. 부분 뷰에서 코드를 부모 뷰 부분에 존재하는 위치에 복사하고 붙여 넣었으며 500 회 반복하면 뷰를 렌더링하는 데 시간이 600ms가 걸립니다. <% = render xyz %>는 제 생각에는 매우 깨졌습니다.
예를 들어, 총 렌더링 시간 :
Before:
5759.8ms
5804.2ms
5973.6ms
After:
5268.7ms
5201.6ms
5222.4ms
Diff = 5846 - 5231 = 615 ms
편집
나는 _model 부분 내의 모든 _partials를 건조시키지 않고 ~ 2000ms로 낮추었습니다.이 시점에서 _model 부분을 인덱스로 이동하려고 시도했지만 렌더링 시간에 영향을 미치지 않았으므로 중첩 된 렌더링에 대한 호출이있는 것 같습니다. 그렇습니다.
n + 1 문제 가 없고 모든 데이터베이스가 선행 작업을 수행 하더라도 (예 : 재귀 적 CTE) 중첩 된 부분은 여전히 느립니다. Haml과 Erb는 모두 느리게 보입니다. Rails 5.1.4에서 각 부분에 대해 몇 밀리 초를 보았으며 때로는 더 나쁜 부분이있을 수 있습니다 (가비지 수집에 해당).
이러한 요청 중 하나가 실행되는 동안 부분 이름을 바꾸면 파일을 찾지 못하는 방법에 대한 오류가 즉시 발생합니다. 따라서 Rails는 부분적으로 디스크를 읽고 다시 분석 한 다음 각 반복에 대해 평가합니다. 느려진 것도 당연합니다!