Рабочая задача: карта + объекты

Ничего экстраординарного, просто задача по работе попалась.

Дана карта местности (картинка), на неё нанесено большое количество объектов, несколько тысяч. В каждый объект можно тыцнуть мышкой, карта большая, её надо позволять «таскать» мышкой.

Текущее решение тормозит, а надо сделать так, чтобы не тормозило.

У меня была гипотеза, что если нарисовать всё это дело на большущем CANVAS, выходящем за пределы экрана и позволить его таскать мышкой, то тормозит не будет.

В общем-то, похоже, подтвердилось. Я взял CANVAS 2000×2000 точек, накидал на него 4000 квадратов случайного цвета и в случайных координатах, CANVAS положил в DIV, растянутый 100% на 100% и скрыл у него скроллеры.

Муляж карты (38.97КиБ)

При клике происходит поиск объекта по списку (безо всякой оптимизации пока), если объект найден, то выводит информацию по цвету, если зажать кнопку мыши, срабатывает флаг «пользователь желает тащить», если пошевелить в этот момент мышью, координаты CANVAS будут меняться вслед за мышью.

Вроде не тормозит, хороший способ делать карты. Делюсь, вдруг пригодится кому.

35 комментариев

Комьют — время для чтения

Илья переживает за «комьют» (commute).

«Комьют», согласно словарю, это время на езду из пригорода на работу в город.

По-русски, вероятно, это называется «дорога». У нас в офисе, где много иногородних, мы иногда спрашиваем друг друга «сколько ты тратишь на дорогу», иногда «за сколько добираешься». По контексту понятно, что «тратишь» — это время, а «дорога» ведёт из дома на работу и обратно.

Всего на дорогу трачу меньше двух часов. В лучшем случае, в одну сторону, от двери до двери дорога занимает 40 минут.

Илья сокрушается, что время это тратится бесполезно. Правильно сокрушается, в общем-то, меня изредка раздражает необходимость тратить время на дорогу в офис, но квартира, где я живу пока слабо приспособлена для длительной работы. Иногда мой день начинается с чая, а потом я около часа-двух спокойно работаю дома, после чего еду в офис, а там уже встречи, разговоры и прочее.

Сегодня, например, я с утра эксперементировал с SSE (Server Side Events), чтобы решить, пригодны ли они в одном внутреннем проекта «Яндекса», где критична быстрая реакция сервиса или нет.

А сейчас я собираюсь на работу.

Кстати, для меня «комьют» бесполезной тратой времени не является. У Илья есть новая машина, а у меня есть старое метро. Метро — единственное место, где я читаю книги. Редко бывает, что я читаю книгу ещё и дома. Бо́льшую часть того, что я прочитал, я прочитал в общественном транспорте. Если вдруг законы физики изменятся и заработает нуль-траснпортировка или, наконец, интерфейс для работы с компьютером внедрят прямо в мозг, мне придётся выделять специальное время для чтения.

Мне всё время работать дома просто не нравится, мне проще, когда я вижу человека «в объёме». Илья знает как я неохотно пользовался скайпом раньше и как охотно встречаюсь вживую, если есть возможность.

При этом необходимости постоянно торчать в офисе у меня нет. Возможно, я вообще не приходил бы в офис, если бы вместо одной из стен комнаты у меня был бы большой видеоэкран. Я бы поставил к нему стол, на стол ноутбук. Когда мне нужно было бы «выйти в офис», я бы одевался, садился за стол, открывал ноутбук, а большой экран отображал бы виртуальный офис с объёмом (в 3D), где за своими столами, не выходя из дома, сидели мои коллеги.

Можно даже «сесть поближе», достаточно изменить виртуальную планировку, так, что человек окажется, вроде как, в расстоянии вытянутой руки. Мечты, да.

А пока поеду я в офис, выберу какую из трёх книг я всё-таки хочу дочитать и поеду.

36 комментариев