SlideShare a Scribd company logo
1 of 58
Download to read offline
карты 
Что АПИ карт забыли 
на сервере? 
Антон Корзунов, фронтенд разработчик 
Я.Субботник в Екатеринбурге, 20.09.2014
Что такое карты? 
И что такое АПИ? 
3
Мы рисуем карты 
4
Карты. Карты. Карты. 
5
Постановка проблемы 
1. На Вашем сайте → Вы хозяин. 
1.1 API показывает только то, что ему дали. 
1.2. API ничего не делает без команды. 
! 
Это ваши данные, это ваши сервера их 
отдают, и это вы решаете что отдавать. 
6
DB → Backend → Frontend 
7
Всё новое - это хорошо забытое старое 
Теория: 
Codefest, 2012 
Dump-it, 2012 
Стачка!, 2014 
Субботник в Минске 
Субботник к Екб(ага) 
8
9
Так и вышло 
Низкая культура работы с данными. 
При росте обьемом задачу решают «грубой 
силой». 
«Тут так принято», и «Все изобретено до нас» 
10
Загрузка по видимым границам 
11
Отдача части данных 
Все данные 
передавать не только 
нельзя, 
но и не нужно. 
12
Тут так принято 
SELECT * FROM bigTable 
WHERE x,y IN ${visibleBounds} 
LIMIT ${someLimit} 
! 
! 
SELECT * FROM bigTable 
WHERE x,y IN ${visibleBounds} 
and ID NOT IN ${selectedBefore} 
ORDER BY priority 
LIMIT ${someLimit} 
13
WHERE(2D) vs ORDER(1D) 
14
Fullmetal Alchem1is5t
И вроде бы все окей… 
16 
http://instagram.com/fevrony
Fullmetal Alchem11i7s7t
Fullmetal Alchem1is8t 
Пусто? 
18
Fullmetal Alchem1is9t 
Нет, не пусто 
19
ORDER BY LIMIT 50 
Потому что нельзя передать 100500 точек. 
От малейшего сдвига выборка данных 
может измениться. 
Порядок данных не гарантирован. 
«Прыгает и скачет» 
Никого не тревожит 
! 
Но это - ЦВЕТОЧКИ 
20
Fullmetal Alchem22i1s1t
Fullmetal Alchem22i2s2t
Fullmetal Alchem22i3s3t
DB → Backend → Frontend 
24
DB ⇏ Backend ⇏ Frontend 
25
PS: А какой у вас DAU? А RPS? 
26
Fullmetal Alchem2is7t
Иcтория 
«Гуглякартим по умному» - http://habrahabr.ru/ 
post/38408/ (29.08.08) 
«Я разрежу тебя на тайлы» - http:// 
habrahabr.ru/post/87894/ (17.03.2010) 
28
Тайлы придумал… 
тут - 17 тайлов 
29
Тайлы придумал… 
Тут - 25 тайлов 
Но только 8 новых. 
30
Активные области! 
31
Тайлы 
Основа карты: 
1. Квадратная область 256x256 
2. Каждый тайл «делится» на 4 
3. Это образует пирамиду 
PS: Тайлов примерно 2^20 
32
«Quadcode» 
http://msdn.microsoft.com/en-us/library/bb259689.aspx 
33
ObjectManager 
Новая сущность в API 2.1 
Полностью управляет обьектами на карте. 
Умеет кластеризовать, скрывать не видимое, 
фильтровать, играть в покер, радовать 
девушек. 
Питается JSON 
Не создает геообьекты 
Fullmetal Alchemist 35
LoadingObjectManager 
ObjectManager + Механиз загрузки 
1. Производит «оптимальную» загрузку 
данных с сервера, их обработку и показ. 
2. Обеспечивает связность «по пирамиде». 
3. Кластеризация на клиенте и все такое. 
Fullmetal Alchemist 36
RemoteObjectManager 
ObjectManager + Механиз загрузки 
1. Производит «оптимальную» загрузку 
данных с сервера, их обработку и показ. 
2. Без «связи» между зумами. 
3. Поддерживает серверную кластеризацию. 
Fullmetal Alchemist 37
Просто и удобно 
urlTemplate + опции => запросы 
%b => BoundingBox, в геокоординатах 
%c => %x,%y,%z - тайловые координаты 
var remoteObjectManager = new 
ymaps.RemoteObjectManager(‘http://localhost:1234/?bbox= 
%b&tile=%c&zoom=%z', {! 
//splitRequests: true,! 
//paddingTemplate: 'managerResponse_%c',! 
});! 
map.geoObjects.add(remoteObjectManager); 
38
ВАЖНО! 
1. В режиме splitRequest запросы 
склеиваются. 
2. Земля круглая. 
3. На основе геокоординат bbox нельзя 
произвести декомпозицию на тайлы. 
4. Используйте тайловые координаты 
PS: Но только те, кому это важно 
39 
(для тех кому важно)
Frontend → Backend → Frontend 
Теперь картинка ОК. 
40
ВАЖНО! 
Красота и Ляпота (рецепт) 
1. Меняем одну «детальку» на клиенте 
2. Немного хачим ручку на сервере(geoJSON) 
3. PROFIT!(без «…..») 
41 
(на самом деле важно)
Remote Object Manager (Server) 
https://github.com/ 
dimik/ymaps/tree/ 
master/remote-object-manager- 
server 
! 
https://github.com/ 
yandex 
42
Бэкенд - доволен 
Fullmetal Alchemis4t3
Ложки дёгтя 
44 
LoadingObjectManager RemoteObjectManager 
Не поддерживает какие 
либо ограничения в 
отдаваемых данных. 
! 
Вы обязаны передать ВСЕ. 
! 
Одновременно нет 
поддержики кластеров. 
Каждый зум - новый 
запрос 
! 
Даже если данных нет - 
новый запрос. 
!
И опять эта картинка! 
45 
к.ф. «Начало»
Весь покрытый метками? 
*По данным TileMill 
46
Очень Квадро 
github.com/theKashey/quadLoader 
47
Remote Object Manager (Server) 
Просто красивая 
картинка. 
Была. 
48
Но не всегда…. 
49 http://dimik.github.io/ymaps/examples/2.1/remote-object-manager/
Серверная 
кластеризация 
Hadoop, k-means, и фермы серверов. 
Другие map-reduce алгоритмы. 
Reduce? Round? Fake? Grid! 
Вам шашечки или ехать? 
Fullmetal Alchemist 50
Серверная 
кластеризация. v1 
SELECT Id, long, lat, 
FROM bigTable 
WHERE latLon in bounds 
! 
Далее: смотрим на запрашиваемый ZOOM и производим GRID 
кластеризацию данных. 
! 
Плюсы: Это позволяет сильно уменьшить количество передаваемых на 
клиент данных, и при этом передать «все» 
! 
Минусы: АДЪ между сервером и БД 
Fullmetal Alchemist 51
Серверная 
кластеризация. 2 
SELECT MIN(id) AS minId, COUNT(id) AS count, AVG(long) AS long, 
AVG(lat) AS lat, 
FLOOR( long/gridFactor) * gridFactor as gridX, 
FLOOR( lat/gridFactor) * gridFactor AS gridY 
FROM bigTable 
WHERE latLon in bounds 
GROUP BY gridX,gridY 
! 
Где: dLong, dLat - размеры анализируемой области, gridFactor - на 
сколько частей бить. 
! 
Далее: данные готовы к передаче 
! 
Плюсы: Это позволяет сильно уменьшить количество передаваемых 
данных, и при этом передать «все». 
! 
Минусы: На базу данные ложится задача «считать», нет возможности 
эффективно использовать индексы. 
Fullmetal Alchemist 52
Серверная 
кластеризация. 3 
SELECT MIN(id) AS minId, COUNT(id) AS count, AVG(long) AS long, 
AVG(lat) AS lat 
FROM wiki 
WHERE QuadCode between $Q1 and $Q2. 
GROUP BY (QuadCode & $free) 
! 
Где: 
free - маска «вариативности» хвоста. 
free = 0xFFFFFFFF ^ (($Q2^$Q1)>>(2*gridFactor)); 
Q1,Q2 - диапазоны поиска QuadKey 
! 
Пример: 
! 
QuadCode: 320132321(base4), 9 знаков из 16(uint32) 
Q1 : 320132321|0000000 
Q2 : 320132321|3333333 
free:333333333|3330000 (+3 зума, кластер 32х32) 
! 
Плюсы: Это позволяет сильно уменьшить количество передаваемых 
данных, и при этом передать «все». 
! 
Минусы: Ну с индексами «не всегда», но они есть 
PS: Надо рассчитать QuadCode, но это не в рантайме. 
Fullmetal Alchemist 53
Спасибо за внимание!
SELECT lat, lng, count(*) FROM `wikipedia` GROUP BY quadCode&0xFFFF0000 
SELECT quadCode, count(*) FROM `wikipedia` GROUP BY quadCode&0xFFFF0000 
http://www.esosedi.ru/about/heatmap/index.html 55
Какое решение выбрать? 
Немного 
данных 
Специально ничего делать 
не нужно. API справится сам. 
Много 
данных 
Очень много, 
и хитро 
Используйте Loading или 
RemoteObjectManager 
Активные области. 
И думайте. 
Вот вам лопата… 
56
Так что в итоге 
Я надеюсь теперь понятно, что АПИ 
Яндекс карт забыли на сервере. 
И почему вам об этом забывать не надо. 
57
Антон Корзунов 
Разработчик API Карт 
theKashey 
@thekashey 
kashey@yandex-team.ru 
Спасибо!

