Ciao, non conosco e non ho mai usato Hyphenator.js ma da quello che vedo ci sono un bel po' di cose nel tuo codice che stonano a livello concettuale:
- è chiaro che per aggiornare il processo devi fare Hyphenator.run();
- non è chiaro perché tu lo stia facendo dentro un setInterval "incontrollato" che viene eseguito ogni secondo, che già di per sé rallenta l'esecuzione dello script a prescindere dall'uso di hyphecoso
- per "incontrollato" intendo appunto che sarebbe meglio evitare di attivare un setInterval ma, cosa più grave, lo stai facendo in modo anonimo e "ricorsivo" (o più precisamente, ogni volta che effettui lo scroll), senza mai cancellare l'istanza creata[*], così che si vanno ad attivare, man mano che esegui lo scroll, miriadi di istanze intervallo eseguite ogni secondo contemporaneamente, innescando una eccessiva esecuzione di script ridondante.
Questo è il problema principale per cui ti salta fuori quell'avvertenza.
[*]generalmente il setInterval o setTimeout lo si istanzia con una variabile che viene usata poi per eseguire un clearInterval() prima di attivarne altri
- chiaramente si può aggiustare la gestione degli intervalli, ma sarebbe sicuramente meglio se non ne venisse usato alcuno.Siccome il mio libro è suddiviso in blocchi che si caricano in append o prepend ogni volta che scrollo
Ho visto che hai messo una condizione per verificare che sia stato effettuato realmente uno scroll e impedire l'esecuzione dello script dentro l'intervallo, ma a questo punto non avrebbe comunque senso usare un intervallo. Sarebbe forse più appropriato un setTimeout che viene eseguito una sola volta, ma anche in questo caso penso che la soluzione più ottimale sia piuttosto quella di far eseguire Hyphenator.run() solo quando è realmente necessario, cioè quando vengono appesi i blocchi sulla pagina, non allo scroll.
- nel tuo codice non vedo la parte in cui i blocchi vengono appesi (presumo tu l'abbia omessa) ma bisognerebbe capire se in qualche modo puoi intercettare l'evento/la funzione in cui appunto sono appesi dinamicamente i blocchi nella pagina e a quel punto inserire lì il tuo run().
- Se non fosse possibile, potresti comunque far eseguire il run() direttamente nell'evento scroll, magari mettendo una condizione che identifichi in qualche modo la reale presenza di nuovi blocchi.
In conclusione non vedo alcuna palese necessità nell'usare un setInterval (o setTimeout che sia) in quel modo o in qualunque altro modo.
Cerca intanto di capire se puoi intercettare l'evento in cui vengono appesi i nuovi blocchi. Posso supporre si tratti di una qualche chiamata AJAX e quindi un qualche evento success, ma questa parte non l'hai specificata; prova a chiarire.
EDIT: ho visto meglio il codice e ho notato ora le funzioni allBlocks.loadPrevius(); e allBlocks.loadPrevius();
Presumo siano quelle per cui vengono appesi i blocchi; bisogna però vedere cosa ci sta dietro quelle funzioni (forse delle chiamate AJAX) e quindi capire se ci sia modo di intercettare l'evento esatto in cui i contenuti vengono appesi, così da mettere lì il run() in questione.