SORU
6 HAZİRAN 2012, ÇARŞAMBA


Nasıl RequireJS ile tembel yükleme elde etmek için?

Non-trival web uygulama Omurgası, RequireJS ve Gidon kullanarak inşa ediyoruz, ve sadece merak ediyorum. Şu anda, bizim modeller biraz her Bu gibi görünüyor:

define(['Backbone', 'js/thing/a', 'js/thing/b', 'js/lib/bob'], function(a, b, bob) {
  return Backbone.Router.extend({
    // stuff here
  });
});

şey, şey/b hem kendi bağımlılıkları nerede, Gidonun örneğin şablonlar, vb. Ne olur şimdi o benim main.js tüm bu 'üst düzey' yönlendiricileri yüklenir ve başlatılır; her üst düzey yönlendirici bir set bağımlılıkları (model, görünüm, vb) her biri kendi bağımlılıklar (şablonlar, yardımcıları, araçlarının, vb.). Aslında, büyük bir ağaç yapısı.

Bu sorun, tüm ağacı çözülmüş ve sayfa yük yüklenir. Doktoru ile sonunda çalıştırın ve bir büyük tek bir dosya ile karşılaşacağız gibi sé başına öyle bir düşüncem yok, (temelde yazılım bölümleme çerçevesinde RequireJS azaltarak). Ancak, görüş ve şablonlar gibi şeyler yükleyebilirsiniz olup olmadığını merak ediyorum 'talep'.

Sarma "açıkladı denedim here,:. CommonJS" basitleştirilmiş var

define(function(require) {
  Backbone = require('Backbone');
  return Backbone.Router.extend({
    doStuff: function() {
      var MyView = require('js/myView');
      new MyView().render();
    }
  });
});

Ancak, Krom ağ Müfettiş bakıyor, RequireJS - bir şekilde, hatta doStuff işleyicisi tetikleyen rota tetiklemeden - hala myView bağımlılık yükler gibi görünüyor. Soru:

  • Bu gerçekten mümkün mü? 8 ** aslında doStuff yol vermeden aramalar için arayan RequireJS içinde kara büyü var mı?
  • ... Teorik olarak doğru şekilde 'isteğe bağlı', RequireJS modülleri ve kaynaklar? tembel yükleniyor bu
  • R.doktoru hala bu gösterimde kullanırsanız reklamı gibi çalışır js?

CEVAP
6 HAZİRAN 2012, ÇARŞAMBA


Bu gerçekten mümkün mü? Gerektiren aramalar için arayan RequireJS kara büyü() var aslında doStuff tetiklemeden rota?

'Şeker' it uses Function.prototype.toString and a regex require başvurularınızı ayıklamak ve daha sonra bu fonksiyonu çalıştırmadan önce. bağımlılıkları onları listeler sözdizimi kullandığınızda Temelde ilk argüman olarak yönetimi Teslim alma Mal hareketi bir dizi tanımlamak normal stili olur.

Çünkü bu, değil mi bakım gerektiren nerede aramaları ve bu yüzden koşullu ifadeler yok sayılır (bunu da açıklar neden o require aramaları için kullanın bir dize ve değişken).

... Teorik olarak doğru şekilde 'isteğe bağlı', RequireJS modülleri ve kaynaklar? tembel yükleniyor bu

Şeker sözdizimini kullanarak gördüğünüz gibi koşullu yükleme izin vermez. Düşünebildiğim tek yolu kafamın üst kapalı yönetimi Teslim alma Mal hareketi, bir dizi ve bir geri arama require Bir aramayı kullanmak için:

define(function(require) {
    var module1 = require('module1');

    // This will only load if the condition is true
    if (true) {
        require(['module2'], function(module2) {

        });
    }

    return {};
});

Tek dezavantajı başka bir iç içe geçmiş işlev ama eğer performanstan sonra iseniz, o zaman bu geçerli bir yol.

R.doktoru hala bu gösterimde kullanırsanız reklamı gibi çalışır js?

'Şeker' sözdizimi Evet, doktoru iyi çalışır. kullanıyorsanız Bir örnek:

modules/test.js

define(function(require) {
    var $ = require('jquery');
    var _ = require('underscore');

    return {
        bla: true
    }
});

Bir zamanlar r tarafından derlenmiş.js bu gibi görünüyor:

define('modules/test', ['require', 'jquery', 'underscore'], function(require) {
    var $ = require('jquery');
    var _ = require('underscore');

    return {
        bla: true
    }
});

Sonuç olarak, eğer r ile proje optimize etmek için planlıyorsanız şeyler sizin de bahsettiğiniz gibi koşullu, ama yükleyebilirsiniz.js sonra sadece şeker sözdizimini kullanarak büyük bir yükü yok.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Amazon Web Services

    Amazon Web S

    8 NİSAN 2009
  • ChannelRichard

    ChannelRicha

    7 Kasım 2008
  • Google

    Google

    18 EYLÜL 2005