2011-08-25 10 views
18

Qualcuno può spiegare cos'è esattamente Eteration e mostrare un esempio?Eteration - spiegazione ed esempio

fonte: Long running tasks YUI blog da Douglas Crockford

+0

Ho modificato la mia risposta con altre informazioni rilevanti, spiegando esattamente cosa è ** l'eterazione ** e come viene utilizzato nel contesto di Javascript. – luvieere

+0

Ho aggiunto un esempio di codice, con spiegazione associata. – luvieere

risposta

32

Inizialmente, ho pensato che fosse solo un errore di battitura di iterazione, come la ricerca on-line per eteration non produce risultati significativi.

Ma, quindi, mi sono imbattuto in references che afferma che il termine è coniato da Crockford stesso, in uno dei suoi discorsi.
online, l'unico posto dove avrei potuto trovare una spiegazione è sulla sua pagina, in The Factorial Tutorial, un articolo in cui, in Act 2, come commento ad un esempio di codice, afferma:

Act 2 bis : messaggio iterazione (eteration)

Questo sembra essere parte di una coppia corrispondenti di termini, come il suo prossimo esempio di codice, che esegue ricorsione senza utilizzare una pila, contiene l'altro membro della coppia:

Act 2b: messaggio di ricorsione (ecursion)

Così, sembra che eteration e ecursion sono termini inventato e definito da Crockford se stesso per fare riferimento al messaggio di iterazione e la ricorsione nel contesto del E Programming Language, progettato su Java per gli sviluppatori che scrivono applicazioni distribuite.

Il fatto che la lingua è chiamato E è forse un motivo per dare ai suoi iterazione e ricorsione specifici sapori terminologia scelta (** e *** teration * e ** e *** Cursion *).

Se il contesto di Javascript, Crockford spiega il termine eteration come parte del discorso Crockford on JavaScript -- Scene 6: Loopage, a partire dal minuto 30:40 :

Eteration significa rompere un compito in più turni in modo che su ciascuna emissione , invece di passare attraverso un ciclo convenzionale, nella parte inferiore dello del ciclo chiamiamo setTimeOut, passandogli una funzione che fa sì che ci faccia la prossima modifica. Ciò significa che le virate saranno brevi - il turno è lungo quanto un'eternazione - e possiamo fare come molte estensioni come vogliamo e non bloccare il ciclo degli eventi.

Il risultato è che, invece di un ciclo ridotto, bloccando l'interfaccia se richiede troppo tempo, i eteration pianificazioni ogni fase del ciclo, in una catena che blocca solo l'interfaccia mentre viene eseguita l'effettivo passo , non tra i passaggi. Ciò consente di eseguire attività a esecuzione prolungata nello stesso thread dell'interfaccia (Javascript è a thread singolo), pur mantenendo la reattività dell'applicazione.

Controllare la conversazione completa con una qualità migliore e accompagnata da una trascrizione full-text here.

Inoltre, per un riferimento su come una tale tecnica potrebbe essere attuata, si consideri il seguente scenario:

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

Ci sono due div s, uno che visualizza gli indici del eteration in corso, l'altro aggiungendo il testo L'interfaccia è ancora reattiva! su ogni tasto Try Me premere il pulsante. Come si può vedere dal codice, i passaggi di conversione sono programmati per un intervallo di tempo compreso tra setTimeout e consentono l'interazione dell'utente e vengono elaborati. Pertanto, i passaggi di eterazione continueranno a essere eseguiti mentre l'utente fa clic sul pulsante e attiva l'aggiornamento del secondo div, mantenendo la reattività della pagina mentre fa progressi reali con il lavoro che deve eseguire (in questo caso, semplicemente visualizzando gli indici).

+0

Forse, ma il termine è usato nel conext di JavaScript e Nodejs. No E o Java. – Bakudan

Problemi correlati