지연 로딩이란 무엇입니까?
[몇 가지 답변을 읽은 후 편집] 사람들이이 용어를 자주 사용하는 이유는 무엇입니까?
ASP / ADO 레코드 집합을 사용하고 gridview에 대한 데이터 또는 ADO.NET 데이터 소스와 함께로드한다고 가정 해보십시오.
왜 사람들이 Lazy Loading이라는 용어를 사용하는지 물어 보았어야했는데 어떤 "다른"유형이 있습니까?
지연 로딩이란 무엇입니까?
[몇 가지 답변을 읽은 후 편집] 사람들이이 용어를 자주 사용하는 이유는 무엇입니까?
ASP / ADO 레코드 집합을 사용하고 gridview에 대한 데이터 또는 ADO.NET 데이터 소스와 함께로드한다고 가정 해보십시오.
왜 사람들이 Lazy Loading이라는 용어를 사용하는지 물어 보았어야했는데 어떤 "다른"유형이 있습니까?
답변:
게으른 사람처럼 원하지 않는 일을 미루기 때문에 지연 로딩이라고합니다. 반대는 Eager Loading으로, 필요하기 훨씬 전에 즉시로드합니다.
왜 사람들이 지연 로딩을 사용하는지 궁금하다면 시작하는 데 시간이 오래 걸리는 애플리케이션을 고려해보세요. 이 응용 프로그램은 아마도 디스크에서 작업을로드하고 계산을 수행하는 등 많은 노력을 기울이고있을 것입니다.
이를 지연로드와 비교하면 애플리케이션이 훨씬 더 빠르게 시작되지만 장기 실행로드가 필요한 작업을 처음 수행해야하는 경우 처음로드되는 동안 약간의 일시 중지가있을 수 있습니다. 따라서 지연로드를 사용하면 애플리케이션을 실행하는 동안로드 시간을 분할 할 수 있습니다. 그리고 실제로 사용자가 사용하지 않으려는 항목을로드하지 않아도됩니다.
지연 로딩은 우리가 그것을 필요로하는 지점까지 오브젝트 유닛의 로딩을 지연시키는 개념입니다. 불필요하게 개체를로드하지 않고 요청시 개체로드시 간단한 단어를 입력합니다. 예를 들어 "Orders"개체가 집계 된 "Customer"클래스가있는 경우입니다. 따라서 고객 데이터를로드하고 싶지만 애플리케이션에 필요할 때까지 지연하려는 주문 개체가 있습니다.
아래는 lazy loading 사용 방법, lazy loading 구현 방법 및 장점과 단점을 보여주는 YouTube 동영상입니다.
위키 백과의 정의 지연 로딩은 객체가 필요한 시점까지 객체 초기화를 연기하기 위해 컴퓨터 프로그래밍에서 일반적으로 사용되는 디자인 패턴입니다. ...
지연 로딩이라는 용어는 일반적으로 객체 관계형 매퍼에 대해 이야기 할 때 사용됩니다. 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
기본적으로 인벤토리의 항목을 나타내는 Item 클래스가 있습니다. 우리가 가지고있는 총 아이템 수는 우리가 소유 한 수와 다양한 출처에서 빌린 모든 아이템의 합계입니다. 이 숫자는 모두 데이터베이스에 저장되며 총계가 실제로 요청 될 때까지이를 계산하는 것은 의미가 없습니다 (총계를 요청하지 않고 항목이 자주 사용되기 때문에).
따라서 total 속성은 _total 필드가 있는지 여부를 확인합니다. 그렇지 않은 경우 속성 코드는 데이터베이스를 쿼리하고 계산 한 다음 _total 필드에 값을 저장하므로 다음에 요청할 때 다시 계산할 필요가 없습니다.
지연로드 : 필요하지 않을 수도있는 항목에 시간 (또는 기억)을 낭비하지 않습니다. 그런 다음 필요할 때 더 오래 걸리지 만 괜찮습니다.
삶의 예 : 실제로 프랑스어 관용구를 배우는 대신 필요에 따라 한 번에 하나씩 구를 배웁니다. 이것이 언제 말이 되는가? 짧은 시간 동안 만 프랑스에있을 예정이거나 (즉, 많은 문구가 필요하지 않음) 곧 떠나야하는 경우. 2 년 동안 거기에 있거나 공부할 시간이 긴 경우, 전체 관용구를 미리 배우는 것이 훨씬 더 효율적일 수 있습니다 (간단한 로딩).
[ WKRP에서 Venus가 갱단 용어로 가르친 Atom에서 영감을 얻었 습니다 .]
지연로드의 몇 가지 장점 :
geeksforgeeks에 따르면 지연 로딩은 사용의 단순성을 유지하고 성능을 향상시키기 위해 이전이 아니라 실제로 필요할 때만 객체의 초기화가 발생하는 소프트웨어 디자인 패턴입니다.