В моем проекте у меня есть несколько графиков (максимум 15 различных графиков, таких как гистограмма, диаграмма, пузырь, линия), которые строятся с использованием javascript (Open / SAP UI-5) в HTML5 ниже: код для того же
press: function() {
var arrCanvas = document.getElementsByTagName("canvas");
for(var i=0; i<arrCanvas.length; i++){
var canvas = arrCanvas[i];
if(canvas.width!==0 && (typeof imageNames[i] !== 'undefined')){
var imageDetail = {};
var uint8ArrayClamped = canvas.getContext("2d").getImageData(0,0,canvas.width,canvas.height).data;
imageDetail.byteData = uint8ArrayClamped;
imageDetail.title = "graph-"+i;
imageDetail.height = canvas.height;
imageDetail.width = canvas.width;
arrImageByte.push(imageDetail);
}
}
}
Когда я передаю этот arrImageByte в Ajax, браузер (тестируется на Chrome) вылетает с сообщением «о, хватка».
при добавлении строки ниже к коду
press: function() {
var arrCanvas = document.getElementsByTagName("canvas");
for(var i=0; i<arrCanvas.length; i++){
var canvas = arrCanvas[i];
if(canvas.width!==0 && (typeof imageNames[i] !== 'undefined')){
var imageDetail = {};
var uint8ArrayClamped = canvas.getContext("2d").getImageData(0,0,canvas.width,canvas.height).data;
//I belive somwhow This does the trick
imageDetail.byteData = [].slice.call(uint8ArrayClamped);
imageDetail.title = "graph-"+i;
imageDetail.height = canvas.height;
imageDetail.width = canvas.width;
arrImageByte.push(imageDetail);
}
}
}
Копирование unit8ArrayClamped в другой пустой массив делает свое дело, теперь код работает и вызывается REST, интересно, почему это происходит?
но опять же копирование таких огромных данных в другое требует времени, а для нескольких графиков - почти 6-7 секунд, как уменьшить это до минимума?
Есть ли другой способ, кроме копирования байтового массива в другой новый массив?