ФорумПрограммированиеJavaScript → алгоритмы кеширования

алгоритмы кеширования

  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 11 мая 2008 г. 16:38, спустя 4 часа 45 минут 44 секунды

    ну сколько я помню все учебники учат что
    "" синоним для new String()
    [] - new Array()
    {} - new Object()

    и вобщем они так и используються во всех извесных мне движках

    например в том же jquery создание массива выглядит


    makeArray: function( array ) {
    var ret = [];

    return ret;
    },


    а new String() вообще не встречаеться
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 12 мая 2008 г. 2:36, спустя 9 часов 57 минут 54 секунды

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

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 12 мая 2008 г. 5:24, спустя 2 часа 48 минут 22 секунды

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


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

    alert([str1,str2]);


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

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 12 мая 2008 г. 9:33, спустя 4 часа 8 минут 47 секунд

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

    Просто пример, чтобы понять, что это разные вещи:

    var str1 = 'Строка';
    str1.x = 10;
    alert(str1.x); // undefined
    var str2 = new String('Строка');
    str2.x = 10;
    alert(str2.x); // 10
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 12 мая 2008 г. 10:55, спустя 1 час 22 минуты 47 секунд

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


    var obj = [];
    var str = new String("qwerty");

    for(i=0;i<100000000;i++)
    obj = str;


    к сожлению оба способа дают один и тотже результат - жрут память.
    Причем на подходе к одному гигу (гдето 992м) срабатываю какието механизмы очистки и выжыраемое место начинает увеличиваться намного медление

    при 10000000 выделяемая память доходила до 480м (память самого ФФ была 62м)

    вывод - одинхерразницы!!!

    надо искать все таки алгоритм кэширования, а не надеяться на оптимизацию данных самим жабаскриптом
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 12 мая 2008 г. 12:09, спустя 1 час 13 минут 15 секунд

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

    Если же не проводить, то сначала решите, сколько у вас будет кэшированных слов. 10М за один сеанс? Не думаю.
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 12 мая 2008 г. 14:16, спустя 2 часа 7 минут 6 секунд

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

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz 12 мая 2008 г. 15:39, спустя 1 час 23 минуты 33 секунды

    небольшое уточнение
    каждое слово по 5-10 символов на 8 байт (utf8) = 40-80 байт = 60 байт на слово.

    почему на 8 байт? В UTF-8 символы кодируются наборами 1-4 байт. Если речь идет о латиннице - 1 байт, кириллические символы занимают по 2 байта.
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 13 мая 2008 г. 2:10, спустя 10 часов 30 минут 27 секунд

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

Пожалуйста, авторизуйтесь, чтобы написать комментарий!