SlideShare a Scribd company logo
Не бойся,это всего лишь данные...
просто их много
Роман Дворнов
Ostrovok.ru
О себе
•Работаю в Ostrovok.ru
•Автор фреймворка basis.js
2
Данные
3
Когда говорят про
данные на client-side,
чаще всего, подразумевают
объекты и их наборы
(модели и коллекции)
4
Сегодня есть опыт,
разнообразные библиотеки,
быстрые браузеры,
мощные API...
5
... но многие по-прежнему
скептически относятся к
сложным вычислениям и
системам на client-side
6
Client-side глазами скептиков...
7
Все ли так плохо?
8
Хороший «плохой» пример
9
Или как заставить браузер страдать
bower.io/search
10
~10 000 модулей
~2,5 Мб JSON
11
~10 000 модулей
~2,5 Мб JSON
~8 сек браузер "висит"!
12
ААааа!!!!.. Все пропало!...
Нужно грузить постранично...
14
Постойте, не так быстро...
Почему?
15
Что делает скрипт
16
• загружает JSON (массив объектов)
• генерирует 4 небольших списка
• генерирует таблицу на ~10 000 строк
• отдает таблицу компоненту, который
разбивает её на страницы и удаляет все
строки, кроме первых десяти
17
Timeline – Что делает браузер
Что делает браузер
• javascript ~2,85 сек
• парсиг html (из шаблонов) ~0,75 сек
• расчет стилей ~1,6 сек
• layout (~200 000 узлов) ~2.8 сек
• еще несколько секунд асинхронно (по 100)
"индексируются" строки для поиска
18
А можно быстрее?
19
Можно!
• генерация представлений ~0,04 сек
• применение данных ~0,15* сек
20
* и можно быстрее
lahmatiy.github.io/bower-search
github.com/lahmatiy/bower-search
21
Timeline – Применение данных
только JavaScript – ничего лишнего
Чак одобряет
22
Хорошие новости:
Переделали – теперь работает быстро
23
Вывод:
Дело не в количестве данных,
а в неэффективном подходе
24
Проблема
современного фронтенда
25
Многие веб-разработчики думают
через призму jQuery-like подходов,
размышляют про данные через
представление (верстку)
26
27
Пара примеров
По мотивам «старого» bower.io/search
28
+
=
$('#components')
.find('.created time, .updated time')
.timeago();
Разметка ради разметки
29
Невидимая ячейка,
ее innerHTML используется для поиска
30
Item.prototype.values = function(tr, columns) {
var values = {};
for (var i = 0; i < columns.length; i++) {
var name = columns[i];
var td = tr.getElementsByClassName(name)[0];
values[name] = td ? td.innerHTML : '';
}
return values;
};
Получение значений для поиска
В общем случае
31
Data
В общем случае
31
HTMLData
В общем случае
31
HTML DOMData
В общем случае
31
Data*
HTML DOMData
В общем случае
31
Data*
HTML DOMData
В общем случае
31
Data*
HTML DOMData
В общем случае
31
Data*
HTML DOMData
WTF?!
В общем случае
31
Data*
HTML DOMData
WTF?!
Данные в
исходном виде
Фактически, DOM используется
как хранилище данных
32
И это самое медленное,
что можно придумать
33
8,0 с vs. 0,2 с
34
40 : 1
Цифры говорят сами за себя
Не используйте
DOM для хранения данных!
35
А как надо-то?
36
Работа с данными –
вне представлений, в
абстрактном слое
37
Задача представлений –
отражать состояние данных
38
Идеальный вариант
39
Data
Идеальный вариант
39
DOMData
Идеальный вариант
39
DOMData
Идеальный вариант
39
DOMData
Helpers Helpers
Идеальный вариант + хелперы
40
Data DOM
View
bindings
...
Model
Collection
...
Хелперы упрощают разработку,
но добавляют overhead
41
Быстрая работа с DOM
42
Наиболее перспективное направление
DOM-based templates
Фреймворки: React, Ractive, Meteor, Basis.js...
Доклад «Как построить DOM»
tinyurl.com/build-dom
Быстрая работа с данными
43
Практически никто об этом не думает :(
Якобы основная проблема –
рендеринг
Модель ≠ представление
44
Данных может быть
гораздо больше,
чем представлений
bower.io/search
45
10 000+ модулей
bower.io/search
45
10 000+ модулей
кастомные выборки, мгновенная
фильтрация и сортировка
bower.io/search
45
10 000+ модулей
без участия сервера
кастомные выборки, мгновенная
фильтрация и сортировка
Демо блог – 5 000 постов
46
показываем
постранично
Имея все посты
генерируем
облако тегов
и архив
на клиенте
tinyurl.com/basis-blog
Каковы пределы?
47
С каким количеством моделей
мы можем работать?
48
1 000
10 000
100 000
1 000 000
???
49
Конечные ресурсы:
память и время
50
Память
51
Все чего-то стоит
• массив: 16bytes
• +12bytes + 4bytes/item (для литералов)
• +72bytes + 4-8bytes/item (если растить)
• объект: 12bytes + 4bytes/property
• замыкание: 36bytes
• контекст: 24bytes + 4bytes/var
52
* стоимость вV8 (Google Chrome)
Данные
bower.io/search
53
File
~2,5 Мб
Object
~9,0 Мб
JSON.parse
Создание моделей
54
Решение 0 полей 10 полей
new basis.data.Object() 240 240
basis.entity.Type() 440 840
new Backbone.Model() 920 1 480
Ember.Object.create() 1 040 1 600
10 000 экземпляров, Кб
Разные задачи, разные
решения
55
• Произвольные поля • Строгий набор полей
• Вычисляемые поля
• Индекс
• Нормализация значений
• Defaults
• Rollback
• ...
basis.entity.Entitybasis.data.Object
дешево и сердито дороже, но с плюшками
Event listeners
56
Фреймворк 1 событие 2 события 3 события
Basis 240 240 240
Backbone 1 520 2 860 3 840
Ember 5 480 6 520 7 560
10 000 экземпляров, Кб
Итого
57
Решение 10 полей, 1 listener overhead
basis.data 480 5 %
basis.entity 1 080 12 %
Backbone 3 000 33 %
Ember 7 080 79 %
10 000 экземпляров, Кб
А если пойти дальше...
58
Интерполяция
59
Решение 1 000 10 000 100 000
basis.data 0, 05 0,5 5
basis.entity 0,1 1 10
Backbone 0,3 3 30
Ember 0,7 7 70
10 полей и 1 listener, Мб
Вывод №1
О памяти, можно не заботиться
когда меньше 10 000 моделей
60
Вывод №2
Но при больших количествах
объектов, расход памяти
является серьезной проблемой
61
Меньше overhead –
больше полезной нагрузки
62
Время
63
Парсинг данных
bower.io/search
64
JSON.parse
~22 мс
Создание моделей
65
Фреймворк 0 полей 3 поля 10 полей 20 полей
basis.data 2 2 2 2
basis.entity
22
6
36
14
105
22
183
35
Backbone.Model 66 123 238 489
Ember.Object 73 128 201 355
10 000 экземпляров, мс
Event listeners
66
Решение 1 событие 2 события 3 события
Basis ~ 0 ~ 0 ~ 0
Backbone 20 29 38
Ember 49 68 89
10 000 экземпляров, мс
Итого
67
Решение 10 полей, 1 listener overhead
basis.data 2 9 %
basis.entity 22 100 %
Backbone 248 1127 %
Ember 250 1136 %
10 000 экземпляров, мс
А если пойти дальше...
68
Интерполяция
69
Решение 1 000 10 000 100 000
basis.data ~ 0 2 20
basis.entity 2 22 220
Backbone 25 248 2 480
Ember 25 250 2 500
10 полей и 1 listener, мс
Это базовое время –
быстрее не поедет
70
Вывод №3
Задачи можно решать
по-разному, но не все решения
хорошо масштабируются
71
72
Вывод №4
Возможно создавать быстрые и
дешевые интерфейсы к данным
Зачем нужны такие оценки?
73
Чтобы понимать с каким
количеством мы можем работать,
не причиняя браузеру страдания
74
Есть задачи, где требуется
работать с большим
количеством моделей
75
Пример:
Rates & AvailabilityView
76
Rates & AvailabilityView
Кастомизированный Excel со сложной
логикой, специальными функциями и
возможностью редактирования
77
78
Клиент для отелей
Rates &
Availability
View
Масштабы бедствия
79
до 219 000 ячеек
Структура отеля
до 300 строк
(и растет)
Даты
до 730 колонок
(1-2 года)
×
Как это работает сейчас
• По структуре отеля генерируем HTML,
вставляем в документ
• document.getElementById() ➞ элемент ячейки
• Запрашиваем данные – месяц/запрос
• Данные – транформируем, создаем модели,
настраиваем связи с другими моделями
• Добавляем интерактив – обработчики событий и т.д.
80
Знакомо, не правда ли?
81
В цифрах
• ~5 000 строк vanilla JavaScript, минимум jQuery
• ~3,5 с чистое время генерации таблицы
(в худшем случае десятки секунд)
• ~50 Мб памяти
(в худшем случае 100-300 Мб)
82
Одна из быстрых реализаций с
таким подходом
83
Время и память
зависят от размеров
и количества данных
84
Новый функционал
Например, не так давно +2 строки/тариф
85
Средний отель
• 25 тарифов × 2 новые строки
• = 50 новых строк
• = ~18 000 новых ячеек (для года)
• = время увеличилось с 3 сек до 3,6 сек (на 16%)
86
Нужно чтобы было быстрее...
87
Новая реализация:
Динамический вьюпорт
88
Рисуем только то,
что попадает в зону видимости
89
Видимая ячейка
90
View
Model (merge)
DataAllotmentDate
x y
В видимой области
от 200 до 2000 ячеек
91
Повышенные требования
Быстрое создание представлений
Быстрая вставка и удаление представлений
Переиспользование представлений
Быстрое создание моделей
Ленивое создание и рассчеты
Малое потребление памяти
92
Повышенные требования
Быстрое создание представлений
Быстрая вставка и удаление представлений
Переиспользование представлений
Быстрое создание моделей
Ленивое создание и рассчеты
Малое потребление памяти
93
Ленивая обработка данных
94
• JSON.parse
• создание моделей
• расчеты
• GC
• JSON.parse
• добавление в кеш
Отложенное созданиеНемедленное создание
В месяце от 1 000 до 10 000 ячеек
40-250мс/месяц 5-25мс/месяц
Ленивая обработка данных
94
Отложенное созданиеНемедленное создание
В месяце от 1 000 до 10 000 ячеек
40-250мс/месяц 5-25мс/месяц
x12 ~3,0 сек
x24 ~6,0 сек
x12 ~0,3 сек
x24 ~0,6 сек
Ленивое создание моделей
Создаются только те модели,
что попадают во вьюпорт и те,
от которых зависит вид
отображаемых ячеек
95
?
Расчет стиля ячейки
96
rate
Расчет стиля ячейки
96
rate
occupancy
occupancy
...
Расчет стиля ячейки
96
rate
price
price
occupancy
occupancy
...
Расчет стиля ячейки
96
rate
price
price
room
occupancy
occupancy
...
Расчет стиля ячейки
96
rate
price
price
fixed_count
flexible_count
...
room
occupancy
occupancy
...
Расчет стиля ячейки
96
rate
price
price
disable_fixed
disable_flexible
...
fixed_count
flexible_count
...
room
occupancy
occupancy
...
Расчет стиля ячейки
96
rate
price
price
disable_fixed
disable_flexible
...
fixed_count
flexible_count
...
room
occupancy
occupancy
...
Старт
Время:
~1 секунда
без учета сетевых издержек
Память:
6-10 Мб
с постепенным увеличением
при смещении вьюпорта
97
Scroll
98
3 вьюпорта
99
При сдвиге вычиcляется дельта,
какие ячейки нужно удалить
и какие добавить
100
В среднем
при сдвиге вьюпорта
101
А могут замениться и все ячейки вьюпорта
удаляется
20-250 ячеек
добавляется
20-250 ячеек
Основные операции
• Создание моделей
• Создание представлений ячеек
• Вставка и удаление ячеек
• Рассчеты
102
Основные операции
• Создание моделей
• Создание представлений ячеек
• Вставка и удаление ячеек
• Рассчеты
102
Нужно
уклыдываться
в 16мс
Scroll
Сейчас: 30-40 FPS
103
Scroll
Сейчас: 30-40 FPS
103
Цель: 50-60 FPS
Scroll
Сейчас: 30-40 FPS
103
Цель: 50-60 FPS
Кажется,
вполне достижимо
Demo
104
Бонус трек
пример простой реализации
tinyurl.com/table-scroll
105
Заключение
106
Не использовать
DOM для хранения данных
107
Модель ≠ представление
108
данных может быть
гораздо больше
Возможно делать
дешевые интерфейсы
к данным
109
Можно работать
с сотнями тысяч моделей
на client-side
110
111
Главное, делать это аккуратно ;)
Вопросы?
112
Роман Дворнов
@rdvornov
rdvornov@gmail.com
basis.js
basisjs.com
github.com/basisjs

