Ситуация: Слишком много вещей работает в основном потоке страницы, создавая карту google с оверлеями, представляющими территории ZIP, поступающие из данных переписи США, и, напр., Клиент попросил группировать территории в незаметные группы. Несмотря на отсутствие серьезных проблем на настольных компьютерах, мобильные устройства (iPad) решают, что поток занимает слишком много времени (не более 6 секунд после возвращения данных) и, следовательно, должен быть разбит.Использование объектов карты Google в веб-работнике?
Решение: Выгрузите функцию циклирования, чтобы собрать точки для каждой фигуры из каждой строки веб-работнику, который может работать так быстро или медленно, как позволяют ресурсы на мобильном устройстве. (Три для циклов, 1-й для выбора строки, 2-й для выбора столбца, 3-й для каждой точки в столбце. Время выполнения: значение 3-6 секунд для более 2000 + строк с многочисленными точками)
Улов: В чтобы это было правильно эффективно, точки должны быть сделаны в форме (многоугольник) внутри веб-рабочего. ОДНАКО, поскольку это объект google.maps.polygon, состоящий из объектов google.maps.latlng, он [веб-работник] должен иметь некоторое представление о том, что эти элементы входят в веб-рабочий. Веб-работники требуют, чтобы вы не использовали окно или DOM, поэтому он должен импортировать скрипт, и целью было передать только объект как кодированный JSON элемент. Код не работает при любой ссылке объектов google даже с importScript() из-за того, что эти элементы полагаются на элемент окна.
Дальнейшие осложнения: API Google является технически проприетарным. Код веб-приложения, для которого он предназначен, связан с NDA, поэтому можно задать заданные вопросы, но не копировать/вставлять весь код.
Решение/любые неопределенные идеи: ???
TLDR: необходимо получить доступ к объекту google.maps.latlng и создать новые экземпляры (минимально) внутри веб-рабочего. Веб-работник должен либо возвращать объекты, готовые для включения в объект google.maps.polygon, либо должен возвращать объект google.maps.polygon. Как я могу ссылаться на API карт google, если я не могу использовать метод импорта по умолчанию из-за проблемы, требующей объекта window?
UPDATE: С этого письма Ive удалось разгрузить основную часть работы хрюкать от основного потока на веб-работника позволяет ему анализировать с помощью данных асинхронно и присвоить данные на заказ LatLng объект.
Уловка теперь возвращает возвращаемые значения для запуска функции в соответствующем контексте, чтобы проверить, достаточно ли пользовательского latlng, чтобы google.maps.polygon работал над своей магией.
Выдержка из файла, который вызывает веб-работника и прослушивает его ответ (CoffeeScript)
@shapeWorker.onmessage= (event)->
console.log "--------------------TESTING---------------"
data=JSON.parse(event.data)
console.log data
@generateShapes(data.poly,data.center,data.zipNum)
По какой-то причине, ее пытаются оценить GenerateShapes в контексте веб-работника, а не в контексте класс его в.
Возможно, вы сможете запросить информацию из основной темы, используя postMessage(). Передайте запрос вместе с функцией, которая может вернуть соответствующую строку JSON. https://developer.mozilla.org/en-US/docs/Web/Guide/Performance/Using_web_workers – daekano
Что бы я хотел запросить, чтобы importScript() не смог предоставить в этом случае? – TechImp
Просто выстрел в темноте здесь ... будет ли iPad не думать, что он разбился, если вы обновили часть DOM каждую секунду или около того? – TonyWilk