Titanium性能优化:延迟加载DatePicker提高界面打开速度
程序员文章站
2022-05-25 08:21:49
...
其实不算是性能优化了,顶多算矛盾转移:我在开发中发现,Titanium的DatePicker和TimePicker,初始化比较费时间。如果刚好在创建windows时初始化这两个Picker,window打开的速度会被严重拖累,造成难以忍受的性能问题。
比如下面的代码,相信各位看官不会陌生:
我刚开始一厢情愿的是:不管多慢,只要RankWindow初始化了:
那我
实际情况是:rankWnd.open()时,严重卡顿。我一个界面,20个控件,其中有4个picker,打开时间竟然高达1.5秒!
经过观察发现,似乎rankWnd.open的时候,才会去真正地调用createPicker!原因不清楚,只知道严重违反了“想当然”。发了这个帖子在官方论坛http://developer.appcelerator.com/question/151937/window-not-initialized-until-it-is-open,希望知道的同学告诉我!
解决办法呢,就是把createPicker这样的操作,延迟到事件处理函数里面来执行。这样以来虽然打开picker时还有一点卡顿,但是总比4个picker叠加在一起,导致主窗口需要1.5秒钟打开要强多了!
比如下面的代码,相信各位看官不会陌生:
function RankWindow() { var mainWnd = Ti.UI.createWindow(...); ... var datePicker = Titanium.UI.createPicker(...); mainWnd.add(datePicker); ... return mainWnd; } ... module.exports = RankWindow;
我刚开始一厢情愿的是:不管多慢,只要RankWindow初始化了:
var RankWindow = require('/RankWindow'); var rankWnd = new RankWindow();
那我
rankWnd.open();,就会瞬间打开。
实际情况是:rankWnd.open()时,严重卡顿。我一个界面,20个控件,其中有4个picker,打开时间竟然高达1.5秒!
经过观察发现,似乎rankWnd.open的时候,才会去真正地调用createPicker!原因不清楚,只知道严重违反了“想当然”。发了这个帖子在官方论坛http://developer.appcelerator.com/question/151937/window-not-initialized-until-it-is-open,希望知道的同学告诉我!
解决办法呢,就是把createPicker这样的操作,延迟到事件处理函数里面来执行。这样以来虽然打开picker时还有一点卡顿,但是总比4个picker叠加在一起,导致主窗口需要1.5秒钟打开要强多了!