Здесь курят мануал.

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Пыха информатор 3.1
Еще более удобное оповещение о флуде!

Краснодарское время: 25 Май, 2012, 09:04:33

Страниц: 1 [2]
Печать
Автор Тема: алгоритмы кеширования  (Прочитано 3234 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
CTAPbIu_MABP    ↓ 
12 Май, 2008, 12:38:09
НЕ ХУЕТА! ХУЕТА!

мавр
Группа: в ухо

Карма: не нужна
Сообщений: 5187
Сила слова: 1.81

ну сколько я помню все учебники учат что
"" синоним для new String()
[] - new Array()
{} - new Object()
 
и вобщем они так и используються во всех извесных мне движках
 
например в том же jquery создание массива выглядит
 
Text

    makeArray: function( array ) {
        var ret = [];
        ...
        return ret;
    },
 

а new String() вообще не встречаеться
Записан

java.lang.OutOfMemoryError
vasa_c    ↓ 
12 Май, 2008, 10:36:03 , спустя 9 часов 57 минут 54 секунды
НЕ ХУЕТА! ХУЕТА!

Группа: в ухо

Карма: 81
Сообщений: 2459
Сила слова: 3.29

[], это почти что и new Array() (хоть и с нюансами), так как Array может быть только объектом. Ну и соответственно Object так же.
Переменные же скалярных типов (строки, числа, булы ...) могут быть как примитивными, так и объектами-над-примитивами.
Записан

CTAPbIu_MABP    ↓ 
12 Май, 2008, 01:24:25 , спустя 2 часа 48 минут 22 секунды
НЕ ХУЕТА! ХУЕТА!

мавр
Группа: в ухо

Карма: не нужна
Сообщений: 5187
Сила слова: 1.81

не путайте желаемое с действительным... это не java
 
Text

str1 = new String("qwerty");
str2 = str1;
str2 = new String("йцукен");
 
alert([str1,str2]);
 

строки в жабаскрипте передаются по значению
Записан

java.lang.OutOfMemoryError
vasa_c    ↓ 
12 Май, 2008, 05:33:12 , спустя 4 часа 8 минут 47 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: в ухо

Карма: 81
Сообщений: 2459
Сила слова: 3.29

Строки по значению.
Объекты тоже по значению, но этим значением является ссылка на внутреннюю структуру объекта (reference type).
new String() же порождает не строку, а объект. Только не просто объект-Object, а объект внутренне связанный с примитивным значением [[Value]] и арифметические действия над ним затрагивают это значение.
 
Просто пример, чтобы понять, что это разные вещи:
Javascript

var str1 = 'Строка';
str1.x = 10;
alert(str1.x); // undefined
var str2 = new String('Строка');
str2.x = 10;
alert(str2.x); // 10
 
Записан

CTAPbIu_MABP    ↓ 
12 Май, 2008, 06:55:59 , спустя 1 час 22 минуты 47 секунд
НЕ ХУЕТА! ХУЕТА!

мавр
Группа: в ухо

Карма: не нужна
Сообщений: 5187
Сила слова: 1.81

ок, не будем спорить - проверим имперически
 
Text

var obj = [];
var str = new String("qwerty");
 
for(i=0;i<100000000;i++)
obj[i] = str;
 

к сожлению оба способа дают один и тотже результат - жрут память.
Причем на подходе к одному гигу  (гдето 992м) срабатываю какието механизмы очистки и выжыраемое место начинает увеличиваться намного медление
 
при 10000000 выделяемая память доходила до 480м (память самого ФФ была 62м)
 
вывод - одинхерразницы!!!
 
надо искать все таки алгоритм кэширования, а не надеяться на оптимизацию данных самим жабаскриптом
Записан

java.lang.OutOfMemoryError
vasa_c    ↓ 
12 Май, 2008, 08:09:14 , спустя 1 час 13 минут 15 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: в ухо

Карма: 81
Сообщений: 2459
Сила слова: 3.29

Если продолжать проводить глубокие эксперименты, то обратите внимание, что на выделяемую память так же не виляет ни значительное увеличение длины строки ("qwertyqwertyqwerty"), ни присвоение константы: obj = "qwerty", но в тоже время динамическое создание строки (obj = "" + i + i) начинает отжирать память в куда больших размерах.
 
Если же не проводить, то сначала решите, сколько у вас будет кэшированных слов. 10М за один сеанс? Не думаю.
Записан

CTAPbIu_MABP    ↓ 
12 Май, 2008, 10:16:20 , спустя 2 часа 7 минут 6 секунд
НЕ ХУЕТА! ХУЕТА!

мавр
Группа: в ухо

Карма: не нужна
Сообщений: 5187
Сила слова: 1.81

ну как я уже говорил я люблю круглые цыфры
я сказал что каждый запров на 1 букву (например 'К') возвращает 1000 слов
каждое слово по 5-10 символов на 8 байт (utf8) = 40-80 байт = 60 байт на слово.
тоесть всего 6 метров на первый запрос если уточнять запрос второй буквой то том идеть большой разброс поэтому возьмем 10%
итого примерно 7 метров общий кеш на каждую букву (но это идеализировано)
что предлогаете? считать 7 метров незначительным числом и обходить весь массив?!
Записан

java.lang.OutOfMemoryError
Timur    ↓ 
12 Май, 2008, 11:39:53 , спустя 1 час 23 минуты 33 секунды
НЕ ХУЕТА! ХУЕТА!

NullPointerException
Группа: в ухо

Карма: 56
Сообщений: 1009
Сила слова: 5.55

небольшое уточнение
каждое слово по 5-10 символов на 8 байт (utf8) = 40-80 байт = 60 байт на слово.
почему на 8 байт? В UTF-8 символы кодируются наборами 1-4 байт. Если речь идет о латиннице - 1 байт, кириллические символы занимают по 2 байта.
Записан
CTAPbIu_MABP    ↓ 
13 Май, 2008, 10:10:20 , спустя 10 часов 30 минут 27 секунд
НЕ ХУЕТА! ХУЕТА!

мавр
Группа: в ухо

Карма: не нужна
Сообщений: 5187
Сила слова: 1.81

простите действительно 2 байта на 1 русский символ
то я чета вчера вечером замученный был... тогда не 7 метров а в 4 раз меньше то есть меньше чем 2м
Записан

java.lang.OutOfMemoryError
Страниц: 1 [2]
Печать
 

Перейти в: