désireux de chargement et de chargement paresseux dans les rails
Je suis confus au sujet impatient de chargement et le chargement paresseux, il n'existe aucune différence dans les performances de rails de requêtes?
Est-il possible de mettre en œuvre les moyens?
Vous devez vous connecter pour publier un commentaire.
Désireux de Chargement
Un moyen pour améliorer les performances est de réduire le nombre de requêtes SQL. Vous pouvez le faire via désireux de chargement.
Ici vous êtes de cuisson seulement deux requêtes :
1) Un pour tous les utilisateurs.
2) Un pour tous les amis des utilisateurs .
Lazy Loading :
Lorsque vous avez un objet en lien avec de nombreux objets comme un Utilisateur a beaucoup d'Amis et vous souhaitez afficher une liste comme dans Orkut vous tirer autant de requêtes qu'il y a d'amis, plus un pour l'objet lui-même.
Une requête pour chaque utilisateur ami , comme :
Ici
1) Une requête pour tous les utilisateurs.
2) requête N pour N pas. des utilisateurs des amis .
Prendre un coup d'oeil sur : Rails 3: chargement différé contre désireux de chargement
Espère que cela va vous aider à comprendre cela .
"Lazy loading is a design pattern commonly used in computer programming to defer initialization of an object until the point at which it is needed. It can contribute to efficiency in the program's operation if properly and appropriately used." -Wikipedia
Fondamentalement, si votre page a un tas d'images que l'utilisateur ne voit pas jusqu'à ce qu'il défile, vous pouvez attendre jusqu'à ce qu'il se défile vers le bas et de voir l'image à charger. C'est-à chargement différé.Désireux de chargement
Charge de vos armes à feu (comme dans Vicksburg) et attendez jusqu'à ce que vous réellement besoin de l'utiliser. C'est une politique d'désireux de chargement.
Pro: est-ce que tout est prêt.
Con: vous êtes en utilisant de l'espace et la mémoire.
Chargement Paresseux
Un jeune cadet de la marine a demandé à Lord Nelson pourquoi il n'était pas de la préparation de ses navires:
"Je ne vais pas charger mes canons début.......Je vais charger juste 1 microseconde avant j'ai besoin de faire feu." dit-il. C'est un paresseux politique de chargement.
Pro de chargement paresseux: vous n'avez pas accès à la base de données jusqu'à ce que vous avez besoin.
Con: Vous allez être frappé dans la base de données N + 1 fois.....si vous ne sélectionnez pas exactement la colonne que vous voulez et vous alias. par exemple,
Frapper la Base de données qu'une seule fois avec un chargement différé politique:
La requête ci-dessus hits de la base de données N + 1 fois lorsque vous appelez
product.category.name
dans le modèle de vue - où le produit est un objet unique dans le@products
relation. Mais si vous alias, vous pouvez tout faire avec une seule requête:Et de l'utiliser comme ceci: produit.category_name