More Related Content

What's hot

Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...
Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...
Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...solit
 
Павел Сушин «Асинхронное программирование на С++: callbacks, futures, fibers»
Павел Сушин «Асинхронное программирование на С++: callbacks, futures, fibers»Павел Сушин «Асинхронное программирование на С++: callbacks, futures, fibers»
Павел Сушин «Асинхронное программирование на С++: callbacks, futures, fibers»Platonov Sergey
 
Функционально декларативный дизайн на C++
Функционально декларативный дизайн на C++Функционально декларативный дизайн на C++
Функционально декларативный дизайн на C++Alexander Granin
 
Максим Хижинский Lock-free maps
Максим Хижинский Lock-free mapsМаксим Хижинский Lock-free maps
Максим Хижинский Lock-free mapsPlatonov Sergey
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonovComputer Science Club
 
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“Platonov Sergey
 
Об особенностях использования значимых типов в .NET
Об особенностях использования значимых типов в .NETОб особенностях использования значимых типов в .NET
Об особенностях использования значимых типов в .NETAndrey Akinshin
 
Сверхоптимизация кода на Python
Сверхоптимизация кода на PythonСверхоптимизация кода на Python
Сверхоптимизация кода на Pythonru_Parallels
 
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Yandex
 
GAE - плюсы/минусы/подводные камни
GAE - плюсы/минусы/подводные камниGAE - плюсы/минусы/подводные камни
GAE - плюсы/минусы/подводные камниYehor Nazarkin
 