More Related Content

What's hot

basis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворкbasis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворк
Roman Dvornov
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpack
Alexey Ivanov
 
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptCSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
Alexey Ivanov
 
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Ontico
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при ма...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при ма...13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при ма...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при ма...
IT-Portfolio
 

What's hot (20)

Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важны
 
Компонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноКомпонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективно
 
basis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворкbasis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворк
 
Опыт разработки эффективного SPA
Опыт разработки эффективного SPAОпыт разработки эффективного SPA
Опыт разработки эффективного SPA
 
Unit-тестирование скриншотами: преодолеваем звуковой барьер
Unit-тестирование скриншотами: преодолеваем звуковой барьерUnit-тестирование скриншотами: преодолеваем звуковой барьер
Unit-тестирование скриншотами: преодолеваем звуковой барьер
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.
 
Как сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрееКак сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрее
 
CSS глазами машин
CSS глазами машинCSS глазами машин
CSS глазами машин
 
Парсим CSS
Парсим CSSПарсим CSS
Парсим CSS
 
CSSO — минимизируем CSS
 CSSO — минимизируем CSS CSSO — минимизируем CSS
CSSO — минимизируем CSS
 
Внутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpackВнутреннее устройство и оптимизация бандла webpack
Внутреннее устройство и оптимизация бандла webpack
 
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptCSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
 
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
 
