Nous avons l'exemple de code suivant: nous pouvons obtenir différents problèmes de performancecharge paresseuse ou début de charge pour python?
big_static_data = {
"key1" : {
"subkey1" : "subvalue1",
...
},
"key2" :
...
}
class StaticDataEarlyLoad:
def __init__(self):
self.static_data = big_static_data
# other init
def handle_use_id(self, id):
return complex_handle(self.static_data, id)
...
class StaticDataLazyLoad:
def __init__(self):
# not init static data
# other init
def handle_use_id(self, id):
return complex_handle(big_static_data, id)
...
Tout comme les codes ci-dessus dit, chaque fois que nous appelons handle_use_id de l'instance,.
OMI, au début de la charge charge les données lorsque l'instance est créée, et sera en mémoire jusqu'à ce que l'instance est garbaged. Et pour le chargement tardif, les données statiques ne seront pas chargées jusqu'à ce que nous appelions la méthode handle_use_id. Ai-je raison? (Puisque je ne suis pas très clair avec l'interne de Python, je ne sais pas combien de temps l'instance durera jusqu'à garbaged). Et si j'ai raison, le chargement précoce signifie une grosse mémoire et le chargement tardif signifie que nous devons charger les données chaque fois que nous invoquons la méthode (un gros overhead?)
Maintenant, nous sommes un projet web , Alors qui devrait être choisi comme la meilleure approche? (handle_use_id sera invoqué très fréquemment.)
Merci.
Sans cas d'utilisation spécifique, il n'y a aucun moyen de répondre à cette question. À quelle fréquence est-ce utilisé? Deux fois par jour? Deux fois par seconde? Quel est le rapport des différentes méthodes invoquées sur cette grande structure? Il n'y a pas de «meilleur» sans profils spécifiques et détaillés de la façon dont il sera utilisé. –
** très souvent ** signifie que cela dépend des comportements des utilisateurs. Je pense que ce sera une fois par 10 secondes si l'utilisateur se connecte. –
@Tower Joo: "très souvent" ne veut rien dire. Une fois en 10 secondes, cela signifie cependant quelque chose. –