|
|
|
Вопрос по JS, синхронизация локального массива с серверной информацией
|
|||
|---|---|---|---|
|
#18+
С JS я знаком постольку-поскольку, просьба поправить меня, если я где-то делаю неправильно. Есть внутренний сервис мониторинга оборудования (интранет). Мониторинг отображает состояние различных устройств, размещенных по разным адресам, состояние устройств обновляется раз в минуту (сервер опрашивает устройства раз в минуту). Состав (количество) устройств может меняться. Мониторинг осуществляет тот же сервер, на котором работает сайт, в браузере отображаются результаты опроса устройств. Теперь я решил прикрутить к мониторингу географическую карту. Я предполагаю сделать так. 1. На серверной стороне скрипт обрабатывает аргумент mode. 1.1. Если mode не задан, то скрипт возвращает html-код страницы-заглушки (с подключенными стилями, скриптами, но без данных). 1.2. Если mode=json, то скрипт производит опрос устройств, сохраняет данные опроса в массив и возвращает json_encode($data). 2. На клиентской стороне подключаются библиотеки Яндекс.Карт и jQuery. После загрузки страницы и затем каждую минуту запускается js-процедура, которая осуществляет POST-запрос с параметром mode=json, полученные данные присваивает глобальной переменной data и затем обновляет данные на карте. Примерно так: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 3. В процедуре ymap_refresh осуществляется отрисовка объектов на карте. Самый простой способ это сделать — удалить все объекты на карте и нарисовать все заново, на основе информации из data. Но мне кажется, что в этом случае в процессе перерисовки объекты будут мерцать. Поэтому я думаю сделать глобальный объект geo, в котором будут храниться гео-объекты, размещенные на карте (ассоциативный массив с теми же ключами, что и в массиве data). И процедура будет такая: 3.1. Перебираю весь массив geo, его ключи добавляю в массив all. 3.1. Перебираю массив data, нахожу соответствующий ему элемент массива geo. 3.1.1. Если нашел, значит объект уже добавлен на карту, обновляю его параметры. Удаляю из all элемент с ключом объекта. 3.1.2. Если не нашел, значит это новый объект. Добавляю его на карту с нужными параметрами. 3.2. Если в массиве all остались элементы, значит часть объектов была удалена с момента предыдущего запроса. Удаляю с карты все гео-объекты, ключи которых есть в all. Подскажите, все ли правильно? ________________________ Мы смотрим с оптимизмом... ...в оптический прицел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2014, 11:03 |
|
||
|
Вопрос по JS, синхронизация локального массива с серверной информацией
|
|||
|---|---|---|---|
|
#18+
Возникла такая идея, чтобы обойтись без лишнего обхода массива (для получения all). Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2014, 12:50 |
|
||
|
|

start [/forum/topic.php?fid=22&fpage=95&tid=1446876]: |
0ms |
get settings: |
5ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
36ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 316ms |

| 0 / 0 |