Chef @DevWeb
Chef @DevWebChef @DevWeb
Chef @DevWeb
 
ДАМП 2015 Екатеринбург
ДАМП 2015 ЕкатеринбургДАМП 2015 Екатеринбург
ДАМП 2015 Екатеринбург
 
Парсим CSS: performance tips & tricks
Парсим CSS: performance tips & tricksПарсим CSS: performance tips & tricks
Парсим CSS: performance tips & tricks
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при ма...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при ма...13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при ма...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при ма...
 
CSSO – история ускорения
CSSO – история ускоренияCSSO – история ускорения
CSSO – история ускорения
 
Js fuckworks
Js fuckworksJs fuckworks
Js fuckworks
 

Viewers also liked

Remote (dev)tools своими руками
Remote (dev)tools своими рукамиRemote (dev)tools своими руками
Remote (dev)tools своими руками
Roman Dvornov
 

Viewers also liked (15)

Сотрудничество
СотрудничествоСотрудничество
Сотрудничество
 
Мультиварка REDMOND RMC-M4525
Мультиварка REDMOND RMC-M4525Мультиварка REDMOND RMC-M4525
Мультиварка REDMOND RMC-M4525
 
CSS parsing: performance tips & tricks
CSS parsing: performance tips & tricksCSS parsing: performance tips & tricks
CSS parsing: performance tips & tricks
 
