titanium编程最佳实践
appcelerator认可的移动开发标准是在titanium开发跨平台指定单上下文,模块化,好的结构化代码,好的有组织的资源管理。通过遵循这些标准,开发人员将创建应用程序,满足前面的清单的稳定、快速、高效、可读的。
javacript和一般建议
避免全局作用域
把对象放到全局作用域有出现各种各样的问题!
- 对象放在全局作用域将不能自动执行垃圾回收,你必须自己手动把全局对象设为null,标记他们准备回收。
- 它很容易就会覆盖一个对象在全局作用域内,因为该变量是在程序里到到处可以访问。
- 在app.js里的全局对象在其他上下文或者在CommonJS模块里是不容易访问得到的。你不能只是转储变量,所以你可以在你的应用程序访问它们。
避免在全局作用域里定义变量。如果非要在全局作用域里定义变量,可在以下情况考虑:
- 你声明一个变量在CommonJS之外的函数或模块。使用模块化模式将缓解这个问题。
- 省略了var关键字在声明变量(内部或外部的一个函数)。所以总是使用var当声明变量。
避免声明局部对象在全局作用域里的事件监听器
下面的代码将会导致内存泄漏,因为局部作用域的变量中引用一个全局事件侦听器。这是因为该程序将需要保留本地范围var为了全球事件监听器来使用它们。全球事件监听器也会一直持续,直到应用程序退出或侦听器是显式地删除。
var someFunction = function() { var table = Ti.UI.createTableView(), label = Ti.UI.createLabel(), view = Ti.UI.createView(); Ti.App.addEventListener('bad:move', function(e) { table.setData(e.data); }); view.add(table); view.add(label); return view; };
全局事件监听器包括那些与Ti.App、Ti.Geolocation、Ti.Gesture等等。同样的问题是可能的和非全局事件监听器,就像那些你联想到一个UI元素。如果UI元素仍然是有效的在内存中,任何事件监听器——和对象引用,也必须保存在内存中。
上面的例子是一个反模式,最终消费应用程序的可用内存。重要的是要注意,这是一个常见的反模式,开发人员使用基于浏览器的环境ti,它会导致同样的结果,所以这不是独特的ti。
如果你需要一个定制事件,考虑一个方法/回调,你可以稍后调用。对全球事件(如位置、网络变化等等,这是强烈建议将它们放在app js。这个一般的经验法则是全球事件处理全局对象。
延迟脚本加载
瓶颈之一的ti应用程序是JavaScript评价。这是特别为Android的案例,尽管V8的运行时提供了大量的改进,这个问题与犀牛。出于这个原因,来加快应用程序的启动和响应能力,你应该避免加载脚本,直到他们是绝对需要的。如以下应用程序,其中包含有三个窗口是打开纷纷在点击(触摸)事件中,注意,依赖JavaScript为每个窗口是不会加载到绝对必要。