Ich benutze jquery und backbone.js auf einer Website, die ziemlich Bild schwer ist. Die Kernfunktionalität der Website beinhaltet viele, ziemlich kleine Bilder (150x180px jpg-Dateien). Die Liste der Bilder kommt über AJAX/JSON mit einem Backbone.js Collection Fetch. Dann gibt es für jedes Modell in der Sammlung eine Ansicht, die gerendert wird und ein img-Element enthält. Die Ansicht wird dann zum Dom hinzugefügt.net :: ERR_INSUFFICIENT_RESOURCES Fehler beim Hinzufügen zahlreicher IMG-Elemente zu Dom
Es gibt einen Benutzer, der tausende von Bildern hat - ein Super-Edge-Case, relativ zu wievielen Bildern die meisten unserer normalen Benutzer haben. Wenn die Bilddaten dieses Benutzers geladen werden, kann der Browser das Laden aller Bilder nicht verarbeiten, zumindest nicht so, wie unser aktueller Code funktioniert. Ungefähr die Hälfte der Bilder wird schließlich geladen, aber der Browser (ich verwende Chrom 35) reagiert für einige Minuten nicht mehr. Die andere Hälfte der Bilder wird nicht geladen und die Browserkonsole zeigt "net :: ERR_INSUFFICIENT_RESOURCES" -Fehler für die Bilder an, die nicht geladen werden.
Hier ist der wesentliche Teil unseres Codes, der die Bilder lädt. Kann jemand erklären, warum dieser Bildladefehler auftritt, und eine Lösung anbieten , die kein Hinzufügen von Paging oder "Klick sie, um mehr zu laden" -Funktionalität in die Bildliste?
// inside the view that renders the images
render: function() {
this.collection.each(this.addOne, this);
return this;
},
addOne: function (imgModel) {
var imgView = new App.Views.ImageView({ model: imgModel});
this.$el.append(imgView.render().el);
}
Und die render() Code für die App.View.ImageView Ansicht:
render: function() {
var renderedTemplate= theTemplate(this.model.toJSON());
this.$el.html(renderedTemplate);
return this;
}
Und die Vorlage verwendet von App.View.ImageView (dies ist nur einmal kompiliert wird mit _.template) :
<script type="text/template" id="thumb-template">
<a href="<%= ImageUrl%>"><img src="<%= ImageUrl%>" /></a>
<div class="delete"></div>
</script>
Stellt sich heraus, dass, obwohl es unglaublich langsam ist, so viele Bilder zu laden, der seltsame Fehler kam von AdBlock Plus. Ich habe das chrome-plugin deaktiviert und die Fehler sind verschwunden, und die Bilder werden geladen ... dauert nur eine lange Zeit, bis der Browser die Seite gerendert hat und alle Arbeiten erledigt, die der Browser unter der Haube erledigen muss. – Rafe
Ich weiß, du hast gesagt, du willst keine "Klick hier, um mehr zu laden" Lösung, aber ich habe die gleiche Situation und ich denke, unendliches Scrollen ist wahrscheinlich die beste Option. Es macht auch Sinn. Warum zwingen Sie den Browser, 8k Bilder gleichzeitig zu rendern, wenn nur ~ 20 von ihnen gleichzeitig gesehen werden? – djKianoosh
@djKianoosh In meinem Fall werden die Bilder gekachelt und visuell mit Isotope gefiltert. Sie können auf der Clientseite keine Objekte sortieren/filtern, die nicht geladen sind. Daher müssen alle Objekte geladen sein. – Rafe