CSSO – compress CSS (english version)
CSSO – compress CSS (english version)CSSO – compress CSS (english version)
CSSO – compress CSS (english version)
 
Карточный домик
Карточный домикКарточный домик
Карточный домик
 
Remote (dev)tools своими руками
Remote (dev)tools своими рукамиRemote (dev)tools своими руками
Remote (dev)tools своими руками
 
WUD2013: Юрий Ветров — Унификация, vol. 1. Фреймворк Mail.Ru для мобильного веба
WUD2013: Юрий Ветров — Унификация, vol. 1. Фреймворк Mail.Ru для мобильного вебаWUD2013: Юрий Ветров — Унификация, vol. 1. Фреймворк Mail.Ru для мобильного веба
WUD2013: Юрий Ветров — Унификация, vol. 1. Фреймворк Mail.Ru для мобильного веба
 
Презентация стартапа
Презентация стартапаПрезентация стартапа
Презентация стартапа
 
Шаблон презентации о Компании в PowerPoint (B2B)
Шаблон презентации о Компании в PowerPoint (B2B)Шаблон презентации о Компании в PowerPoint (B2B)
Шаблон презентации о Компании в PowerPoint (B2B)
 
It All Adds Up! Engaging Math Strategies, Web Tools, and Apps
It All Adds Up! Engaging Math Strategies, Web Tools, and AppsIt All Adds Up! Engaging Math Strategies, Web Tools, and Apps
It All Adds Up! Engaging Math Strategies, Web Tools, and Apps
 
