【问题标题】:Please recommend a titanium project structure using CommonJS请推荐一个使用 CommonJS 的钛项目结构
【发布时间】:2012-03-16 13:29:18
【问题描述】:

我正在启动一个新的 Titanium 应用程序,并希望使用最佳实践并避免从一开始就发生内存泄漏。我是 CommonJS 以及 Titanium 平台的新手。

不幸的是,钛的所有示例应用程序似乎都围绕Ti.include("/lib/module") 而不是require("/lib/module")newer recommended best practice

我担心的是使用 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();
})();

非常感谢任何有关正确项目结构的指导。

【问题讨论】:

    标签: javascript ios titanium titanium-mobile commonjs


    【解决方案1】:

    This是一个正在开发中的纯模块模式的社区应用,也可以通过开发者博客找到Forging系列,其中有大部分使用模块模式开发的示例

    【讨论】:

    • 完美,项目结构正是我所追求的。
    【解决方案2】:

    我使用 require() 并且在项目开始时我有很长的 require() 开始 - 这可能是最大的 Titanium 项目之一。

    而且我可以自信地说,在这些 require 语句中放入大量代码行没有明显的成本。 但是,您必须经常检查您的代码是否包含no memory leaks.

    【讨论】:

      【解决方案3】:

      AFAIK 每当窗口正确关闭时,CommonJS 模块使用的内存就会被释放。除非您将模块分配给全局对象,否则在这种情况下它不会是泄漏。

      就我个人而言,我创建了一个可重复使用的工厂。其实这取决于应用程序的复杂程度,如果只是 NavGroup 中的几个窗口,我就直接写了。

      不要忘记使用 Xcode 工具分析您的应用程序,以确保您的应用程序没有泄漏,如果发生泄漏,它将有助于发现泄漏。观看此video for demo(大约 1/3 的距离)。

      【讨论】:

      • 根据文档,所有 CommonJS 模块都被缓存。我通过创建一个状态完整模块来测试这个理论,并在一个窗口中引用,关闭,处理并再次打开,状态被保留。这也在 appcelerator commonJS 页面上解释了模块状态已满。 wiki.appcelerator.org/display/guides/…
      猜你喜欢
      • 2010-11-24
      • 1970-01-01
      • 1970-01-01
      • 2011-07-24
      • 2012-12-18
      • 1970-01-01
      • 2013-12-19
      • 2018-12-23
      • 1970-01-01
      相关资源
      最近更新 更多