【发布时间】:2018-03-29 00:01:51
【问题描述】:
我快疯了,想让一个微调器出现。因此,我已将繁重的处理功能绑定到一个按钮:
$(document).delegate("#clearread", "tap", onClearRead);
所以在点击时它会这样称呼:
var onClearRead = function() {
setTimeout($.mobile.showPageLoadingMsg, 5);
// Civilised cleaning of saved status
var jStorIndex = $.jStorage.index();
for (var i = 0; i < jStorIndex.length; i++) {
if( jStorIndex[i] != "version" ) {
$.jStorage.deleteKey(jStorIndex[i]);
}
}
// Load articles afresh
loadArticles();
$.mobile.changePage("#choosearticle");
} //onClearRead
我发现在文章的清除/加载过程中(大约 10 秒),微调器没有出现,而只是在加载 #choosearticle 页面时的短暂时间(0.5 秒)。 我做错了什么?
我让微调器在应用程序的其他地方工作。
谢谢
【问题讨论】:
-
@Nirmal Patel 刚刚解决了我的问题,但有人知道为什么需要一个疯狂的随机设置超时吗?我读过它是关于 CPU 争用的,有人可以更详细地解释一下吗?
-
问题是JS在浏览器的单线程中运行。因此,如果您进行繁重的处理;在 JS 完成之前,浏览器不会尝试重绘/重绘内容。到 JS 完成的时候;我们已经调用了一个 changePage()... setTimeout 只是让浏览器有足够的喘息时间来完成其他任务,然后再回到 JS 中的繁重工作。
-
最后,澄清一下 - 谢谢!
标签: javascript jquery jquery-mobile