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为每个窗口是不会加载到绝对必要。

 

posted @ 2012-10-06 13:10  校长阿四  阅读(729)  评论(4编辑  收藏  举报