Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   баг localStorage (https://javascript.ru/forum/offtopic/44776-bag-localstorage.html)

cyber 01.02.2014 22:28

баг localStorage
 
этот код забивает пишет в storage пока браузер не упедает, все что он успевает записать остаеться в storage, это что то новенькое или я слоупок?
var data = "";
for(var i = 0; i < 500000; i++) 
  localStorage.setItem("data", data+=i)


убивает 4 гига оперативы как нефиг делать (дальше просто убил процесс).

dmitriymar 01.02.2014 22:52

Ты асинхронным вычислением строки убиваешь браузер. Что очередь не детская. Что ресурсы при вычислении жрет

cyber 01.02.2014 23:01

Цитата:

Сообщение от dmitriymar
Ты асинхронным вычислением строки убиваешь браузер. Что очередь не детская. Что ресурсы при вычислении жрет

поэтому он не успевает обработать переполнение localStorage?

dmitriymar 01.02.2014 23:11

Это вопрос к разработчикам браузеров. А факты то. Что очередь дикая. То что вычисление строки жрет немало - получить - вычислить-сохранить. Что сборщик мусора инертен.
Насчет асинхрона и очереди погорячился-синхрон без очереди

Maxmaxmaximus7 02.02.2014 03:25

Цитата:

Сообщение от dmitriymar
асинхронным вычислением строки

дальше не читал

monolithed 02.02.2014 12:11

Во-первых,
Цитата:

Web storage can be viewed simplistically as an improvement on cookies, providing much greater storage capacity (5 MB per origin in Google Chrome, Mozilla Firefox, and Opera; 10 MB per storage area in Internet Explorer) and better programmatic interfaces.
data=''
file=/tmp/$RANDOM

for line in {0..500000}
    do 
        data+=$line
    done

echo $data > $file | ls -lah $file | awk '{print $5}' # 2,8M



Во-вторых, у меня bash тоже подвис на этой операции на несколько минут.

А если при этом еще на каждой итерации дергать файл, то:

➜ time `str=''; tmp=/tmp/$RANDOM; for i in {0..10000}; do str+=$i; echo $str >> $tmp; done`;

real  0m31.761s
user  0m30.484s
sys   0m1.181s


При том что количество итераций в 50 раз меньше!

Deff 02.02.2014 12:26

cyber,
Не наю, если чисто копировать из аякса текстовый файл мега в три - у меня секунд 30 грузит на storage с учетом аякса
Соль походу в том, что оно у тьву каждую цифру перезаписывает в файл на жесткий по обращению localStorage.setItem()
А каждое обращение на запись файла порядка 1мs, в зависимости от винта
Очевидно пишет не по каждому обращению, а буферизирует, иначе часы были бы
Просто походу перезаписать файл 5 миллионов раз


Часовой пояс GMT +3, время: 12:28.