Игорь Кудрин, «Используем неизменяемые данные и создаем качественный код»
Игорь Кудрин, «Используем неизменяемые данные и создаем качественный код»Игорь Кудрин, «Используем неизменяемые данные и создаем качественный код»
Игорь Кудрин, «Используем неизменяемые данные и создаем качественный код»Platonov Sergey
 
Михаил Давыдов — JavaScript: Асинхронность
Михаил Давыдов — JavaScript: АсинхронностьМихаил Давыдов — JavaScript: Асинхронность
Михаил Давыдов — JavaScript: АсинхронностьYandex
 
Михаил Матросов, “С++ без new и delete”
Михаил Матросов, “С++ без new и delete”Михаил Матросов, “С++ без new и delete”
Михаил Матросов, “С++ без new и delete”Platonov Sergey
 
Использование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработкиИспользование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработкиvictor-yastrebov
 
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)Ontico
 
Оптимизация производительности Python
Оптимизация производительности PythonОптимизация производительности Python
Оптимизация производительности PythonPyNSK
 
Магия в Python: Дескрипторы. Что это?
Магия в Python: Дескрипторы. Что это?Магия в Python: Дескрипторы. Что это?
Магия в Python: Дескрипторы. Что это?PyNSK
 
Распространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложенийРаспространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложенийMikhail Shcherbakov
 

What's hot (19)

Javascript
JavascriptJavascript
Javascript
 
Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...
Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...
Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...
 
Павел Сушин «Асинхронное программирование на С++: callbacks, futures, fibers»
Павел Сушин «Асинхронное программирование на С++: callbacks, futures, fibers»Павел Сушин «Асинхронное программирование на С++: callbacks, futures, fibers»
Павел Сушин «Асинхронное программирование на С++: callbacks, futures, fibers»
 
