Конкатенация занимает много памяти, как я могу ее оптимизировать? - PullRequest
0 голосов
/ 27 ноября 2018

Конкатенация занимает много памяти.Если учесть, что символ занимает ~ 2 байта, то результирующая строка кода должна занять около ~ 20 МБ, но когда код, представленный ниже, работает, страница потребляет около 1 ГБ.Попытался использовать Join или выполнить операцию s + = 'q';в функции и т. д. ничего не помогает.Как я могу оптимизировать, например, в ".net" есть StringBuilder?

var i = 0
       var s = "q";
   while (i <10000000) {
     s + = 'q';
 
     i ++;
   }

PS

let str = Array (10000000) .fill (`g`) .join``;

или

'g'.repeat (10000000)

не подходит, нужноконкатенация.

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Попробуйте сделать Http-запрос к веб-серверу, который может выполнить эту операцию и вернуть только результат.Я также попробовал бы веб-работника (его поддерживают новые браузеры), но я не уверен насчет потребления памяти.Но он не будет использовать поток пользовательского интерфейса.

И я разбил бы эту операцию на набор меньших, используя setTimeout, создав, например, 100 100 000 символьных строк, а затем конкатенировал их вместо того, чтобы объединить 10000000 один символстроки.

0 голосов
/ 27 ноября 2018

Вы все еще можете использовать join - вам не нужно создавать весь массив за один раз с fill:

var i = 0;
var a = [];
while (i <10000000) {
    a[i] = 'q';
    i++;
}
var s = a.join('');

Таким образом, вы можете "объединить" любые символы (или большеСтроки) необходимы для элементов массива, а затем, наконец, объедините их все за один раз за одну операцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...