Próbuję "GET" obrazu z pliku co 100ms, zmieniając źródło obiektu DOM. Widzę, że wywołanie GET rzeczywiście zwraca poprawny obraz co 100ms, ale rzeczywisty obraz jest aktualizowany tylko raz na sekundę. Oto mój kod JavaScript, który działa:DOM zbyt długo reaguje
<img id="videoDisplay" style="width:800; height:600"/>
<script type="text/javascript">
function videoDataPoll(filename) {
setTimeout(function() {
document.getElementById("videoDisplay").src = filename + "?random="+(new Date()).getTime();
videoDataPoll(filename);
}, 100);
}
</script>
UPDATE: Zmieniono funkcja używać wstępnego ładowania następująco:
<canvas id="videoDisplay" style="width:800; height:600"/>
<script type="text/javascript">
var x=0, y=0;
var canvas, context, img;
function videoDataPoll() {
var filename = getFilename();
canvas = document.getElementById("videoDisplay");
context = canvas.getContext("2d");
img = new Image();
img.onload = function() {
context.drawImage(img, x, y);
setTimeout("videoDataPoll()", 100);
}
img.src = filename + "?random=" + (new Date()).getTime();
}
<script>
Wciąż aktualizuje przy tej samej prędkości (który jest rzeczywiście co 5 sekund, nie 1s jak pierwotnie stwierdzono). Tak więc na każde 50 żądań otrzymania (10/sek przez 5 sekund) element jest aktualizowany tylko raz.
Kolejna ważna uwaga: to drugie rozwiązanie działa idealnie na moim lokalnym hoście, gdzie napotkam problem, gdy uruchamiam tę samą stronę ze zdalnego hosta.
Musisz wstępnie wczytać obrazy przed wyświetleniem. W przeciwnym razie 1s to czas ładowania obrazu. Możesz użyć [tej funkcji] (http://short-tag.info/2013/04/preload-images-with-plain-javascript/). – antoox
Po pierwszym wywołaniu 'videoDataPoll', nazwa pliku' to – undefined
Haha, komentarz geniuszu. –