Функционально декларативный дизайн на C++
Функционально декларативный дизайн на C++Функционально декларативный дизайн на C++
Функционально декларативный дизайн на C++
 
Максим Хижинский Lock-free maps
Максим Хижинский Lock-free mapsМаксим Хижинский Lock-free maps
Максим Хижинский Lock-free maps
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov
 
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“
 
Об особенностях использования значимых типов в .NET
Об особенностях использования значимых типов в .NETОб особенностях использования значимых типов в .NET
Об особенностях использования значимых типов в .NET
 
Сверхоптимизация кода на Python
Сверхоптимизация кода на PythonСверхоптимизация кода на Python
Сверхоптимизация кода на Python
 
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
 
GAE - плюсы/минусы/подводные камни
GAE - плюсы/минусы/подводные камниGAE - плюсы/минусы/подводные камни
GAE - плюсы/минусы/подводные камни
 
Игорь Кудрин, «Используем неизменяемые данные и создаем качественный код»
Игорь Кудрин, «Используем неизменяемые данные и создаем качественный код»Игорь Кудрин, «Используем неизменяемые данные и создаем качественный код»
Игорь Кудрин, «Используем неизменяемые данные и создаем качественный код»
 
Михаил Давыдов — JavaScript: Асинхронность
Михаил Давыдов — JavaScript: АсинхронностьМихаил Давыдов — JavaScript: Асинхронность
Михаил Давыдов — JavaScript: Асинхронность
 
Михаил Матросов, “С++ без new и delete”
Михаил Матросов, “С++ без new и delete”Михаил Матросов, “С++ без new и delete”
Михаил Матросов, “С++ без new и delete”
 
Использование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработкиИспользование юнит-тестов для повышения качества разработки
Использование юнит-тестов для повышения качества разработки
 
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)
 
Оптимизация производительности Python
Оптимизация производительности PythonОптимизация производительности Python
Оптимизация производительности Python
 
Магия в Python: Дескрипторы. Что это?
Магия в Python: Дескрипторы. Что это?Магия в Python: Дескрипторы. Что это?
Магия в Python: Дескрипторы. Что это?
 
Распространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложенийРаспространённые ошибки оценки производительности .NET-приложений
Распространённые ошибки оценки производительности .NET-приложений
 

Similar to Правильная организация клиент-карточного взаимодействия — Антон Корзунов

Android: Как написать приложение, которое не тормозит
Android: Как  написать приложение, которое не тормозитAndroid: Как  написать приложение, которое не тормозит
Android: Как написать приложение, которое не тормозитElena Kotina
 
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...phpdevby
 
Не бойся, это всего лишь данные... просто их много
Не бойся, это всего лишь данные... просто их многоНе бойся, это всего лишь данные... просто их много
Не бойся, это всего лишь данные... просто их многоRoman Dvornov
 
2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все
2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все
2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется всеОмские ИТ-субботники
 
Продолжаем говорить о микрооптимизациях .NET-приложений
Продолжаем говорить о микрооптимизациях .NET-приложенийПродолжаем говорить о микрооптимизациях .NET-приложений
Продолжаем говорить о микрооптимизациях .NET-приложенийAndrey Akinshin
 
Внедрение параллельного рендеринга в игровой движок
Внедрение параллельного рендеринга в игровой движокВнедрение параллельного рендеринга в игровой движок
Внедрение параллельного рендеринга в игровой движокRoman_Lut
 
Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...
Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...
Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...Dev2Dev
 
Sphinx. настройка, эксплуатация
Sphinx. настройка, эксплуатацияSphinx. настройка, эксплуатация
Sphinx. настройка, эксплуатацияandreyborue
 
Антон Корзунов «Как разместить тысячи объектов на карте без увеличения нагруз...
Антон Корзунов «Как разместить тысячи объектов на карте без увеличения нагруз...Антон Корзунов «Как разместить тысячи объектов на карте без увеличения нагруз...
Антон Корзунов «Как разместить тысячи объектов на карте без увеличения нагруз...Yandex
 
Ренессанс графики на клиенте
Ренессанс графики на клиентеРенессанс графики на клиенте
Ренессанс графики на клиентеAnton Korzunov
 
Дмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решения
Дмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решенияДмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решения
Дмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решенияFProg
 
