복붙노트

[RUBY-ON-RAILS] 탄환 및 RSpec에 보석을 이용하여 N + 1 개 쿼리를 줄이기

RUBY-ON-RAILS

탄환 및 RSpec에 보석을 이용하여 N + 1 개 쿼리를 줄이기

RSpec에와 총알 보석을 사용하는 효과적인 방법은 무엇입니까? 지금 내 현재의 단위 테스트 프레임 워크를 사용하는 경우 내가 느끼는 나는 통지 또는 때문에 이러한 확인으로 내 생산 응용 프로그램에서 무슨 관련이없는 시험 자체 내에서 N + 1 개 쿼리의 테스트의 실패를 많이 얻을 값 또는 연관. 따라서, N + 1 오류를 수정하는 것은 오히려 특정 오류가 발생하지 않도록 내 테스트 설정에서 뭔가를 설정해야합니다, 내 컨트롤러 나 모델에 아무것도 설정이 필요하고 나는 내 응용 프로그램에 대한 실제 성능 향상을 참조하지 않습니다.

해결법

  1. ==============================

    1.가장 효과적인 방법은 전혀 없습니다. 전체 실행 시간을 단축하는 것이 가장 분명 테스트에서 N + 1 쿼리를 줄이고 일부 합법적 인 이점이있을 수 있습니다. 그것은 당신이 중 하나를 너무 많이 테스트 또는 가능한 것보다 덜 중요한 이익을 만들고있다, 그러나 매우 가능하다. 또한 보통 응용 프로그램의 전반적인 가치에 기여하기보다는, 테스트까지 도움 소품에 추가 코드를 작성하는 호소력 찾을 수 있습니다.

    가장 효과적인 방법은 전혀 없습니다. 전체 실행 시간을 단축하는 것이 가장 분명 테스트에서 N + 1 쿼리를 줄이고 일부 합법적 인 이점이있을 수 있습니다. 그것은 당신이 중 하나를 너무 많이 테스트 또는 가능한 것보다 덜 중요한 이익을 만들고있다, 그러나 매우 가능하다. 또한 보통 응용 프로그램의 전반적인 가치에 기여하기보다는, 테스트까지 도움 소품에 추가 코드를 작성하는 호소력 찾을 수 있습니다.

    나를 당신의 시간의 대체 사용을 제안 할 수 있도록하십시오. 당신의 안락 수준의 절대 최소 만 단위 테스트. 나는 개인적으로 검증 관련 문제 및 돈이나 다른 수학을 포함하는 복잡한 방법에 집중하고, 당신은 서로 다른 우선 순위를 가질 수있다. 선 그리기 유지 보수 예산의 대부분을 차지합니다 테스트 스위트의 가장 쓸모없고 허약 한 부분을 작성하는 시간의 전체 무리를 확보합니다.

    이제 무엇을해야 할 것이다 여분의 시간을 모두? 우리는 당신이 할 수 있도록 ... 당신은 특히 당신이 단지에 대한 단위 테스트의 전체 무리를 떨어졌다 개체를 사용하는 영역에 대해, 일부 수용 테스트를 작성하여 시작할 수있는 무언가를 찾을 수 있습니다, 걱정하지 마십시오. 사용자가 페이지를 칠 때 이제 N + 1 경고는 실제로 것 같은 지점에서오고있다. 지금 당신은 N + 1 개 쿼리를 모두 제거에 갈 수 있습니다.

    하지만 기다려! 그 중 하나를하지 마십시오. 대신, 터치 옵션을 사용하도록 관계를 설정하는 좋은 거래 소요되는 시간을 줄일 수 있습니다. 자식 개체가 업데이트되는 경우 다음, 부모도 업데이트됩니다. 도대체이 N + 1 쿼리해야 할 무엇, 당신은 궁금 할 것이다. 우리가 쿼리를 추가하는 것 같다 ...

    러시아 인형 캐싱이 들어오는 곳이다. 위쪽 해제 단위 테스트 및 + 1 제거 시간 N 소비를 테스트 제대로 것이 추가와 (과 다음 몇 가지, 당신이 조심하지 않으면). 좋은 것은 그것이 방법이다 더 "현실 세계", 훨씬 더 탄력 당신의 모델과 이것 저것에 미미하거나 관련이없는 구현을 변경, 잘 열심히로드 모두에 의해 매 n + 1 개 쿼리를 제거하는 것 이상의 응용 프로그램에 큰 성능 향상에 정면은 제공하고 있습니다. 이 방법을 최대한 활용하기 위해, 게으르게 인간적으로 가능한 중첩 된 캐싱 및로드 모두에 가능한 한 많이 이동할 것입니다.

    만세 N + 1!

  2. from https://stackoverflow.com/questions/26247288/reducing-n1-queries-using-the-bullet-and-rspec-gems by cc-by-sa and MIT license