确保 Ionic Angular UI 在启动处理器密集型任务之前已重绘
Ensure Ionic Angular UI has redrawn before kicking off processor intensive task
我在离子框架中有一个角度应用程序,它有一个加密的数据库。打开数据库的步骤是一项密集型任务。(在典型设备上长达 6000 毫秒)。
我在页面上有一个Login
按钮,它在控制器中设置了一个标志"Data.Loading = true"。
在页面上的ng模板中有一个块
<div ng-show="Data.Loading">Please Wait</div>
"登录"的代码如下:
$scope.Login = function() {
if ($scope.IsCorrect($scope.Data.Password)) {
$scope.Data.Loading = true;
$scope.OpenAndContinue();
}
}
$scope.OpenAndContinue = function(){
MyDatabase.open().then(function() {
$scope.Data.Loading = false;
$rootScope.Display.Menu = true;
$ionicHistory.nextViewOptions({
disableAnimate: true,
disableBack: true,
historyRoot: true
});
$state.go("app.home")
})
}
上述问题在于 UI 的响应速度不是特别快。在此页面上。 事实上,它非常慢 - 特别是与应用程序中的许多其他按钮相比。
视图需要一两秒钟才能更新并说"请稍候",然后再过几秒钟才能实际完成打开数据库。
如果我接受打开加密数据库的核心功能足够复杂,以至于无法快速打开,我至少希望视图能够立即响应用户的点击,以便让他们知道那东西没有坏。
我已经尝试了许多不同的已发布的角度修复。
$scope.Login = function() {
if ($scope.IsCorrect($scope.Data.Password)) {
$scope.Data.Loading = true;
$timeout($scope.OpenAndContinue);
//$timeout($scope.OpenAndContinue, 0, false);
//$timeout($scope.OpenAndContinue, 250, false);
}
}
$scope.Login = function() {
if ($scope.IsCorrect($scope.Data.Password)) {
$scope.Data.Loading = true;
$scope.$evalAsync($scope.OpenAndContinue);
}
}
$scope.Login = function() {
if ($scope.IsCorrect($scope.Data.Password)) {
$scope.Data.Loading = true;
$ionicModal.fromTemplateUrl("templates/modals/login.html", {
scope: $scope,
animation: 'scale-in',
backdropClickToClose: false,
hardwareBackButtonClose: false
})
.then($scope.OpenAndContinue);
}
}
到目前为止,我尝试过的任何方法都没有提供我期望从按钮点击中获得的"响应能力"。也不是我在APP其他地方看到的活泼。
我还能做些什么来确保登录感觉"活泼"吗?
即使是模态也没有那种"啪啪"的感觉。
可悲的是 - 根据我提供的信息,答案似乎无法获得。
该函数$scope.IsCorrect
包含对另一个函数的调用$rootScope.$broadcast('myapp.login')
APP中的其他地方有一个事件侦听器,它打开了数据库本身(因此在这几毫秒内处理器使用率翻了一番,并在上面代码中处理的$apply()更新之前运行。
我最终通过在打开数据库的代码中添加console.trace()
命令来找到对"opendatabase"的额外调用。这使我能够在该时间点看到完整的堆栈跟踪,并确定导致性能问题的其他原因。
StackOverflow会惩罚用户删除问题,所以我决定不终止这个问答 - 希望有人能从中找到有用的东西。
- 当使用Watchify时,Browserify+Babelify Gulp任务没有终止
- gulp Iconify任务抛出错误TypeError:Path必须是字符串.收到false
- 如果助手不在,如何从Grunt中的代码中调用任务
- WinJS(WP8.1):从后台任务更新辅助磁贴
- 如何使用gump任务将html转换为javascript字符串
- 在等待异步任务时永久循环
- 如何在dhtmlxgantt中保存任务
- 如何为requirejs和qunit设置grunt任务
- 如何使gullow任务跨平台.尤其是吞咽贝壳
- 不使用Grunt.initConfig()注册Grunt任务
- Grunt任务没有加载,获得无限循环
- 用咕哝的任务改变恒定的角度内容
- Gulp Git首先运行提交任务,然后运行推送任务
- 如何在jshint任务运行且一切正常时记录消息
- 确保 Ionic Angular UI 在启动处理器密集型任务之前已重绘
- NextTick() 不起作用 [将 CPU 密集型任务与其他事件交错]
- 对于node.js来说,这是后端任务的cpu密集型吗
- 如何在Node.js中处理密集型任务
- node.js中的异步编程是否会加快cpu密集型任务的速度?
- 什么是CPU密集型任务(例如:排序、搜索等等)