Пора учить WebGL
Пора учить WebGLПора учить WebGL
Пора учить WebGLAnton Korzunov
 
Олег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоОлег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоCodeFest
 
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"Yandex
 
TК°Conf. Ещё не поздно учить WebGL. Антон Корзунов.
TК°Conf. Ещё не поздно учить WebGL. Антон Корзунов.TК°Conf. Ещё не поздно учить WebGL. Антон Корзунов.
TК°Conf. Ещё не поздно учить WebGL. Антон Корзунов.TKConf
 
ECMAscript harmony
ECMAscript harmonyECMAscript harmony
ECMAscript harmonyFDConf
 
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Yandex
 
Михаил Щербаков "WinDbg сотоварищи"
Михаил Щербаков "WinDbg сотоварищи"Михаил Щербаков "WinDbg сотоварищи"
Михаил Щербаков "WinDbg сотоварищи"Mikhail Shcherbakov
 
Проектирование архитектуры приложений
Проектирование архитектуры приложенийПроектирование архитектуры приложений
Проектирование архитектуры приложенийAndrew Mayorov
 

Similar to Правильная организация клиент-карточного взаимодействия — Антон Корзунов (20)

Android: Как написать приложение, которое не тормозит
Android: Как  написать приложение, которое не тормозитAndroid: Как  написать приложение, которое не тормозит
Android: Как написать приложение, которое не тормозит
 
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
 
Не бойся, это всего лишь данные... просто их много
Не бойся, это всего лишь данные... просто их многоНе бойся, это всего лишь данные... просто их много
Не бойся, это всего лишь данные... просто их много
 
directx
directxdirectx
directx
 
2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все
2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все
2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все
 
Продолжаем говорить о микрооптимизациях .NET-приложений
Продолжаем говорить о микрооптимизациях .NET-приложенийПродолжаем говорить о микрооптимизациях .NET-приложений
Продолжаем говорить о микрооптимизациях .NET-приложений
 
Внедрение параллельного рендеринга в игровой движок
Внедрение параллельного рендеринга в игровой движокВнедрение параллельного рендеринга в игровой движок
Внедрение параллельного рендеринга в игровой движок
 
Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...
Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...
Применение в Enterprise-приложении графовой базы данных Neo4j - Антон Максимо...
 
Sphinx. настройка, эксплуатация
Sphinx. настройка, эксплуатацияSphinx. настройка, эксплуатация
Sphinx. настройка, эксплуатация
 
Антон Корзунов «Как разместить тысячи объектов на карте без увеличения нагруз...
Антон Корзунов «Как разместить тысячи объектов на карте без увеличения нагруз...Антон Корзунов «Как разместить тысячи объектов на карте без увеличения нагруз...
Антон Корзунов «Как разместить тысячи объектов на карте без увеличения нагруз...
 
Ренессанс графики на клиенте
Ренессанс графики на клиентеРенессанс графики на клиенте
Ренессанс графики на клиенте
 
Дмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решения
Дмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решенияДмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решения
Дмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решения
 
Пора учить WebGL
Пора учить WebGLПора учить WebGL
Пора учить WebGL
 
Олег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоОлег Бартунов и Иван Панченко
Олег Бартунов и Иван Панченко
 
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
 
TК°Conf. Ещё не поздно учить WebGL. Антон Корзунов.
TК°Conf. Ещё не поздно учить WebGL. Антон Корзунов.TК°Conf. Ещё не поздно учить WebGL. Антон Корзунов.
TК°Conf. Ещё не поздно учить WebGL. Антон Корзунов.
 
ECMAscript harmony
ECMAscript harmonyECMAscript harmony
ECMAscript harmony
 
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"
 
Михаил Щербаков "WinDbg сотоварищи"
Михаил Щербаков "WinDbg сотоварищи"Михаил Щербаков "WinDbg сотоварищи"
Михаил Щербаков "WinDbg сотоварищи"
 
Проектирование архитектуры приложений
Проектирование архитектуры приложенийПроектирование архитектуры приложений
Проектирование архитектуры приложений
 

More from Yandex

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksYandex
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Yandex
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаYandex
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаYandex
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Yandex
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Yandex
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Yandex
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Yandex
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Yandex
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Yandex
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Yandex
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Yandex
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровYandex
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Yandex
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Yandex
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Yandex
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Yandex
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Yandex
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Yandex
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Yandex
 

More from Yandex (20)

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of Tanks
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
 

Правильная организация клиент-карточного взаимодействия — Антон Корзунов

  • 1.
  • 2. карты Что АПИ карт забыли на сервере? Антон Корзунов, фронтенд разработчик Я.Субботник в Екатеринбурге, 20.09.2014
  • 3. Что такое карты? И что такое АПИ? 3
  • 6. Постановка проблемы 1. На Вашем сайте → Вы хозяин. 1.1 API показывает только то, что ему дали. 1.2. API ничего не делает без команды. ! Это ваши данные, это ваши сервера их отдают, и это вы решаете что отдавать. 6
  • 7. DB → Backend → Frontend 7
  • 8. Всё новое - это хорошо забытое старое Теория: Codefest, 2012 Dump-it, 2012 Стачка!, 2014 Субботник в Минске Субботник к Екб(ага) 8
  • 9. 9
  • 10. Так и вышло Низкая культура работы с данными. При росте обьемом задачу решают «грубой силой». «Тут так принято», и «Все изобретено до нас» 10
  • 12. Отдача части данных Все данные передавать не только нельзя, но и не нужно. 12
  • 13. Тут так принято SELECT * FROM bigTable WHERE x,y IN ${visibleBounds} LIMIT ${someLimit} ! ! SELECT * FROM bigTable WHERE x,y IN ${visibleBounds} and ID NOT IN ${selectedBefore} ORDER BY priority LIMIT ${someLimit} 13
  • 16. И вроде бы все окей… 16 http://instagram.com/fevrony
  • 19. Fullmetal Alchem1is9t Нет, не пусто 19
  • 20. ORDER BY LIMIT 50 Потому что нельзя передать 100500 точек. От малейшего сдвига выборка данных может измениться. Порядок данных не гарантирован. «Прыгает и скачет» Никого не тревожит ! Но это - ЦВЕТОЧКИ 20
  • 24. DB → Backend → Frontend 24
  • 25. DB ⇏ Backend ⇏ Frontend 25
  • 26. PS: А какой у вас DAU? А RPS? 26
  • 28. Иcтория «Гуглякартим по умному» - http://habrahabr.ru/ post/38408/ (29.08.08) «Я разрежу тебя на тайлы» - http:// habrahabr.ru/post/87894/ (17.03.2010) 28
  • 30. Тайлы придумал… Тут - 25 тайлов Но только 8 новых. 30
  • 32. Тайлы Основа карты: 1. Квадратная область 256x256 2. Каждый тайл «делится» на 4 3. Это образует пирамиду PS: Тайлов примерно 2^20 32
  • 34.
  • 35. ObjectManager Новая сущность в API 2.1 Полностью управляет обьектами на карте. Умеет кластеризовать, скрывать не видимое, фильтровать, играть в покер, радовать девушек. Питается JSON Не создает геообьекты Fullmetal Alchemist 35
  • 36. LoadingObjectManager ObjectManager + Механиз загрузки 1. Производит «оптимальную» загрузку данных с сервера, их обработку и показ. 2. Обеспечивает связность «по пирамиде». 3. Кластеризация на клиенте и все такое. Fullmetal Alchemist 36
  • 37. RemoteObjectManager ObjectManager + Механиз загрузки 1. Производит «оптимальную» загрузку данных с сервера, их обработку и показ. 2. Без «связи» между зумами. 3. Поддерживает серверную кластеризацию. Fullmetal Alchemist 37
  • 38. Просто и удобно urlTemplate + опции => запросы %b => BoundingBox, в геокоординатах %c => %x,%y,%z - тайловые координаты var remoteObjectManager = new ymaps.RemoteObjectManager(‘http://localhost:1234/?bbox= %b&tile=%c&zoom=%z', {! //splitRequests: true,! //paddingTemplate: 'managerResponse_%c',! });! map.geoObjects.add(remoteObjectManager); 38
  • 39. ВАЖНО! 1. В режиме splitRequest запросы склеиваются. 2. Земля круглая. 3. На основе геокоординат bbox нельзя произвести декомпозицию на тайлы. 4. Используйте тайловые координаты PS: Но только те, кому это важно 39 (для тех кому важно)
  • 40. Frontend → Backend → Frontend Теперь картинка ОК. 40
  • 41. ВАЖНО! Красота и Ляпота (рецепт) 1. Меняем одну «детальку» на клиенте 2. Немного хачим ручку на сервере(geoJSON) 3. PROFIT!(без «…..») 41 (на самом деле важно)
  • 42. Remote Object Manager (Server) https://github.com/ dimik/ymaps/tree/ master/remote-object-manager- server ! https://github.com/ yandex 42
  • 43. Бэкенд - доволен Fullmetal Alchemis4t3
  • 44. Ложки дёгтя 44 LoadingObjectManager RemoteObjectManager Не поддерживает какие либо ограничения в отдаваемых данных. ! Вы обязаны передать ВСЕ. ! Одновременно нет поддержики кластеров. Каждый зум - новый запрос ! Даже если данных нет - новый запрос. !
  • 45. И опять эта картинка! 45 к.ф. «Начало»
  • 46. Весь покрытый метками? *По данным TileMill 46
  • 48. Remote Object Manager (Server) Просто красивая картинка. Была. 48
  • 49. Но не всегда…. 49 http://dimik.github.io/ymaps/examples/2.1/remote-object-manager/
  • 50. Серверная кластеризация Hadoop, k-means, и фермы серверов. Другие map-reduce алгоритмы. Reduce? Round? Fake? Grid! Вам шашечки или ехать? Fullmetal Alchemist 50
  • 51. Серверная кластеризация. v1 SELECT Id, long, lat, FROM bigTable WHERE latLon in bounds ! Далее: смотрим на запрашиваемый ZOOM и производим GRID кластеризацию данных. ! Плюсы: Это позволяет сильно уменьшить количество передаваемых на клиент данных, и при этом передать «все» ! Минусы: АДЪ между сервером и БД Fullmetal Alchemist 51
  • 52. Серверная кластеризация. 2 SELECT MIN(id) AS minId, COUNT(id) AS count, AVG(long) AS long, AVG(lat) AS lat, FLOOR( long/gridFactor) * gridFactor as gridX, FLOOR( lat/gridFactor) * gridFactor AS gridY FROM bigTable WHERE latLon in bounds GROUP BY gridX,gridY ! Где: dLong, dLat - размеры анализируемой области, gridFactor - на сколько частей бить. ! Далее: данные готовы к передаче ! Плюсы: Это позволяет сильно уменьшить количество передаваемых данных, и при этом передать «все». ! Минусы: На базу данные ложится задача «считать», нет возможности эффективно использовать индексы. Fullmetal Alchemist 52
  • 53. Серверная кластеризация. 3 SELECT MIN(id) AS minId, COUNT(id) AS count, AVG(long) AS long, AVG(lat) AS lat FROM wiki WHERE QuadCode between $Q1 and $Q2. GROUP BY (QuadCode & $free) ! Где: free - маска «вариативности» хвоста. free = 0xFFFFFFFF ^ (($Q2^$Q1)>>(2*gridFactor)); Q1,Q2 - диапазоны поиска QuadKey ! Пример: ! QuadCode: 320132321(base4), 9 знаков из 16(uint32) Q1 : 320132321|0000000 Q2 : 320132321|3333333 free:333333333|3330000 (+3 зума, кластер 32х32) ! Плюсы: Это позволяет сильно уменьшить количество передаваемых данных, и при этом передать «все». ! Минусы: Ну с индексами «не всегда», но они есть PS: Надо рассчитать QuadCode, но это не в рантайме. Fullmetal Alchemist 53
  • 55. SELECT lat, lng, count(*) FROM `wikipedia` GROUP BY quadCode&0xFFFF0000 SELECT quadCode, count(*) FROM `wikipedia` GROUP BY quadCode&0xFFFF0000 http://www.esosedi.ru/about/heatmap/index.html 55
  • 56. Какое решение выбрать? Немного данных Специально ничего делать не нужно. API справится сам. Много данных Очень много, и хитро Используйте Loading или RemoteObjectManager Активные области. И думайте. Вот вам лопата… 56
  • 57. Так что в итоге Я надеюсь теперь понятно, что АПИ Яндекс карт забыли на сервере. И почему вам об этом забывать не надо. 57
  • 58. Антон Корзунов Разработчик API Карт theKashey @thekashey kashey@yandex-team.ru Спасибо!