GAME ON! Integrating Games and Simulations in the Classroom
GAME ON! Integrating Games and Simulations in the Classroom GAME ON! Integrating Games and Simulations in the Classroom
GAME ON! Integrating Games and Simulations in the Classroom
 
Design Your Career 2018
Design Your Career 2018Design Your Career 2018
Design Your Career 2018
 
The What If Technique presented by Motivate Design
The What If Technique presented by Motivate DesignThe What If Technique presented by Motivate Design
The What If Technique presented by Motivate Design
 
What Would Steve Do? 10 Lessons from the World's Most Captivating Presenters
What Would Steve Do? 10 Lessons from the World's Most Captivating PresentersWhat Would Steve Do? 10 Lessons from the World's Most Captivating Presenters
What Would Steve Do? 10 Lessons from the World's Most Captivating Presenters
 
How Google Works
How Google WorksHow Google Works
How Google Works
 

Similar to Не бойся, это всего лишь данные... просто их много

Ускорение сайта на стороне клиента
Ускорение сайта на стороне клиентаУскорение сайта на стороне клиента
Ускорение сайта на стороне клиента
yulia_k
 
Lobanov_Cloud-Comput..
Lobanov_Cloud-Comput..Lobanov_Cloud-Comput..
Lobanov_Cloud-Comput..
webhostingguy
 
Android: Как написать приложение, которое не тормозит
Android: Как  написать приложение, которое не тормозитAndroid: Как  написать приложение, которое не тормозит
Android: Как написать приложение, которое не тормозит
Elena Kotina
 
Эффективные Алгоритмы Поиска Подобных Объектов Для Терабайтов Данных
Эффективные Алгоритмы Поиска Подобных Объектов Для Терабайтов ДанныхЭффективные Алгоритмы Поиска Подобных Объектов Для Терабайтов Данных
Эффективные Алгоритмы Поиска Подобных Объектов Для Терабайтов Данных
SPb_Data_Science
 
