2015-05-19 9 views
11

Sto tentando di caricare un'immagine da un server.Errore "Aw Snap" durante il caricamento di un'immagine grande in chrome

L'immagine viene creata dinamicamente sul server, che quindi passa il nome [incluso il percorso relativo] al client per il caricamento in un quadro.

Ci sono 3 livelli di tela, che impostano le stesse dimensioni dell'immagine e caricano l'immagine su una tela.

Tutto funziona bene per immagini di piccole dimensioni. Ma per le immagini grandi, [supponendo sopra 9000 x 7000 px] genera un errore di schermata blu "Aw Snap". A volte è riuscito a caricare l'immagine ma a lanciare l'errore "Aw Snap" spostando il mouse sulla tela, spostando le barre di scorrimento o disegnando una linea su di essa.

Ho aumentato --disk-cache-size ma non ha aiutato.

Anche l'impostazione di questi valori non ha aiutato [--disable-accelerated-2d-canvas, --blacklist-accelerated-compositing, --blacklist-webgl, --disable-accelerated-compositing, --disable-accelerated -layers]

Testato con IE e Safari - funziona bene ma alcuni ritardi.

Pubblica i tuoi pensieri e suggerimenti. Qualsiasi aiuto è apprezzato.

Ecco il mio codice

function LoadImage(imageUrl) { 
    try { 
     var image_View = document.getElementById("imageView"); 
     var image_Temp = document.getElementById("imageTemp"); 
     var image_Tempt = document.getElementById("imageTempt"); 
     var ctx = image_View.getContext("2d"); 

     var img = new Image(); 
     img.onerror = function() { 
      alert('The image could not be loaded.'); 
     } 
     img.onload = function() { 
      image_View.width = img.width; 
      image_View.height = img.height; 
      image_Temp.width = img.width; 
      image_Temp.height = img.height; 
      image_Tempt.width = img.width; 
      image_Tempt.height = img.height; 

      ctx.clearRect(0, 0, image_View.width, image_View.height); 
      ctx.drawImage(img, 1, 1, img.width, img.height); 
     } 

     img.src = imageUrl; 
    } 
    catch (err) { 
     alert(err.message); 
    } 
} 
+1

Hai provato a passare a Impostazioni Chromes -> Opzioni avanzate -> Privacy e deselezionare "Prefetch risorse per caricare le pagine più rapidamente"? – Markai

+1

Il voto per chiudere come "troppo ampio", possiamo davvero solo supporre qui. Vorrei suggerire di segnalare questo a [crbug.com] (http://crbug.com) come un bug. – K3N

+1

Come dice K3N, possiamo solo indovinare il motivo per cui il tuo codice fallisce sotto carico pesante (probabilmente perché il carico è troppo pesante!). Ti suggerirei di refactoring dell'app per utilizzare le immagini più vicine alle dimensioni del display anziché essere sovradimensionate. – markE

risposta

7

"Uffa" significa che il sistema operativo ha ucciso il processo di Chrome per questa scheda. Ciò accade quando il tuo sistema operativo pensa che Chrome abbia fatto qualcosa di sbagliato (come quando assegna troppa memoria, danneggiamento della memoria, librerie condivise obsolete dopo una patch di sistema).

È possibile che Chrome abbia bisogno di troppa memoria per visualizzare immagini così grandi. La soluzione alternativa sarebbe tagliare le immagini in pezzi ("piastrellatura") e visualizzare solo le tessere visibili sullo schermo.

Per verificare con certezza, è possibile eseguire Chrome dalla riga di comando. A volte, stampa più messaggi di errore descrittivi sulla console quando parte di esso si arresta in modo anomalo.

Si dovrebbe anche provare ad applicare le ultime patch (di sicurezza) al proprio sistema operativo, ottenere l'ultimo Chrome e riavviare per assicurarsi che non sia un problema tecnico. Sul mio computer (16 GB di RAM, 1 GB di RAM video), posso aprire un'immagine PNG 19'000 x 19'000 senza errori, ci vogliono solo 20 secondi perché il fotogramma lo renda visibile.

+1

La piastrellatura sarà un'opzione ma la dimensione della mia immagine non è nemmeno la metà di max_size. Verifica questo: http://stackoverflow.com/questions/6081483/maximum-size-of-a-canvas-element – Derin

+1

Questo è solo il sito massimo dell'elemento canvas stesso. L'errore "Aw Snap" significa che il tuo sistema operativo ha ucciso Chrome per qualche motivo. Ci sono molti altri elementi che hanno un effetto su questo errore: quante altre schede hai aperto, quanta memoria il tuo sistema operativo vuole dare ad ogni processo di Chrome, quante schede sono unite in un singolo processo, quanta memoria ha la tua scheda gfx gratuito. –

+1

Ho modificato la mia risposta per rendere più chiaro il mio punto. –

0

È possibile eseguire il debug degli errori "Aw Snap" attivando Chrome's logging.

Per abilitare, avviare Chrome utilizzando questi flag della riga di comando:

--enable-logging --v=1 

e aprire la Chrome's user data directory per trovare il file.

Problemi correlati