происходит сбой веб-браузера при вызове REST для данных изображения в JavaScript Uint8ClampedArray - PullRequest
0 голосов
/ 14 сентября 2018

В моем проекте у меня есть несколько графиков (максимум 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 секунд, как уменьшить это до минимума?

Есть ли другой способ, кроме копирования байтового массива в другой новый массив?

...