Javascript заблокировать или замедлить работу браузера. Как предотвратить предупреждение или ускорение скрипта - PullRequest
1 голос
/ 08 января 2020

У меня есть таблица данных с большим количеством строк, которые необходимо экспортировать в Excel. В моем примере я использую только 500 строк, но в реальной среде у меня> 2000 строк.

ОБНОВЛЕНИЕ: добавлена ​​блокировка для предупреждения пользователя: https://jsfiddle.net/j2fug3ax/

Теперь, когда строки экспортируются с помощью кнопки в Excel, есть скрипт, который читает каждую строку для манипулирования данными и устанавливает ее совместимость с Excel (форматы, выравнивание, высота ячейки, новая строка, ...)

Здесь фрагмент кода для редактирования строк:

           //need to change double quotes to single
           data = data.replace( /"/g, "'" );

           // replace &
           data = data.replace( /&/g, "&" );

           // replace p with br
           data = data.replace(/<p[^>]*>/g, '').replace(/<\/p>/g, '<br>');

           // replace div with br
           data = data.replace(/<div[^>]*>/g, '').replace(/<\/div>/g, '<br>');

           data = remove_tags(data);



           //split at each new line
           splitData = data.split('<br>');

           //remove empty string
           splitData = splitData.filter(function(v){return v!==''});

           data = '';
           for (i=0; i < splitData.length; i++) {
                    //add escaped double quotes around each line
                    data += '\"' + splitData[i] + '\"';
                    //if its not the last line add CHAR(10)
                    if (i + 1 < splitData.length) {
                        data += ', CHAR(10), ';
                    }
           }

           //Add concat function
           data = 'CONCATENATE(' + data + ')';
           return data;

Этот код замедляет выполнение сценария, и в браузере появляется предупреждение о блокировке или ожидании .... Это не очень элегантно, поэтому есть ли способ чтобы предотвратить это предупреждение или ускорить мой код?

Манипуляции в моем примере не нужны, потому что я устанавливаю фиктивные данные, но в реальной среде они мне нужны.

1 Ответ

0 голосов
/ 08 января 2020

Так что просто предложение:

Почему бы не сделать это на стороне сервера?

Обработка большого количества данных на стороне клиента - плохой выбор. Вы всегда зависите от ресурса системы клиента. Javascript как-не подходит для интенсивных вычислений или обработки данных.

Решение

Отправьте размер вашей страницы и номер страницы через API на сервер , Запросите вашу таблицу и создайте Excel / CSV на стороне сервера. Верните сгенерированный файл в ответ на ваш пользовательский интерфейс, чтобы загрузить его в систему клиента.

Надеюсь, это поможет :)

...