Пожалуйста, порекомендуйте структуру проекта из титана, используя CommonJS - PullRequest
5 голосов
/ 27 февраля 2012

Я запускаю новое приложение Titanium и хочу использовать лучшие практики и избежать утечек памяти с самого начала.Я новичок в CommonJS, а также в целом для платформы Titanium.

К сожалению, кажется, что все примеры приложений для титана охватывают Ti.include("/lib/module") вместо более новой рекомендуемой лучшей практики изrequire("/lib/module").

Меня беспокоит то, что может потребоваться использование памяти при использовании CommonJS.Из CommonJS Modules в Titanium документации говорится, что модули будут кэшироваться, разве это не значит, что если я когда-нибудь получу доступ к модулю, все эти функции внезапно останутся в памяти, даже если они выйдут из области видимости?

Я запустил новое приложение со следующей структурой

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

Любые указания по правильной структуре проекта приветствуются.

Ответы [ 3 ]

2 голосов
/ 01 марта 2012

Это - это разрабатываемое приложение сообщества, которое использует только шаблон модулей, также просмотрите блог разработчиков, чтобы найти серии Forging, примеры которых были разработаны в основном с использованием шаблонов модулей

0 голосов
/ 01 марта 2012

AFAIK память, используемая модулем CommonJS, освобождается всякий раз, когда окно правильно закрывается.Если вы не назначите модуль глобальному объекту, в этом случае это не будет утечка.

Лично я создаю фабрику многократного использования.На самом деле, это зависит от того, насколько сложным является приложение, если это всего лишь пара окон в NavGroup, я просто пишу это прямо.

И не забудьте профилировать ваше приложение с инструментами Xcode, чтобы убедиться, что ваше приложениене протекает, и если это произойдет, это поможет найти утечку.Посмотрите это видео для демонстрации (около 1/3 пути).

0 голосов
/ 27 февраля 2012

Я использую require (), и у меня длинный старт require () в начале проекта - который может быть одним из крупнейших проектов Titanium.

И я могу с уверенностью сказать, что нет никакой видимой стоимости вложения тысяч строк кода в эти операторы require. Однако вы должны постоянно проверять, чтобы в вашем коде не было утечек памяти.

...