5

Ситуация: Слишком много вещей работает в основном потоке страницы, создавая карту 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 в контексте веб-работника, а не в контексте класс его в.

+0

Возможно, вы сможете запросить информацию из основной темы, используя postMessage(). Передайте запрос вместе с функцией, которая может вернуть соответствующую строку JSON. https://developer.mozilla.org/en-US/docs/Web/Guide/Performance/Using_web_workers – daekano

+0

Что бы я хотел запросить, чтобы importScript() не смог предоставить в этом случае? – TechImp

+0

Просто выстрел в темноте здесь ... будет ли iPad не думать, что он разбился, если вы обновили часть DOM каждую секунду или около того? – TonyWilk

ответ

0

Снова это было осложнение слишком многих вещей, происходящих сразу. Объем был ограничен из-за использования -> а не =>, который расширяет область действия, чтобы позволить функции родительского класса.

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

Смежные вопросы