close

Carregamento lento

Ir para a navegação Ir para a pesquisa

O carregamento lento é um padrão de projeto comumente usado em programação de computadores que consiste em atrasar o carregamento ou a inicialização de um objeto até o momento de seu uso . Isso contribui para a eficiência dos programas, evitando o pré-carregamento de objetos que podem não ser utilizados. O oposto de carregamento lento é pré-carregamento, pré-carregamento ou carregamento antecipado .

Implementações

Existem quatro maneiras comuns de implementar o carregamento lento: inicialização lenta ; proxy virtual ; fantasma e detentor de valor . Cada um tem suas próprias vantagens e desvantagens.

Inicialização lenta

Com a inicialização lenta, o objeto a ser carregado com preguiça é originalmente atribuído a um valor nulo e cada solicitação para o objeto verifica se é nulo e o cria "on the fly" antes de retorná-lo, como pode ser visto neste exemplo escrito em C# :

private  int  myWidgetID ; 
privado  Widget  meuWidget  =  null ;
 
public  Widget  MeuWidget  
{ 
    get  
    { 
        if  ( meuWidget  ==  null )  
        { 
            meuWidget  =  Widget . Carregar ( myWidgetID ); 
        }
        
        return  meuWidget ; 
    } 
}

Ou com o operador coalescente para nulidade '??'

private  int  myWidgetID ; 
privado  Widget  meuWidget  =  null ; 

public  Widget  MeuWidget  
{ 
   get  {  return  meuWidget  =  meuWidget  ??  widget . Carregar ( myWidgetID );   } 
}

Esse método é o mais simples de implementar, porém se null for um valor legítimo, pode ser necessário usar um objeto placeholder para indicar que ele não foi inicializado.

Proxy virtual

É um objeto com a mesma interface que o objeto real. Na primeira vez que seu método é chamado, ele carrega o objeto real e o delega.

Fantasma

Um "fantasma" é o objeto que você deseja carregar em um estado parcial. Bem, ele contém apenas o identificador do objeto, mas carrega seus próprios dados desde a primeira vez que uma de suas propriedades é acessada. Por exemplo, considere que o usuário está prestes a fazer uma solicitação de conteúdo de um formulário online. No momento da criação tudo o que sabemos é que algum conteúdo será acessado, mas ainda não se sabe como ou qual conteúdo. Exemplo com PHP:

$usrData  =  array  ( 
    "UID"  =  >  uniqid (), 
    "requestTime"  =>  microtime (  true  ), 
    "dataType"  =>  "" , 
    "request"  =>  "" , 
);

if  ( isset (  $_POST [ 'data' ]  )  &&  $usrData )  { 
    //...

}

Contêiner de Valor

Um Value Holder é um objeto genérico que lida com o comportamento de inicialização lenta e aparece no lugar dos campos do objeto:

private  ValueHolder < Widget >  valueHolder ;
 
public  Widget  MeuWidget  
{ 
    get 
    { 
        return  valueHolder . ObterValor (); 
    } 
}

Veja também

Referências