2012-02-27 12 views
5

新しいチタニウムアプリを開始しています。ベストプラクティスを使用しています。私はCommonJSだけでなく、一般的なTitaniumプラットフォームも初めてです。CommonJSを使用してチタニウムのプロジェクト構造をお勧めします

残念ながら、newer recommended best practiceの代わりにTi.include("/lib/module")のチタンサラウンド用サンプルアプリケーションのすべてがrequire("/lib/module")であるようです。

私が心配しているのは、CommonJSを使用した場合のメモリ消費に必要なことです。 CommonJS Modules in Titanium documentationからは、モジュールがキャッシュされると書かれていますが、スコープから外れてもメモリ内にこれらのすべての機能が突然存在するモジュールにアクセスすると、そのことを意味しませんか?

私は私のメインのアプリは、次のように緩やかに構造化され、単一のダッシュボード形式のビューを持っている。ここから次のような構造

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

で新しいアプリを開始しました:

(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(); 
})(); 

上の任意のガイダンスを正しいプロジェクト構造が高く評価されています。

答えて

2

Thisは純粋にサンプルがモジュールパターン

+0

それは完璧です、プロジェクトの構造は私が後にしたものです。 –

0

私はrequire()を使用していますが、プロジェクトの開始時には長い時間のrequire()を開始しています。最大のTitaniumプロジェクトの1つかもしれません。

私は、これらのrequire文にtousandsのコード行を配置する際に目に見えるコストはないと自信があります。 ただし、constentlyあなたのコードがno memory leaks.

0
を使用して、主に開発した鍛造シリーズを見つけるためにも、開発者のブログに目を通す、モジュールのパターンを使用して開発中のコミュニティアプリである持っていることを確認する必要があります

AFAIK CommonJSモジュールで使用されるメモリは、ウィンドウが正しく閉じられるたびに解放されます。モジュールをグローバルオブジェクトに割り当てない限り、その場合はリークではありません。

個人的には、再利用可能な工場を作成します。実際には、アプリケーションの複雑さにもよりますが、NavGroup内のいくつかのウィンドウであれば、まっすぐに書くだけです。

あなたのアプリが漏れていないことを確認するためにあなたのアプリをプロファイリングすることを忘れないでください。そうしないと、漏れを見つけるのに役立ちません。このvideo for demoを見る(約1/3)。

+0

ドキュメントによると、すべてのCommonJSモジュールがキャッシュされています。私はこの理論を、状態の完全なモジュールを作成することによってテストし、1つのウィンドウで参照し、閉じ、廃棄し、再び開いた状態を保持しました。これはモジュールが状態いっぱいであるappceleratorのcommonJSページでも説明されています。 https://wiki.appcelerator.org/display/guides/CommonJS+Modules+in+Titanium#CommonJSModulesinTitanium-Caching –

関連する問題