Ответ 1
Вначале я думал, что это просто опечатка итерации, так как поиск в Интернете для eteration не дает значимых результатов.
Но тогда я наткнулся на ссылки, в которых говорится, что этот термин был придуман самим Крокфордом в одном из его разговоров.
Онлайн, единственное место, где я мог найти объяснение, находится на его странице, в The Factorial Tutorial, статья, где в Act 2, как комментарий к образцу кода, он утверждает:
Действие 2a: итерация сообщения (eteration)
Это, по-видимому, является частью связанной пары терминов, так как его следующий пример кода, который выполняет рекурсию без использования стека, содержит другой член пары:
Действие 2b: рекурсия сообщения (ecursion)
Итак, кажется, что eteration и ecursion - это термины, изобретенные и определенные самим Крокфордом для ссылки на итерацию и рекурсию сообщений в контексте E Язык программирования, разработанный поверх Java для разработчиков, которые пишут распределенные приложения.
Тот факт, что язык называется E, возможно, является причиной того, что его конкретная итерация и рекурсия отражают выбранную терминологию (** e *** teration * и ** e *** cursion *).
Если контекст Javascript, Крокфорд объясняет термин eteration как часть разговора Крокфорд на JavaScript - Сцена 6: Loopage, начиная с минуты 30:40:
Итерация означает разбить задачу на несколько оборотов, чтобы на каждом eteration, вместо того, чтобы проходить через обычный цикл, внизу цикла мы называем
setTimeOut
, передавая ему функцию, которая вызывает мы сделаем следующую процедуру. Это означает, что повороты будут короткий - поворот только до тех пор, пока одна из них - и мы можем сделать так: так как мы хотим, а не блокировать цикл событий.
В результате, вместо жесткого цикла, блокирующего интерфейс, если он занимает слишком много времени, eteration планирует каждый шаг цикла в цепочке, которая блокирует только интерфейс, а фактический шаг выполняется, а не между шагами. Это позволяет выполнять длительные задачи в том же потоке, что и интерфейс (Javascript является однопоточным), сохраняя при этом отзывчивость приложений.
Посмотрите полный разговор в гораздо лучшем качестве и в сопровождении полнотекстового расшифровки здесь.
Кроме того, для справки о том, как такой метод может быть реализован, рассмотрите следующий сценарий:
<html>
<head>
<script type="text/javascript">
function testFeedback()
{
var feedbackDiv = document.getElementById("feedbackDiv");
feedbackDiv.innerHTML += "The Interface is Still Responsive!</br>";
}
var currentNumber = 0;
var loopStepDelay = 30;
function performLoopStep()
{
var numbersDiv = document.getElementById("numbersDiv");
numbersDiv.innerHTML = currentNumber++;
setTimeout("performLoopStep()", loopStepDelay);
}
setTimeout("performLoopStep()", loopStepDelay);
</script>
</head>
<body>
<div id="numbersDiv"></div>
</br>
</br>
<div id="feedbackDiv"></div>
</br>
</br>
<button onClick="testFeedback()">Try Me</button>
<body>
</html>
Есть два div
s, один из которых отображает индексы текущей этерации, а другой добавляет текст. Интерфейс все еще реагирует! на каждой кнопке Try Me нажмите. Как видно из кода, этапы этапов запланированы на setTimeOut
с некоторым интервалом времени, что позволяет взаимодействовать с пользователем и обрабатываться. Таким образом, этапы этапов будут продолжать выполняться по мере того, как пользователь нажимает на кнопку и запускает обновление второго div, сохраняя отзывчивость страницы, делая реальный прогресс с работой, которую он должен выполнить (в данном случае просто отображая индексы).