Pull to refresh
26
0
Олег Галако @Ojow

User

Send message

Список оптимизаций рендеринга DOM, реализуемых на уровне Javascript фреймворка

Reading time 13 min
Views 26K
С октября 2009 года я занимаюсь разработкой приложения для поиска и прослушивания музыки. Я стремлюсь организовать возможность быстрого взаимодействия пользователя с интерфейсом, и в качестве одного из средств ускорения взаимодействия использую различные способы для быстрой отрисовки страниц.

Предлагаю ознакомиться со способами, реализованными мной в приложении на системном уровне:

  • Использование CSS и переключение классов вместо перестроения DOM дерева
  • Повсемнестное кеширование выборок элементов ($('div.active_part span.highlighter')), атомарные операции по изменению (вместо всеобщей перерисовки, вместо переделывания больших участков DOM дерева)
  • Минимизации чтений DOM во время записи изменений состояний
  • Кеширование размеров и расположения элементов (это спасает от излишнего вычисления при считывании этих значений при наличии других изменений: чтение во время изменения множества частей дерева крайне негативно сказывается на производительности)
  • Аккуратное, не затягивающееся накопление изменений, необходимых произвести в DOM
  • Прикрепление частей изменяющихся коллекций единовременно (когда, например, в середину списка вставляется 3 новых элемента; createDocumentFragment) в конкретное место (after, before) вместо открепления всей коллекции от DOM и повторного прикрепления (и вместо того, чтобы перерисовывать весь список)
  • Прогрессивный асинхронный рендеринг: картина прорисовывается сразу с небольшим количеством деталей, затем деталей появляется всё больше
  • Клонирование нодов (как часть шаблонизации)
  • Кеширование и использование кеша результатов парсинга DOM шаблонов


image image
изображения из части с заголовком «Прикрепление частей изменяющихся коллекций единовременно...»
Читать дальше →
Total votes 68: ↑66 and ↓2 +64
Comments 31

X-сервер для Android

Reading time 1 min
Views 18K
Австралийский разработчик Мэтт Квэн (Matt Kwan) создал X-сервер для Android (на Java), который уже можно скачать в Android Market, исходный код также опубликован на Google Code (лицензия MIT или Apache).

X-сервер реализует протокол X11 на Android-устройствах, то есть позволяет отображать на планшете/смартфоне интерфейс приложения, которое выполняется на другой *nix-машине в сети, например, на десктопе или ноутбуке Linux, MacOS или *BSD. Чтобы сделать это, зная IP-адрес планшета, достаточно просто указать в переменной display IP-адрес планшета с параметром :0 (по крайней мере, в Австралии смартфонам раздают адреса IPv4). С планшета осуществляется управление приложением на десктопе: нажатием по тачскрину передвигается курсор, а кнопки громкости эмулируют нажатия левой и правой кнопки мыши, поддерживаются физическая и виртуальная клавиатуры.

Таким образом, в перспективе на планшете можно будет запускать нормальный десктопный софт.
Читать дальше →
Total votes 44: ↑37 and ↓7 +30
Comments 32

Обыск в офисе fermer.mobi

Reading time 3 min
Views 3.7K
Вчера к нам в офис, а затем и в мою квартиру явились сотрудники Отдела «К», изъяли суммарно 3 системных блока, 2 ноутбука, 1 нетбук (всего 6 компьютеров), предъявив все необходимые бумаги для обыска: постановление на обыск по решению суда, и поручение, дающее право на обыск, обыск проводился с понятыми.

В постановлении на обыск сказано, что причиной является уголовное дело, возбужденное в отношении неустановленного лица, по подозрению в нарушении авторских прав компании Плэйтокс.
Утверждается, что якобы при разработке игры fermer.mobi, использовался программный код игры Мир Теней.

Вечером того же дня мне принесли повестку, явиться на допрос в качестве свидетеля.
Читать дальше →
Total votes 199: ↑172 and ↓27 +145
Comments 195

История создания fermer.mobi

Reading time 3 min
Views 3.4K
Хочу рассказать вам, как я создал браузерную онлайн игру для мобильных устройств, которая на текущий момент:
— занимает 3-е место в рейтинге waplog.net (это самый крупный счетчик рувапа);
— 4-е место в мобильных одноклассниках (m.odnoklassniki.ru);
— аудитория игры ~300 тысяч хостов в сутки;
— онлайн днем ~12 тысяч;
— количество регистраций уже приближается к 500 тысячам.

Эта история, на мой взгляд, интересна тем, что:
— игру создал, запустил и раскрутил я один, без инвесторов, без партнеров;
— я никогда не был менеджером, бизнесменом, маркетологом, я программист;
— помимо денег на содержание моей семьи я вложил в раскрутку всего 50 тысяч рублей.

Читать дальше →
Total votes 126: ↑114 and ↓12 +102
Comments 112

Товарищам детям!

Reading time 4 min
Views 2.6K
image
Приветствую!
Примерно полтора года назад мне пришла в голову мысль, и показалась очень и очень перспективной.
Соответственно, сначала идея, потом история :)
Итак, некоторое время назад начали массово появляться дешёвые китайские планшеты с Андроидом на борту. При всём своём несовершенстве они имеют огромный плюс — дешевизна!
Я, как счастливый отец тогда ещё 2 — летнего ребенка, подумал — идеальная игрушка!
Читать дальше →
Total votes 74: ↑66 and ↓8 +58
Comments 88

Простой, казалось бы, вопрос по JavaScript

Reading time 1 min
Views 5.3K
Есть простейший с виду код:

setInterval(function(){
     var xhr = new XMLHttpRequest();
     xhr.open('GET', 'json.txt', true);
     xhr.onreadystatechange = function() {
        if(this.readyState == 4 && this.status == 200) {
           console.log(this.responseText);
        }
     };
     xhr.send('');
}, 500);


Если оставить этот код работающим в, например, Google Chorme, скажем, на 1 час, он съедает память. Съедает методично. Если посмотреть в Developer Tools на профиль использования памяти видно что память таки чистится GC но не до конца. Со временем минимальная точка на графике после GC растет.

image

Аналогично рост потребления памяти видно и по about:memory. «Отжир» памяти стабильно видно и в FF…

Важное...
  • Файл json.txt лежит на localhost, его загрузка не занимает более 500мс гарантированно (я проверял).
  • Вывод в консоль я тоже отключал — память по прежнему отжирается.
  • EDIT без включенных developer tools — тоже течет, видно на about:memory.


Кроме этого кода более на данной странице никакого кода нет вообще.

Возможно я не понимаю как работает GC в JS, но по моему понятию тут нечему течь и нечему жить вечно. Может кто-то объяснить почему?

P.S. «Настоящей» утечки таки нет, если обновить страницу — память очищается.
P.P.S. Есть локальная жизненна потребность («требования бизнеса») оставлять подобный по структуре код на гораздо большие промежутки чем 1 час.

UPD: Оказывается есть даже тикет в хромиуме: code.google.com/p/chromium/issues/detail?id=52411
UPD: Якобы fixed in 9, но я проверяю на 10.
Total votes 49: ↑44 and ↓5 +39
Comments 91

Information

Rating
Does not participate
Location
Berlin, Германия
Registered
Activity