2017-04-21 3 views
0

Ma situation (très simplifiée) est la suivante:Demande multiple ipcam peut bloquer le navigateur?

  • Dans une seule page j'ai n objets IPcam. Chaque objet ipcam a son propre div, où l'image de l'ipcam est mise à jour chaque fois que l'image précédente est reçue.
  • une fonction javascript appelle un fichier php (en passant l'id de l'ipcam en paramètre) qui renvoie l'image avec une requête socket (après avoir choisi les paramètres pour cet identifiant [ip, port, authentification, nom d'utilisateur, mot de passe etc etc]).

code Javascript (simplifié)

//called by a timer 
function refresh_ipcam(id){ 

    if(parseInt($("#"+id).attr('refresh_finished')) == 1){ 

     $("#"+id).attr('refresh_finished',0); 

     var img = new Image(....); 
     var x = new Date().getTime(); 
     img.src = "get_image.php?id="+id+"&random="+x; 

     img.onload = function(){ 
      $("#"+id).html(img); 
      $("#"+id).attr('refresh_finished',1); 
     } 
     img.onerror = function(e){ 
      setTimeout(function(e){ 
       $("#"+id).attr('refresh_finished',1); 
      },2000) 
     } 
    } 
} 

En ajoutant le paramètre aléatoire, le navigateur détecte toujours une nouvelle image. De cette façon, j'ai résolu un problème (l'image n'a pas été mise à jour correctement pour les problèmes de cache). Mais je pense qu'il y a un autre type de problème de cette façon, étant donné le nombre élevé de demandes faites.

Certains utilisateurs ont signalé le bloc du navigateur (après un certain temps). Cela peut-il être un problème lié à un cache complet? Sur la console google chrome, dans la section Application> Frames> Images, j'ai remarqué que chaque requête (get_image.php) correspond à un nouvel élément de cette liste.

enter image description here

Répondre

0

Il ressemble à des solutions basées sur la manipulation des sources d'image ne fonctionnent pas bien. Ils utilisent beaucoup de mémoire et peuvent même crash du navigateur. Probablement, vous devez considérer live streaming web video.

Pour plus d'information vérifier: