2012-02-27 25 views
5

Tôi đang bắt đầu một ứng dụng Titanium mới và muốn sử dụng các phương pháp hay nhất và tránh bị rò rỉ bộ nhớ từ khi di chuyển. Tôi mới sử dụng CommonJS cũng như nền tảng Titanium nói chung.Vui lòng giới thiệu cấu trúc dự án bằng titan sử dụng CommonJS

Thật không may có vẻ như tất cả các ứng dụng mẫu cho vòm titan trên Ti.include("/lib/module") thay vì newer recommended best practice của require("/lib/module").

Điều tôi lo lắng là mức tiêu thụ bộ nhớ của việc sử dụng CommonJS có thể yêu cầu. Từ CommonJS Modules in Titanium documentation nó nói rằng các mô-đun sẽ được lưu trữ, điều này có nghĩa là nếu tôi truy cập một mô-đun mà tất cả các chức năng đó đột nhiên ở lại trong bộ nhớ ngay cả khi chúng nằm ngoài phạm vi?

Tôi đã bắt đầu một ứng dụng mới với cấu trúc sau

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

Từ đây ứng dụng chính của tôi có một cái nhìn phong cách bảng điều khiển duy nhất mà được cấu trúc lỏng lẻo như sau:

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

Bất kỳ hướng dẫn về một cấu trúc dự án đúng được đánh giá cao.

Trả lời

2

This là ứng dụng cộng đồng được xây dựng mà hoàn toàn sử dụng kiểu mô-đun, cũng xem xét thông qua blog nhà phát triển để tìm Rèn loạt mà có mẫu phát triển chủ yếu là sử dụng mô-đun mô hình

+0

Điều đó hoàn hảo, cấu trúc dự án chính xác là những gì tôi đã làm sau. –

0

Tôi sử dụng yêu cầu() và tôi có một khởi đầu dài yêu cầu() ở đầu dự án - có thể là một trong những dự án Titan lớn nhất.

Và tôi có thể tự tin khi nói rằng không có chi phí có thể nhìn thấy trong việc đặt các hàng chữ của các dòng mã trong các câu lệnh bắt buộc này. Tuy nhiên, bạn constently phải xem xét rằng mã của bạn có no memory leaks.

0

AFAIK bộ nhớ được sử dụng bởi mô-đun CommonJS được giải phóng bất cứ khi nào cửa sổ được đóng đúng cách. Trừ khi bạn gán module cho một đối tượng toàn cầu, trong trường hợp đó nó sẽ không bị rò rỉ.

Cá nhân, tôi tạo một nhà máy có thể tái sử dụng. Trên thực tế, nó phụ thuộc vào mức độ phức tạp của ứng dụng, nếu nó chỉ là một vài cửa sổ trong NavGroup, tôi chỉ viết nó thẳng lên.

Và đừng quên để hồ sơ ứng dụng của bạn bằng các công cụ Xcode để đảm bảo ứng dụng của bạn không bị rò rỉ và nếu có, nó sẽ giúp tìm rò rỉ. Xem này video for demo (khoảng 1/3 cách trong).

+0

Theo tài liệu, tất cả các mô-đun CommonJS được lưu trữ. Tôi đã thử nghiệm lý thuyết này bằng cách tạo ra một mô-đun đầy đủ của tiểu bang và được nhắc đến trong một cửa sổ, đóng lại, xử lý và mở lại, trạng thái được giữ lại. Điều này cũng được giải thích trên trang commonJS appcelerator rằng các mô-đun có trạng thái đầy đủ. https://wiki.appcelerator.org/display/guides/CommonJS+Modules+in+Titanium#CommonJSModulesinTitanium-Caching –