문제

지연 로딩이란 무엇입니까?

몇 가지 답변을 읽은 후 편집] 사람들은 왜이 용어를 자주 사용합니까?

ASP/ADO 레코드 세트를 사용하고 그리드 뷰용 데이터 또는 ADO.NET 데이터 소스와 함께 로드한다고 가정해 보겠습니다.

사람들이 왜 지연 로딩이라는 용어를 사용하는지, 어떤 "다른" 유형이 있는지 물어봐야 했을 것 같습니다.

도움이 되었습니까?

해결책

게으른 사람처럼 원하지 않는 일을 미루기 때문에 이를 게으른 로딩이라고 합니다.그 반대는 Eager Loading으로, 필요하기 훨씬 전에 즉시 로드하는 것입니다.

사람들이 지연 로딩을 사용하는 이유가 궁금하다면 시작하는 데 LOOOOONG 시간이 걸리는 애플리케이션을 고려해 보세요.이 애플리케이션은 아마도 열성적인 로딩을 많이 하고 있는 것 같습니다...디스크에서 항목을 로드하고, 계산을 수행하는 등 필요한 작업을 수행합니다.

이를 지연 로딩과 비교하면 애플리케이션이 훨씬 빠르게 시작되지만 처음으로 장시간 실행 로드가 필요한 작업을 수행해야 하는 경우 처음 로드되는 동안 약간의 일시 중지가 발생할 수 있습니다.따라서 지연 로딩을 사용하면 애플리케이션을 실행하는 동안 로드 시간을 절약하게 됩니다.사용자가 절대 사용하지 않을 수도 있는 항목을 로드하는 것을 실제로 절약할 수도 있습니다.

다른 팁

지연 로딩은 처음 필요할 때만 객체를 로드하거나 초기화하는 프로그래밍 방식입니다.이는 특히 애플리케이션에 구성 요소가 많은 경우 잠재적으로 성능을 크게 향상시킬 수 있습니다.

평소처럼, 위키피디아 자세한 내용이 있습니다.

지연 로딩은 필요한 지점에 객체 단위의 로딩을 지연시키는 개념입니다.불필요하게 개체를 로드하는 대신 요청 시 개체를 로드할 때 간단한 단어를 사용합니다.예를 들어 "주문" 개체가 집계된 "고객" 클래스가 있는 경우입니다.따라서 고객 데이터를 로드하고 싶지만 주문 개체는 애플리케이션에서 필요할 때까지 지연하고 싶습니다.

아래는 지연 로딩을 사용하는 방법, 지연 로딩을 구현하는 방법, 장점과 단점을 보여주는 유튜브 비디오입니다.

http://www.youtube.com/watch?v=2SrfdAkwmFo

Wikipedia의 정의 Lazy Loading은 객체가 필요한 지점까지 객체의 초기화를 연기하기 위해 컴퓨터 프로그래밍에 일반적으로 사용되는 설계 패턴입니다....

http://en.wikipedia.org/wiki/Lazy%20loading

지연 로딩이라는 용어는 일반적으로 객체 관계형 매퍼에 대해 말할 때 사용됩니다.ADO.NET을 직접 사용하는 경우 항상 즉시 로드됩니다(즉, 항상 사용자가 지정한 것만 로드됩니다).

nHibernate와 같은 OR 매퍼는 데이터에 액세스할 때만 올바른 데이터로 "채워지는" 프록시 객체 반환을 지원합니다.이렇게 하면 실제로 사용하는 데이터만 로드할 수 있습니다.이는 데이터베이스에서 로드할 수 있는 개체 간의 관계를 많이 지정할 때 유용한 기능입니다. OR 매퍼가 모든 관련 개체 및 관련 개체와 관련된 개체를 로드하는 것을 원하지 않을 때 유용합니다.이로 인해 전체 데이터베이스가 로드될 수 있습니다.

이 문제는 개체 모델을 신중하게 설계함으로써 예방할 수 있습니다.(집계를 사용하고 도메인 기반 디자인처럼 집계 루트만 로드하는 것은 지연 로딩을 사용하지 않고 이 문제를 해결하는 방법입니다.)

지연 로딩으로 인해 또는 매퍼는 필요한 모든 데이터를 한 번 검색하는 대신 소규모 데이터베이스 액세스를 많이 수행하게 될 수 있습니다.이로 인해 성능 문제도 발생할 수 있습니다.

다음은 제가 작성한 실제 Python 코드의 예입니다.

