2012-02-27 5 views
5

Sto avviando una nuova app di Titanium e voglio usare le migliori pratiche ed evitare perdite di memoria dall'inizio. Sono nuovo di CommonJS e della piattaforma Titanium in generale.Si prega di raccomandare una struttura di progetto in titanio usando CommonJS

Purtroppo sembra che tutte le applicazioni di esempio per il titanio surround su Ti.include("/lib/module") anziché newer recommended best practice di require("/lib/module").

Quello che mi preoccupa è il consumo di memoria dell'utilizzo di CommonJS potrebbe richiedere. Da CommonJS Modules in Titanium documentation si afferma che i moduli verranno memorizzati nella cache, non significa che se accedo a un modulo tutte queste funzioni rimangono improvvisamente in memoria anche se escono dall'ambito di applicazione?

ho iniziato una nuova applicazione con la seguente struttura

/ctrl   # Model/UI controllers 
/lib   # libraries (common + 3rd party) 
/ui    # UI forms 
/model   # DAL objects for data store 

Da qui la mia app principale ha un unico punto di vista stile dashboard che è vagamente strutturato come segue:

(function() { 
    var getMenuItem = require("/ui/main").getMenuItem; 
    var win = Titanium.UI.createWindow({ 
     title:'Main', 
     backgroundColor:'#fff' 
    }); 
    var nav = Ti.UI.iPhone.createNavigationGroup({ 
     window:win 
    }); 
    var sect; 
    var data = []; 
    sect = Ti.UI.createTableViewSection(); 
    data.push(sect); 
    sect.add(getMenuItem("Customers", 
     require("/ctrl/account").createCustMainWindow)); 
    sect.add(getMenuItem("Schedules", 
     require("/ctrl/schedule").createScheduleMainWindow)); 
    sect.add(getMenuItem("Settings")); 
    var menu = Titanium.UI.createTableView({ 
     style: Ti.UI.iPhone.TableViewStyle.GROUPED, 
     data:data 
    }); 
    win.add(menu); 
    menu.addEventListener('click',function(e) { 
     if (e.rowData.createWindow) { 
      var win = e.rowData.createWindow(nav); 
      nav.open(win); 
     } 
    }); 
    var navWindow = Titanium.UI.createWindow(); 
    navWindow.add(nav); 
    navWindow.open(); 
})(); 

Qualsiasi orientamento su una struttura di progetto corretta è molto apprezzata.

risposta

2

This è l'applicazione della comunità fase di sviluppo che utilizza puramente modello modulo, guardate anche tramite il blog degli sviluppatori di trovare forgiatura serie che hanno campioni sviluppati per lo più utilizzando il modulo modello

+0

Questo è perfetto, la struttura del progetto è esattamente quello che cercavo. –

0

Io uso require() e ho un lungo avvio di require() all'inizio del progetto - che potrebbe essere uno dei più grandi progetti di Titanium.

E posso confidare nel dire che non vi è alcun costo visibile nel mettere tousands di linee di codice in queste dichiarazioni richiedono. Tuttavia, è necessario constently controllare che il codice ha no memory leaks.

0

AFAIK la memoria utilizzata dal modulo CommonJS viene rilasciata ogni volta che la finestra viene chiusa correttamente. A meno che non si assegni il modulo a un oggetto globale, in quel caso non sarebbe una perdita.

Personalmente, creo una fabbrica riutilizzabile. In realtà, dipende da quanto sia complessa l'app, se si tratta solo di un paio di finestre all'interno di NavGroup, lo scrivo semplicemente.

E non dimenticarti di profilare la tua app con gli strumenti Xcode per assicurarti che la tua app non abbia perdite e, in caso affermativo, ti aiuterà a trovare la perdita. Guarda questo video for demo (circa 1/3 di ingresso).

+0

Secondo i documenti tutti i moduli CommonJS sono memorizzati nella cache. Ho testato questa teoria creando un modulo di stato completo e riferito in una finestra, chiuso, disposto e riaperto, lo stato è stato mantenuto. Questo è anche spiegato nella pagina commonJS dell'appcelerator che i moduli sono pieni. https://wiki.appcelerator.org/display/guides/CommonJS+Modules+in+Titanium#CommonJSModulesinTitanium-Caching –