2009-10-31 7 views
1

Comment charger les images en AS3:façons de charger des images en AS3

  1. les charger à la fois, par exemple comme celui-ci (pseudo code AS3):

    for each (var url:String in images){ 
        loader.load(url); 
    } 
    
  2. Ou charger un par un (nouveau code pseudo):

    loader.load(images.shift()) 
    
    onComplete(){ 
        loadNext(images.shift()); 
    } 
    

qui est plus rapide et mieux pour la performance?

Répondre

3

La deuxième voie semble beaucoup mieux. S'il y a des centaines d'images à charger alors dans la première approche, toutes les demandes d'images seront lancées presque en même temps rendant le navigateur presque inutilisable et le chargement de la première image peut prendre plus de temps en raison des demandes parallèles (la bande passante sera partagée) que la deuxième approche. Mais le temps de chargement global (c'est-à-dire le nombre d'images * temps moyen pour charger une seule image) sera moindre dans un premier temps.

La meilleure chose serait d'utiliser un hybride de ces approches. Chargez MAX_NUMBER à tout moment, ce qui signifie que vous commencez à charger les images jusqu'à MAX_NUMBER des opérations de chargement de l'image sont en cours. Et dès qu'une opération de chargement est terminée, commencez par en charger une nouvelle. Voici l'approche approximative. loadimages doit être appelé après l'intervalle de temps fixe peut être 100 ms. Et MAX_NUMBER peut être 20 ou plus.

function loadimages(){ 
    while(count < MAX_NUMBER) { 
     loader.load(images.shift); 
     count++; 
    } 
} 
onComplete() {count--;} 
onFail(){count--;} 
setIntarval(loadimages, 100); 

Et surtout cela dépend de la façon dont votre application utilise des images, à savoir en même temps ou peut-être un sous-ensemble d'entre eux à tout moment donné.

3

Cette question n'a pas de réponse simple. Lorsque Flash charge un fichier (dans un navigateur), il dépend du navigateur pour gérer la transaction http, la mise en cache, etc. Si vous n'avez que quelques images et qu'elles ne sont pas trop grandes, la première méthode est plus facile à utiliser. programme, et vous pouvez compter sur la file d'attente de chargement HTTP des navigateurs pour gérer les fichiers.

Si vous avez beaucoup de fichiers (dizaines et dizaines), il peut être préférable de l'échelonner de plusieurs façons. Tout d'abord, chaque création d'objet est assez coûteuse, dans le cas d'un chargeur, vous finirez par y attacher des écouteurs d'événements, et même éventuellement afficher une animation de chargement. Ceci est assez cher et ralentira le Flash en diminuant la réactivité de votre application. Deuxièmement, en les décalant vous êtes en contrôle explicite de ce qui est chargé quand, plutôt que de dépendre de l'implémentation http des navigateurs. Par exemple, vous pouvez ensuite vous assurer que les éléments auxquels l'utilisateur va accéder en premier sont chargés en premier.

Dans le cas de fichiers beaucoup plus volumineux (disons des centaines de kilooctets), vous pouvez charger l'un après l'autre, ce qui entraîne une diminution de la bande passante de l'utilisateur. Cela permet une forme de résultat plus rapide que peut-être attendre quatre fichiers (une limite concurrente habituelle) de 100 kilo-octets à télécharger en parallèle.

La stratégie que vous choisissez dépend vraiment de ce que vous essayez de faire et je pense que c'est finalement trop ambigu pour ce forum.

Une autre chose à noter est que la seconde méthode n'est pas très robuste en cas d'échec du téléchargement.

Questions connexes