improve piece map performance

This commit is contained in:
MaysWind 2016-06-24 23:25:11 +08:00
parent 1376694c24
commit 9a71545303

View file

@ -11,19 +11,46 @@
pieceCount: '=' pieceCount: '='
}, },
link: function (scope, element) { link: function (scope, element) {
var pieces = [];
var currentPieceStatus = [];
var redraw = function () { var redraw = function () {
var pieces = aria2TaskService.getPieceStatus(scope.bitField, scope.pieceCount); currentPieceStatus = aria2TaskService.getPieceStatus(scope.bitField, scope.pieceCount);
pieces.length = 0;
element.empty(); element.empty();
var pieceCount = Math.max(1, pieces.length); var pieceCount = Math.max(1, currentPieceStatus.length);
for (var i = 0; i < pieceCount; i++) { for (var i = 0; i < pieceCount; i++) {
element.append('<div class="piece' + (pieces[i] ? ' piece-completed' : '') + '"></div>'); var piece = angular.element('<div class="piece' + (currentPieceStatus[i] ? ' piece-completed' : '') + '"></div>');
pieces.push(piece);
element.append(piece);
} }
}; };
var refresh = function () {
var newPieceStatus = aria2TaskService.getPieceStatus(scope.bitField, scope.pieceCount);
if (!currentPieceStatus || !newPieceStatus || currentPieceStatus.length != newPieceStatus.length || newPieceStatus.length != pieces.length) {
redraw();
return;
}
for (var i = 0; i < pieces.length; i++) {
if (currentPieceStatus[i] != newPieceStatus[i]) {
if (newPieceStatus[i]) {
pieces[i].addClass('piece-completed');
} else {
pieces[i].removeClass('piece-completed');
}
}
}
currentPieceStatus = newPieceStatus;
};
scope.$watch('bitField', function () { scope.$watch('bitField', function () {
redraw(); refresh();
}); });
scope.$watch('pieceNumber', function () { scope.$watch('pieceNumber', function () {