2012-02-27 14 views
5

का उपयोग करके टाइटेनियम प्रोजेक्ट स्ट्रक्चर की अनुशंसा करें। मैं एक नया टाइटेनियम ऐप शुरू कर रहा हूं और सर्वोत्तम प्रथाओं का उपयोग करना चाहता हूं और जाने से मेमोरी लीक से बचना चाहता हूं। मैं सामान्य रूप से कॉमनजेएस के साथ-साथ टाइटेनियम प्लेटफार्म में नया हूं।कृपया कॉमनजेएस

दुर्भाग्य से ऐसा लगता है कि require("/lib/module") के बजाय टाइटेनियम के लिए सभी नमूना अनुप्रयोग Ti.include("/lib/module") पर घूमते हैं।

मुझे चिंता है कि कॉमनजेएस का उपयोग करने की स्मृति खपत की आवश्यकता हो सकती है। 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

मैं प्रोजेक्ट की शुरुआत में आवश्यकता() की आवश्यकता है() और मेरे पास परियोजना की शुरुआत में एक लंबी शुरुआत है (जो कि सबसे बड़ी टाइटेनियम परियोजना में से एक हो सकती है।

और मुझे यह कहकर विश्वास हो सकता है कि इन आवश्यक बयानों में कोड की लाइनों को रखने में कोई दृश्य लागत नहीं है। हालांकि, अगर आप constently अपने कोड है कि no memory leaks.

0
का उपयोग कर खोजने के लिए विकास के तहत समुदाय अनुप्रयोग है की जांच करना चाहिए

AFAIK जब भी विंडो ठीक से बंद हो जाती है तो सामान्य जेएस मॉड्यूल द्वारा उपयोग की जाने वाली स्मृति जारी की जाती है। जब तक आप किसी वैश्विक ऑब्जेक्ट को मॉड्यूल असाइन नहीं करते हैं, उस स्थिति में यह रिसाव नहीं होगा।

व्यक्तिगत रूप से, मैं एक पुन: प्रयोज्य कारखाना बना देता हूं। असल में, यह इस बात पर निर्भर करता है कि ऐप कितना जटिल है, अगर यह NavGroup के भीतर केवल कुछ खिड़कियां है, तो मैं इसे सीधे लिखता हूं।

और अपने ऐप को एक्सकोड उपकरणों के साथ प्रोफाइल करना न भूलें ताकि यह सुनिश्चित किया जा सके कि आपका ऐप लीक नहीं हो रहा है और यदि ऐसा होता है, तो यह रिसाव खोजने में मदद करेगा। यह video for demo देखें (लगभग 1/3 रास्ता)।

+0

दस्तावेज़ों के मुताबिक सभी कॉमनजेएस मॉड्यूल कैश किए जाते हैं। मैंने एक राज्य पूर्ण मॉड्यूल बनाकर इस सिद्धांत का परीक्षण किया और एक खिड़की, बंद, निपटान और फिर से खोला गया, राज्य को बरकरार रखा गया। यह एपसेलरेटर आमजेएस पेज पर भी समझाया गया है कि मॉड्यूल राज्य पूर्ण हैं। https://wiki.appcelerator.org/display/guides/CommonJS+Modules+in+Titanium#CommonJSModulesinTitanium-Caching –

संबंधित मुद्दे