2011-04-02 29 views
5

'da head.js veya labjs gibi bir JavaScript yükleyici nasıl kullanılır? SPento'nun kapalı olması, zaten hantal yükleme sürelerine yardımcı olmayan yarım düzine JavaScript kitaplığından oluşur. Başarıyla eşzamansız olarak yükleyebilmeleri için head.js veya labjs gibi bir komut dosyası yükleyicisini başarıyla kullanabilen oldu mu? Deniyorum ama işe yaramayacağım.Magento

Kitaplıkların yüklenmesinden önce sayfalardaki satır içi komut dosyalarının işlenip duruyormuş gibi görünüyor. Head.js'nin bir betiği yürütmek için head.ready gibi bir işlevi olduğunu biliyorum, ancak bu kadar çok sayıda in-line betik var ki, bunu sitenin her yerine eklemek mümkün değil.

cevap

4

vardır bir programatik çözüm.

Oluşturulmuş HTML'yi vermeden hemen önce tetiklenen core_block_abstract_to_html_after veya controller_action_layout_render_before Olaylarına bağlanan bir Gözlemci yazabilirsiniz. senin Observer, her <script> etiketinden hemen sonra bir head.ready açıklama eklemek için bir preg_replace kullanabilirsiniz.

Bu, oluşturma süresine daha çok bir parça ekler, ancak kitaplıkları indirme gecikmesinden daha az olacağından şüpheleniyorum. Tam sayfa önbelleğe almayı kullanıyorsanız, işlev yalnızca bir kez çağrılır.

Etkiyi test etmek için dahili Magento Profiler'i kullanabilirsiniz. En azından denemeye değer.

HTH,
JD

+0

, bu umut verici görünüyor, geri dönüp rapor alacak –

0

Bu doğanın tüm yükleyicileri, sitenizdeki her bir komut dosyasına bir miktar değişiklik gerektirecektir. Biliyorum - LABJ'leri bir sistemde, grev yaptığımda, bir çeşit script etiketiyle 400'den fazla dosya gösterdim!

2

iyi, ben bunun için jquery kullanıyoruz. ve harika çalışıyor.
yapmanız gereken tek şey komut verir ve sonra eval kullanarak alfabenin değerlendirmek ajax isteği yapmaktır. Bunun için kendi işlevinizi yazabilirsiniz, ancak jquery zaten bazı güzel yaklaşımlara sahiptir.
Tekli komut dosyaları için $.getScript işlevi iyi çalışır. Temel olarak, bir komut dosyası istediğini belirten $.ajax işlevinin bir uzantısıdır.

$.getScript('my_script_url',function(){ 
    // do whatever needs to be done after the script loads 
    alert('my script was asynchroniously loaded'); 
}); 

Eğer ajax yoluyla eklemek istediğiniz daha komut varsa, jQuery bunu yapmanın bir neet yolu vardır: sözdizimi böyledir satır içi komut İlişkin

$.when(
    $.getScript("/script_1.js"), 
    $.getScript("/script_2.js"), 
    $.getScript("/script_3.js") 
    // ... 
    //$.getScript("/script_n.js") 
).then(
    // on succes 
    function(){ 
     alert('good to go!'); 
    }, 
    // on failure 
    function(){ 
     alert('loading failed. one or more scripts encountered a problem :('); 
    } 
); 
+0

sayesinde bu Magento satır içi komut kitlelerin sorunu çözer? Bu yöntem kütüphaneler yüklenene kadar