class Item(Model):
    ...
    @property
    def total(self):
        if not hasattr(self, "_total"):
            self._total = self.quantity \
                  + sum(bi.quantity for bi in self.borroweditem_set.all())
        return self._total

기본적으로 인벤토리의 항목을 나타내는 항목 클래스가 있습니다.우리가 가지고 있는 총 아이템 수는 우리가 소유한 수에 다양한 소스에서 빌린 모든 아이템의 합계입니다.이 숫자는 모두 우리 데이터베이스에 저장되며 실제로 총계가 요청될 때까지 이를 계산하는 것은 의미가 없습니다(종종 총계가 요청되지 않고 항목이 사용되기 때문입니다).

따라서 total 속성은 _total 필드가 존재하는지 확인합니다.그렇지 않은 경우 속성 코드는 데이터베이스를 쿼리하여 계산한 다음, 다음에 요청할 때 다시 계산할 필요가 없도록 해당 값을 _total 필드에 저장합니다.

지연 로딩:필요하지 않은 물건으로 시간(또는 기억)을 낭비하지 않습니다.그러면 필요할 때 시간이 더 걸리지만 괜찮습니다.

생활의 예:실제로 프랑스어 관용구집을 배우는 대신, 필요에 따라 한 번에 하나씩 관용구를 배우게 됩니다.언제 이것이 의미가 있습니까?짧은 시간 동안만 프랑스에 있을 예정이거나(즉, 많은 표현이 필요하지 않음) 곧 떠나야 하는 경우.2년 동안 그곳에 머물거나 공부할 시간이 길다면, 사전에 관용구집 전체를 배우는 것이 훨씬 더 효율적일 수 있습니다(eager loading).

[에서 영감을 받아 WKRP에서 Venus가 갱단 용어로 가르친 Atom.]

지연 로딩은 필요할 때만 필요한 정보의 일부를 로드하는 개념을 나타내기 위해 데이터베이스에서 자주 사용되는 용어입니다.

즉.여러 테이블의 조인이 포함된 레코드가 필요하다고 가정해 보겠습니다.한 번에 모두 가져오면 기본 테이블만 가져오는 것보다 시간이 더 오래 걸립니다.지연 로딩을 사용하면 필요한 경우에만 나머지 정보를 가져옵니다.따라서 특정 시나리오에서는 실제로 '효율적인 로딩'입니다.

다른 유형의 '로드'는 다음과 같습니다.

  1. Eager Loading - 연결된 모든 테이블을 한 번에 로드합니다.

디자인 패턴이다.

지연 로딩:코드에서 특정 객체에 의한 일부 작업이 필요할 때까지 객체는 초기화되지 않으며 일단 초기화되면 객체를 다시 초기화하지 않고 이전에 초기화된 객체를 사용합니다.

이렇게 하면 코드가 훨씬 더 효율적이 되고 메모리 사용량을 관리하는 데 도움이 됩니다.

지연 로딩의 적용 예:

유령 게으른 초기화 값 보유자

지연 로딩의 장점은 다음과 같습니다.

  1. 애플리케이션 시작 시간을 최소화합니다.
  2. 애플리케이션은 주문형 로딩으로 인해 메모리를 덜 소비합니다.
  3. 서버에 대한 불필요한 요청을 피합니다.

지연 로딩의 예로는 애플리케이션이 해당 시점의 사용자 브라우저 시점 크기만 로드하는 위치를 확인하기 위해 웹페이지에 많은 데이터가 있는 그리드나 테이블이 있습니다.더 많은 콘텐츠나 데이터를 보기 위해 아래로 스크롤하면 그 순간 더 많은 데이터가 보기에 로드됩니다.

이는 ajax 또는 jQuery를 통해 더욱 일반적인 시각적/상호작용 디자인 패턴이 되고 있습니다.

위에서 언급한 것처럼 클라이언트를 고려하지 않아 잠재적으로 성능 저하가 발생하는 Eager Loading은 그 반대입니다.

Lazy<T> 이제 C# 4.0의 일부입니다. 멋진 페이지가 있습니다. MSDN 개념을 설명하는 것입니다.

Geeksforgeeks에 따르면 지연 로딩은 사용의 단순성을 유지하고 성능을 향상시키기 위해 객체가 실제로 필요할 때만 초기화가 발생하고 이전에는 발생하지 않는 소프트웨어 디자인 패턴입니다.

https://www.geeksforgeeks.org/lazy-loading-design-pattern/

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top