У меня была похожая проблема: мне приходилось ждать существования контроля и проверять интервалы Поскольку в JavaScript нет реального сна, ожидания или паузы, а использование await / async не поддерживается должным образом в Internet Explorer, я принял решение, используя setTimeOut и ввод функции в случае успешного поиска элемента. Вот полный пример кода, так что каждый может воспроизвести и использовать его для своего собственного проекта:
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript">
var ElementSearchStatus = {
None: 0,
Found: 1,
NotFound: 2,
Timeout: 3
};
var maxTimeout = 5;
var timeoutMiliseconds = 1000;
function waitForElement(elementId, count, timeout, onSuccessFunction) {
++count;
var elementSearchStatus = existsElement(elementId, count, timeout);
if (elementSearchStatus == ElementSearchStatus.None) {
window.setTimeout(waitForElement, timeoutMiliseconds, elementId, count, timeout, onSuccessFunction);
}
else {
if (elementSearchStatus == ElementSearchStatus.Found) {
onSuccessFunction();
}
}
}
function existsElement(elementId, count, timeout) {
var foundElements = $("#" + elementId);
if (foundElements.length > 0 || count > timeout) {
if (foundElements.length > 0) {
console.log(elementId + " found");
return ElementSearchStatus.Found;
}
else {
console.log("Search for " + elementId + " timed out after " + count + " tries.");
return ElementSearchStatus.Timeout;
}
}
else {
console.log("waiting for " + elementId + " after " + count + " of " + timeout);
return ElementSearchStatus.None;
}
}
function main() {
waitForElement("StartButton", 0, maxTimeout, function () {
console.log("found StartButton!");
DoOtherStuff("StartButton2")
});
}
function DoOtherStuff(elementId) {
waitForElement(elementId, 0, maxTimeout, function () {
console.log("found " + elementId);
DoOtherStuff("StartButton3");
});
}
</script>
</head>
<body>
<button type="button" id="StartButton" onclick="main();">Start Test</button>
<button type="button" id="StartButton2" onclick="alert('Hey ya Start Button 2');">Show alert</button>
</body>
</html>
I'm sure I could come up other ideas if you need them.
Одной из основных проблем Dalvik является производительность, о которой я слышал ужасно, но мне больше всего хотелось бы добавить больше языков.
У JVM есть сообщество проекты, запускающие Python и Ruby на платформе, и даже специальные языки, такие как Scala, Groovy и Closure, разработанные для этого. Было бы неплохо увидеть их (и / или другие) на платформе Dalvik. Sun также работает над машиной Да Винчи, расширением JVM для динамической типизации, что свидетельствует о значительном отходе от философии «один язык для всех», которой Sun придерживается в течение последних 15 лет.
JIT. То, что это не помогает, - это полная чушь. Вы можете более избирательно подходить к тому, какой код вы используете JIT, но при 1/10 производительности собственного кода всегда будет ограничивать
Достойный сборщик мусора. У современных сборщиков мусора нет большого заикания.
Улучшенный анализ кода. Есть много случаев, когда не нужно производить выделение / освобождение, удерживать блокировки и так далее. Это позволяет вам писать чистый код, а не выполнять оптимизацию, с которой машина лучше.
Теоретически большинство языков более высокого уровня (Java, Javascript, python, ...) должны быть в пределах 20% от производительности собственного кода для большинства случаи. Но это требует, чтобы поставщик платформы потратил на разработку более 100 человеко-лет. Sun Java становится лучше. Они тоже работали над этим 10 лет.