Как мы храним 75 млн пользователей (Денис Бирюков)
Как мы храним 75 млн пользователей  (Денис Бирюков)Как мы храним 75 млн пользователей  (Денис Бирюков)
Как мы храним 75 млн пользователей (Денис Бирюков)
Ontico
 
04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''
DneprCiklumEvents
 
04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''
DneprCiklumEvents
 

Similar to Не бойся, это всего лишь данные... просто их много (20)

Ускорение сайта на стороне клиента
Ускорение сайта на стороне клиентаУскорение сайта на стороне клиента
Ускорение сайта на стороне клиента
 
Ускорение сайта на стороне клиента
Ускорение сайта на стороне клиентаУскорение сайта на стороне клиента
Ускорение сайта на стороне клиента
 
Евгений Лазин. Неизменяемая структура данных HAMT для создания БД в памяти
Евгений Лазин. Неизменяемая структура данных HAMT для создания БД в памятиЕвгений Лазин. Неизменяемая структура данных HAMT для создания БД в памяти
Евгений Лазин. Неизменяемая структура данных HAMT для создания БД в памяти
 
Purely practical data structures
Purely practical data structuresPurely practical data structures
Purely practical data structures
 
Lobanov_Cloud-Comput..
Lobanov_Cloud-Comput..Lobanov_Cloud-Comput..
Lobanov_Cloud-Comput..
 
Android: Как написать приложение, которое не тормозит
Android: Как  написать приложение, которое не тормозитAndroid: Как  написать приложение, которое не тормозит
Android: Как написать приложение, которое не тормозит
 
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ LibraryИнтервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
 
Ускорение client-side для мобильных устройств. Failoverconf 2014
Ускорение client-side для мобильных устройств. Failoverconf 2014Ускорение client-side для мобильных устройств. Failoverconf 2014
Ускорение client-side для мобильных устройств. Failoverconf 2014
 
Алексей Андросов "Архитектура фронтенда Яндекс.Почты"
Алексей Андросов "Архитектура фронтенда Яндекс.Почты"Алексей Андросов "Архитектура фронтенда Яндекс.Почты"
Алексей Андросов "Архитектура фронтенда Яндекс.Почты"
 
Правильная организация клиент-карточного взаимодействия — Антон Корзунов
Правильная организация клиент-карточного взаимодействия — Антон КорзуновПравильная организация клиент-карточного взаимодействия — Антон Корзунов
Правильная организация клиент-карточного взаимодействия — Антон Корзунов
 
Developing highload servers with Java
Developing highload servers with JavaDeveloping highload servers with Java
Developing highload servers with Java
 
Эффективные Алгоритмы Поиска Подобных Объектов Для Терабайтов Данных
Эффективные Алгоритмы Поиска Подобных Объектов Для Терабайтов ДанныхЭффективные Алгоритмы Поиска Подобных Объектов Для Терабайтов Данных
Эффективные Алгоритмы Поиска Подобных Объектов Для Терабайтов Данных
 
Alexander Serbul ITEM 2018
Alexander Serbul ITEM 2018Alexander Serbul ITEM 2018
Alexander Serbul ITEM 2018
 
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
 
Как мы храним 75 млн пользователей (Денис Бирюков)
Как мы храним 75 млн пользователей  (Денис Бирюков)Как мы храним 75 млн пользователей  (Денис Бирюков)
Как мы храним 75 млн пользователей (Денис Бирюков)
 
04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''
 
04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''
 
ObjectManager, или как работать с большим количеством объектов на карте, Мари...
ObjectManager, или как работать с большим количеством объектов на карте, Мари...ObjectManager, или как работать с большим количеством объектов на карте, Мари...
ObjectManager, или как работать с большим количеством объектов на карте, Мари...
 
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-Studio
 

Не бойся, это всего лишь данные... просто их много