2011-08-25 10 views
18

Czy ktoś może wyjaśnić, czym dokładnie jest Eteracja i pokazać przykład?Eteracja - wyjaśnienie i przykład

źródło: Long running tasks YUI blog Douglas Crockforda

+0

Edytowałem swoją odpowiedź z bardziej istotnymi informacjami, wyjaśniającymi dokładnie, czym ** jest ** i jak jest używana w kontekście Javascript. – luvieere

+0

Dodałem próbkę kodu z powiązanym wyjaśnieniem. – luvieere

Odpowiedz

32

Początkowo myślałem, że to tylko literówka od iteracji, jak szukają w internecie eteration daje żadnych znaczących wyników.

Ale wtedy natknąłem się na references, który stwierdza, że ​​termin został ukuty przez samego Crockforda, w jednym z jego przemówień.
online, to jedyne miejsce, gdzie mogę znaleźć wyjaśnienie jest po jego stronie, w The Factorial Tutorial, artykuł, gdzie w ustawy 2, jako komentarz do próbki kodu, stwierdza:

ustawa 2a : komunikat iteracja (eteration)

To wydaje się być częścią pokrewnej pary pojęć, jak jego kolejnej próbki kodu, który wykonuje rekursji bez użycia stos zawiera drugi element pary:

ustawa 2b: wiadomość rekurencji (ecursion)

Więc wydaje się, że eteration i ecursion są terminy wymyślone i określona przez samego Crockforda odnieść się do komunikatów iteracji i rekursji w kontekście E Programming Language, zaprojektowane na bazie Javy dla programistów, którzy piszą aplikacje rozproszone.

Fakt, że język nazywa się E jest prawdopodobnie powodem, aby nadać mu specyficzny charakter iteracyjno-rekurencyjny w wybranej terminologii (** e *** teration * i ** e *** cursion *).

Jeśli kontekst JavaScript, Crockforda wyjaśnia termin eteration jako część rozmowy Crockford on JavaScript -- Scene 6: Loopage, począwszy od chwili 30:40:

Eteration oznacza przerwać zadanie na kilka obrotów, tak aby na każdej metodzie, zamiast przechodzić przez konwencjonalną pętlę, na dole pętli, którą nazywamy setTimeOut, przekazujemy mu funkcję, która powoduje, że wykonujemy kolejną degenerację. Oznacza to, że zwoje będą krótkie - skręt jest tylko tak długi, jak jedna degeneracja - i możemy robić tak wiele, jak chcemy, i nie blokować pętli zdarzeń.

Rezultatem jest to, że zamiast szczelnego pętli blokowania interfejsu jeśli trwa zbyt długo, eteration harmonogramów każdy etap pętli w łańcuchu, który blokuje tylko interfejsu Rzeczywisty sporządzi kroku nie między krokami. Umożliwia to wykonywanie długotrwałych zadań w tym samym wątku co interfejs (Javascript jest jednowątkowy), przy jednoczesnym zachowaniu czasu reakcji aplikacji.

Zapoznaj się z pełną rozmową o znacznie lepszej jakości i z dołączonym transkrypcją pełnotekstową here.

Ponadto, dla odniesienia, jak taka technika może być realizowany, należy rozważyć następujący scenariusz:

<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> 

Istnieją dwa div s, jeden wyświetlania wskaźników trwającego eteration, drugi dopisywania tekstu Interfejs nadal reaguje! na każdym przycisku myszy Wypróbuj mnie. Jak widać z kodu, kroki przetwarzania są zaplanowane przez pewien przedział czasu, co pozwala na interakcję użytkownika i przetwarzanie. W związku z tym kroki metalizacji będą nadal działać, gdy użytkownik kliknie przycisk i uruchomi aktualizację drugiego elementu div, zachowując szybkość odpowiedzi strony, wykonując rzeczywisty postęp z pracą, którą musi wykonać (w tym przypadku po prostu wyświetlając indeksy).

+0

Być może, ale termin ten jest używany w kontekście JavaScript i Nodejs. Brak E lub Java. – Bakudan