Więc zastanawiałem się, co jest lepszym sposobem (pod względem wzrostu stosu i wydajności), aby rekursywnie wywoływać funkcję w regularnych odstępach czasu? Na przykład powiedzmy, że chcę czytać zawartość pliku co 200 ms. Mam następujące dwie metody i zastanawiałem się, czy są one inne?Funkcja wywoływania rekursywnie w regularnych odstępach czasu
Metoda 1: Korzystanie zwykły ole setTimeout bez process.nextTick
var fs = require('fs');
(function loop() {
// Print to time to indicate something is happening
console.log(new Date().toString());
// Read a 51MB file
fs.readFile('./testfile', function (err, data) {
if (err) console.log(err);
});
// Call the same function again
setTimeout(function() {
loop();
}, 200);
})();
Metoda 2: Wywoływanie process.nextTick wewnątrz setTimeout
var fs = require('fs');
(function loop() {
// Print to time to indicate something is happening
console.log(new Date().toString());
// Read a 51MB file
fs.readFile('./testfile', function (err, data) {
if (err) console.log(err);
});
// Call the same function again
setTimeout(function() {
process.nextTick(function() {
loop();
});
}, 200);
})();
Co chcę wiedzieć jest to, że dodanie process.nextTick wewnątrz setTimeout pomaga, czy nie? Czy wywołanie funkcji w procesie process.nextTick zmniejszy użycie stosu, czy nie?
Nie odpowiem, ale powinno się umieścić 'setTimeout' w wywołaniu zwrotnym twojego "readFile". –
Nie widzę tu żadnych wywołań rekursywnych. Wywołanie pętli jest wywoływane, gdy następuje zdarzenie timeout, a nie z funkcji. Nie można jej wywołać, dopóki loop() nie zwróci – jcoder