Gösterdiğiniz iki kod bloğu, ne zaman ve neden yürütüldükleri açısından önemli ölçüde farklıdır. Birbirlerini dışlamazlar. Aynı amaca hizmet etmiyorlar.
JavaScript Modülleri
(function($) {
})(jQuery);
Bu, hemen çağıran bir işlevle uygulanan bir "JavaScript Modülü" modelidir.
Bu kodun amacı, kodunuz için "modülerlik", gizlilik ve kapsülleme sağlamaktır.
Bunun uygulanması, çağıran (jQuery)parantez tarafından hemen çağrılan bir işlevdir . JQuery'yi paranteze geçirmenin amacı, global değişkene yerel kapsam sağlamaktır. Bu, $değişkene bakmanın ek yükünü azaltmaya yardımcı olur ve bazı durumlarda küçültme araçları için daha iyi sıkıştırma / optimizasyon sağlar.
Anında çağrılan işlevler hemen çalıştırılır. Fonksiyon tanımı tamamlanır tamamlanmaz, fonksiyon yürütülür.
jQuery'nin "DOMReady" işlevi
Bu, jQuery'nin "DOMReady" işlevinin takma adıdır: http://api.jquery.com/ready/
$(function(){
});
jQuery'nin "DOMReady" işlevi, DOM JavaScript kodunuz tarafından değiştirilmeye hazır olduğunda çalıştırılır.
Modüller vs DOMReady In Backbone Code
Omurga kodunuzu jQuery'nin DOMReady işlevi içinde tanımlamak kötü bir biçimdir ve uygulama performansınıza potansiyel olarak zarar verir. Bu işlev, DOM yüklenene ve değiştirilmeye hazır olana kadar çağrılmaz. Bu, nesnelerinizi tanımlamadan önce tarayıcının DOM'u en az bir kez ayrıştırmasını beklediğiniz anlamına gelir.
Backbone nesnelerinizi DOMReady işlevi dışında tanımlamak daha iyi bir fikirdir. Diğerlerinin yanı sıra, bunu bir JavaScript Modülü modeli içinde yapmayı tercih ediyorum, böylece kodum için kapsülleme ve gizlilik sağlayabiliyorum. Modülümün dışında ihtiyacım olan bitlere erişim sağlamak için "Gösterme Modülü" modelini (yukarıdaki ilk bağlantıya bakın) kullanma eğilimindeyim.
Nesnelerinizi DOMReady işlevinin dışında tanımlayarak ve onlara başvurmak için bir yol sunarak, tarayıcının JavaScript'inizi işlemeye bir adım atmasına izin vererek potansiyel olarak kullanıcı deneyimini hızlandırmış olursunuz. Ayrıca, bir şeyleri hareket ettirdiğinizde daha fazla DOMREady işlevi oluşturma konusunda endişelenmenize gerek kalmadan nesneleri hareket ettirebileceğiniz için kodu daha esnek hale getirir.
Backbone nesnelerinizi başka bir yerde tanımlasanız bile muhtemelen DOMReady işlevini kullanacaksınız. Bunun nedeni, birçok Backbone uygulamasının DOM'u bir şekilde değiştirmesi gerektiğidir. Bunu yapmak için DOM hazır olana kadar beklemeniz gerekir, bu nedenle uygulamanızı tanımlandıktan sonra başlatmak için DOMReady işlevini kullanmanız gerekir.
Web'de bununla ilgili birçok örnek bulabilirsiniz, ancak burada hem Modül hem de DOMReady işlevini kullanan çok temel bir uygulama:
MyApp = (function(Backbone, $){
var View = Backbone.View.extend({
});
return {
init: function(){
var view = new View();
$("#some-div").html(view.render().el);
}
};
})(Backbone, jQuery);
$(function(){
MyApp.init();
});