2009-10-31 61 views
1

如何加載圖像AS3:方法來加載圖像AS3

  1. 一次加載所有這些,比如像這樣的(僞AS3代碼):

    for each (var url:String in images){ 
        loader.load(url); 
    } 
    
  2. 或者加載他們一個接一個(再次,僞代碼):

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

哪性能更快更好嗎?

回答

3

第二種方式似乎好多了。如果在第一種方法中有數百個圖像加載,那麼所有的圖像請求幾乎同時被觸發,導致瀏覽器幾乎不可用,並且由於並行請求(帶寬將被共享),第一個圖像的加載可能花費相當長的時間,比第二種方法。但總體加載時間(即圖像數量*加載單個圖像的平均時間)將以第一種方式減少。

最好的辦法是使用這些方法的混合。在任何時候加載MAX_NUMBER這意味着開始加載圖像直到MAX_NUMBER的圖像加載操作正在進行中。一旦加載操作完成,開始加載一個新的。以下是粗略的方法。需要在固定的時間間隔後調用loadimages可能是100毫秒。而MAX_NUMBER可以是20左右。

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

,主要取決於它如何您的應用程序在同一時間或在可能的任何給定時間點他們的子集,使用圖像,即所有。

3

這個問題沒有一個簡單的答案。

當Flash加載一個文件(在瀏覽器中)時,它依賴於瀏覽器來管理http事務,緩存等。如果你只有幾張圖片並且它們不是太大,第一種方法更容易程序,你可以依靠瀏覽器http加載隊列來管理這些文件。

如果你有很多文件(數十和數十個),以某種方式錯開它可能在很多方面更好。首先,每個對象的創建都非常昂貴,在加載器的情況下,您最終會將事件監聽器附加到它上面,甚至可能會顯示加載動畫。這非常昂貴,並且會減慢Flash的速度,降低應用程序的響應速度。其次,通過讓他們蹣跚而行,你明確地控制了什麼時候加載什麼,而不是依賴於瀏覽器的http實現。例如,您可以確保首先加載用戶首先要訪問的項目。

如果文件大得多(可以說數百千字節),則可以一個接一個地加載,這樣不會導致用戶帶寬不足。這允許某種形式的結果比等待四個(通常併發限制)百KB文件並行下載更快。

您選擇的策略實際上取決於您正在嘗試做什麼,我認爲最終對於此論壇來說太模糊了。

另一件需要注意的是,第二種方法在下載失敗的情況下不是很健壯。