Używam jquery i backbone.js na stronie, która jest dość ciężki obraz. Podstawowa funkcjonalność witryny obejmuje wiele bardzo małych obrazów (pliki jpg o wymiarach 150x180px). Lista obrazów jest dostępna za pośrednictwem ajax/json przy użyciu pobierania kolekcji backbone.js. Następnie dla każdego modelu w kolekcji jest wyświetlany widok, który zawiera element img. Widok jest następnie dodawany do dom.net :: ERR_INSUFFICIENT_RESOURCES błąd podczas dodawania wielu elementów img do domena
Jest jeden użytkownik, który ma tysiące zdjęć - bardzo ostry przypadek w stosunku do liczby zdjęć większości naszych zwykłych użytkowników. Gdy ładuje się dane obrazu tego użytkownika, przeglądarka nie radzi sobie z ładowaniem wszystkich obrazów, przynajmniej w taki sposób, w jaki działa nasz obecny kod. Około połowa obrazów ładuje się w porządku, ale przeglądarka (używam chrome 35) przestaje odpowiadać przez kilka minut. Druga połowa obrazów nie ładuje się, a w przeglądarce wyświetlane są błędy "net :: ERR_INSUFFICIENT_RESOURCES" dla obrazów, które nie są ładowane.
Oto niezbędna część naszego kodu, który ładuje obrazy. Czy ktokolwiek może wyjaśnić technicznie przyczyny niepowodzenia ładowania obrazu i zaoferować rozwiązanie , które nie wymaga dodawania stronicowania ani funkcji "kliknij, aby załadować więcej" do listy obrazów?
// 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);
}
I kod render() dla widoku App.View.ImageView:
render: function() {
var renderedTemplate= theTemplate(this.model.toJSON());
this.$el.html(renderedTemplate);
return this;
}
a szablonu używanego przez App.View.ImageView (to dostaje kompilowane tylko raz przy użyciu _.template) :
<script type="text/template" id="thumb-template">
<a href="<%= ImageUrl%>"><img src="<%= ImageUrl%>" /></a>
<div class="delete"></div>
</script>
Okazało się, że mimo bardzo powolnego ładowania tak wielu obrazów, dziwny błąd pochodzi z AdBlock Plus. Wyłączyłem tę wtyczkę Chrome i błędy zniknęły, a obrazy ładują się dobrze ... po prostu zajmuje to dużo czasu przeglądarce, aby wyrenderować stronę i wykonać całą pracę, którą przeglądarka musi wykonać pod maską. – Rafe
Wiem, że powiedziałeś, że nie chcesz "kliknij tutaj, aby załadować więcej" rozwiązanie, ale mam taką samą sytuację i myślę, że nieskończone przewijanie jest prawdopodobnie najlepszą opcją. Ma to również sens. Po co zmuszać przeglądarkę do renderowania obrazów 8K jednocześnie, gdy tylko ~ 20 z nich będzie widziane przez użytkownika na raz? – djKianoosh
@djKianoosh W moim przypadku obrazy są układane i filtrowane wizualnie za pomocą Isotope. Nie można sortować/filtrować elementów po stronie klienta, które nie są załadowane, dlatego potrzebuję załadować wszystkie elementy. – Rafe