gpt4 book ai didi

javascript - Cordova 在长时间的 Javascript 期间卡住 UI

转载 作者:行者123 更新时间:2023-11-30 21:03:37 25 4
gpt4 key购买 nike

我无法创建一个工作示例,但代码很简单。


配置

IDE:Visual Studio 2017

目标平台:Windows x64

系统: Win 10

我的项目: Javascript//Blank App (Apache Cordova)//ver. 6.3.1


HTML//index.html

<!DOCTYPE html>
<html>
<head>
</head>
<body>
<header></header>
<main>
<div id="cal">

</div>
</main>
<footer>
<!-- ## this creates a simple pure css loader ## -->
<div class="progress">
<div class="indeterminate"></div>
</div>
<a href="#" class=".addItem">Add</a>
</footer>

<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript" src="scripts/platformOverrides.js"></script>

<script src="frameworks/jquery-3.2.1.min.js"></script>
<script src="frameworks/materialize/js/materialize.min.js"></script>

<script type="text/javascript" src="scripts/index.js"></script>

</body>
</html>

Javascript//index.js

(function () {
"use strict";


document.addEventListener( 'deviceready', onDeviceReady.bind( this ), false );

function onDeviceReady() {

$(document).ready(function () {
$('.addItem').on('click', function () {
setTimeout(function () {
loadCalendar();
}, 5000);
});

});

};


function loadCalendar() {
var i=0;
while (i <= 10000) {
var html = '<div class="row"></div>';
$('#cal').append(html);
i++;
}
}


} )();

应用程序启动并且 UI 按预期工作,progress 加载器显示他的 css 动画。单击按钮 addItem 后,所有工作持续 5 秒,然后 UI 卡住,直到 while 循环 结束。我觉得不正常,怎么解决?

谢谢

编辑

一个重要的澄清

我不希望 DOM 在循环过程中被更新,上面这段代码不是真正的代码,它只是用于理解和测试。真正的循环要短得多、快得多,但它仍然是一个问题。

发生的事情是整个界面卡住,整个应用程序。 CSS动画应该完全独立于Javascript,但是卡住了!

Here an example of what I expected

我希望这能更好地阐明这一点。

最佳答案

如评论中所述,所有循环声明都是阻塞程序,并且在循环完成之前 - 即使是最微不足道的悬停效果也将无法响应。

JavaScript 是线性的、同步的和单线程的进程。要避免卡住情况,您需要将循环操作移至单独的线程。

例如:在另一个文档的单独实例上!

关于javascript - Cordova 在长时间的 Javascript 期间卡住 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46865180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com