Goedemiddag GoT,
Op dit moment ben ik bezig met het ontwikkelen van een webapp in Angular. Deze app zal per pagina een grote hoeveelheid foto's gaan tonen in een fotogallerij (Colorbox). Op dit moment heb ik het geheel als volgt geimplementeerd:
Een zoektocht op Google gaf aan dat wanneer zoiets optreedt dit met het geheugengebruik te maken heeft. Het lijkt erop dat de base64-data allemaal in het geheugen vast gehouden wordt, ook na het sluiten van de grote foto's. Colorbox verwijdert dan echter wel netjes het img-element uit de DOM.
Op dit moment staar ik me een beetje blind en zie niet goed hoe nu verder. Kunnen jullie me weer een duw in de juiste richting geven? Alvast bedankt
Edit: wat meer context/code voor de beeldvorming
Het laden van de thumbnails doe ik met de volgende functie (fotos is vergelijkbaar, wordt alleen naar een andere property van het $photo-object geschreven):
De ngRepeat ziet er als volgt uit:
De colorbox-directive welke je hier ziet heb ik van StackOverflow
Op dit moment ben ik bezig met het ontwikkelen van een webapp in Angular. Deze app zal per pagina een grote hoeveelheid foto's gaan tonen in een fotogallerij (Colorbox). Op dit moment heb ik het geheel als volgt geimplementeerd:
- Angular krijgt in een Ajax-request een lijst aan IDs (gewrapped in objecten) van de foto's mee
- Angular heeft een 'ngRepeat' voor deze lijst van IDs. Voor ieder ID worden de fotos asynchroon geladen middels ajax-requests
- Ieder element in de ngRepeat heeft een code:voor een thumbnail. De API waarvan de foto's geladen worden geeft de thumbnails in base64 terug. De 'ngSrc' wordt dan ook gevuld met iets als
1
ngSrc
code:waarna de thumbnails prima worden weergeven1
data:image/jpeg;base64,[BASE64]
- Ieder element in de ngRepeat heeft ook een anchor-tag met daarin een 'href'. Deze 'href' is gevuld met wederom een base64-datastring.
- Colorbox probeert op basis van de base64-string van de 'href' de afbeelding full-size te laten zien
Een zoektocht op Google gaf aan dat wanneer zoiets optreedt dit met het geheugengebruik te maken heeft. Het lijkt erop dat de base64-data allemaal in het geheugen vast gehouden wordt, ook na het sluiten van de grote foto's. Colorbox verwijdert dan echter wel netjes het img-element uit de DOM.
Op dit moment staar ik me een beetje blind en zie niet goed hoe nu verder. Kunnen jullie me weer een duw in de juiste richting geven? Alvast bedankt
Edit: wat meer context/code voor de beeldvorming
Het laden van de thumbnails doe ik met de volgende functie (fotos is vergelijkbaar, wordt alleen naar een andere property van het $photo-object geschreven):
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| $scope.loadThumbnails = function() { $scope.photos.forEach(function($photo){ var request = $http({ method: "GET", url: [URL] }); var fetchThumbnailSuccess = function(response) { console.debug("Fetched thumbnail with id " + $photo.id); $photo.thumb_src = "data:image/jpeg;base64," + response; } request.success(fetchThumbnailSuccess); var fetchThumbnailFailure = function(response) { console.error("Failed fetching thumbnail with id " + $photo.id); console.debug(response); } request.error(fetchThumbnailFailure); }); } |
De ngRepeat ziet er als volgt uit:
HTML:
1
2
3
4
5
| <div ng-repeat="photo in photos track by $index" id="entry_{{$index + 1}}"> <a colorbox='{"transition":"fade", "photo":true, "maxWidth":"80%", "maxHeight":"80%"}' href="{{photo.photo_src}}"> <img ng-src="{{photo.thumb_src}}" id="{{photo.id}}" /> </a> </div> |
De colorbox-directive welke je hier ziet heb ik van StackOverflow
[ Voor 43% gewijzigd door hiekikowan op 20-05-2015 16:33 ]