Lazy Load與Dependency

 Mon, 01 Sep 2008 15:29:47 +0800

最近看了一些討論動態載入javascript與dependency的討論,主要問題在於動態載入後直接呼叫。通常Lazy Load可以用兩種方法達成,一種是靠ajax與eval,另一種是靠動態在dom裡面插入script element。

使用ajax/eval的方法因為程式用eval執行了,不會有延遲,所以立刻執行已載入的程式是沒有問題的。但是不想使用ajax,而改用在dom裡面插入script元素時,又會因為延遲而不一定能隨即呼叫已載入的程式。

要蹶決這樣的問題,通常的方法是把這個script元素加上事件處理函數,然後在事件發生時才執行已載入的程式。但是又會碰到一個小問題,就是在ie只能使用onreadystatechange事件,在ff則只能使用onload事件。

簡單的方法是兩個統統都實現。因為對於javascript來說,給一個物件額外增加onreadystatechange或是onload屬性,其實都不會有錯誤,這樣就不必判斷是哪個瀏覽器。不過這只是一個tricky的方法就是了,也許新的瀏覽器會不適用....