Nano Hash - криптовалюты, майнинг, программирование

Загрузите ресурсы javascript с помощью AJAX в Webworker

Я создаю одностраничное приложение, небольшую структуру для себя. Я использую собственный Javascript, никаких внешних зависимостей, никакого jQuery, ничего.

Вот что я хотел бы сделать:

После первого посещения страницы мой фреймворк синхронно загружает только ресурсы, необходимые для отображения текущей страницы. После этого, когда все загружено для текущей страницы, я создаю новый Webworker. Я хочу, чтобы он загружал другие файлы .js, представляющие другие страницы сайта. Каждый из этих файлов содержит ровно один объект, представляющий страницу. Я хочу, чтобы этот объект был глобально доступен в основном потоке. В моей голове веб-воркер должен начать загружать зависимости одну за другой через вызовы ajax, и каждый раз, когда он что-то загружает, он должен информировать основной поток через почтовое сообщение и отправлять файл в основной поток (не уверен, что отправить весь ajax responseText обратно в main thread, либо пишите в sessionStorage - буду признателен за рекомендации даже по этой теме).

НО. Вот проблема. Мне нужно ВЫПОЛНИТЬ этот файл - я хочу, чтобы мои объекты были глобально доступны для моего основного потока. Я знаю, что не могу сделать что-то вроде этого:

function loadScript(url, callback)
{
    // Adding the script tag
    var head = document.getElementsByTagName('head')[0];
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = url;

    // Then bind the event to the callback function.
    // There are several events for cross browser compatibility.
    script.onreadystatechange = callback;
    script.onload = callback;

    // Fire the loading
    head.appendChild(script);
}

Потому что я не могу получить доступ к DOM из потока webworker.

Итак, вопрос. Есть ли лучшее решение, чем отправить строку responseText обратно в основной поток, а затем вызвать для нее eval()? Я слышал, что eval злой, медленный и глючный. Но есть ли у меня другой выбор?

Каждая рекомендация, даже та, которая разорвала бы мою концепцию фреймворка на части, очень ценится.

Вот мой профиль на гитхабе, но не проверяйте его слишком много, он далеко не закончен, и могут быть довольно глупые ошибки, а документация написана на моем родном языке. https://github.com/congrady/Bakalarka


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

Ответы:


1

Ваша идея кажется вполне осуществимой - вы можете вернуть любые (ну, почти любые) данные, которые вы хотите, из рабочего процесса в основной поток, поэтому я бы не стал просто возвращать строку и eval вещи. При получении данных от работника основной поток может сделать их доступными по своему усмотрению (включая добавление данных к объекту window, чтобы сделать его глобально доступным).

Есть некоторые преимущества в выполнении вызовов Ajax в веб-воркере. Например, если вы ожидаете, что будет возвращен большой ответ (т. е. несколько МБ данных JSON или двоичного изображения), основной поток может зависнуть при интерпретации и анализе ответа. Web worker может справиться с этим асинхронно... Я делал подобные вещи для плагина BackboneJS, который я разработал для управления большими наборами данных в браузере.

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

Обратите внимание, что если данные, возвращаемые с вашего сервера, будут включать в себя функции вместе с данными, вам нужно либо использовать подход eval'ed String, либо что-то подобное.

03.01.2016
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..