Загрузка зависимостей javascript по запросу

Я уверен, что есть разные подходы к этой проблеме, и я могу придумать некоторые из них. Но хотелось бы услышать мнение других людей по этому поводу. Чтобы быть более конкретным, я создал виджет, который позволяет пользователям выбирать свое местоположение на карте Google Maps. Этот виджет отображается по запросу и, вероятно, будет использоваться каждый раз из 10 использований страницы, на которой он размещен. Самый простой способ загрузить зависимость для этого виджета (google maps js api) - разместить на странице тег скрипта. Но это заставит браузер запрашивать этот скрипт при каждой загрузке страницы. Я ищу способ заставить браузер запрашивать этот скрипт только тогда, когда пользователю требуется, чтобы виджет отображался.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
10
0
4 832
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

вы можете загружать скрипт динамически, добавляя тег <script src = "..."> в дерево DOM.

Ответ принят как подходящий
function loadJSInclude(scriptPath, callback)
{
    var scriptNode = document.createElement('SCRIPT');
    scriptNode.type = 'text/javascript';
    scriptNode.src = scriptPath;

    var headNode = document.getElementsByTagName('HEAD');
    if (headNode[0] != null)
        headNode[0].appendChild(scriptNode);

    if (callback != null)    
    {
        scriptNode.onreadystagechange = callback;            
        scriptNode.onload = callback;
    }
}

И использовать (в качестве примера я использовал swfObject):

var callbackMethod = function ()
{
    // Code to do after loading swfObject
}

// Include SWFObject if its needed
if (typeof(SWFObject) == 'undefined')    
    loadJSInclude('/js/swfObject.js', callbackMethod);
else
    callbackMethod();

Возможно, вы захотите взглянуть на jsloader: http://www.jsloader.com/

Это делает Gaia Ajax (я знаю с тех пор, как реализовал это - я первоначальный основатель), и они GPL. Так что, если вы не боитесь, что они подадут на вас в суд (сейчас они обманывают меня судебными исками), вы можете проверить, как они это делают. Базовая технология заключается во внедрении тега сценария с использованием DOM, когда сценарий необходим. Хотя вы должны позаботиться о том, чтобы НЕ ссылаться на материалы в этом файле до того, как он завершит загрузку (что происходит асинхронно).

Решение этой проблемы (одно из решений) состоит в том, чтобы добавить переменную в конец файла и использовать рекурсивные вызовы setTimeout, чтобы проверить, определена ли переменная, и отложить выполнение кода в зависимости от того, загружается ли файл, до этого "дна" JS файла "определена переменная ...

Фактически мы также отслеживали, какие файлы были включены, добавляя хешированное значение имен файлов в скрытое поле на странице. Это означает, что мы никогда не включали один и тот же файл более одного раза ...

На самом деле довольно изящно ...

После всего спама, который вы написали для его продвижения, они подали на вас в суд?

FlySwat 22.11.2008 04:28

Я основатель Gaiaware, и меня «заморозили» из-за разногласий. Итак, я пошел и основал Ра-Аякс, и они угрожали мне подать на меня в суд, да ... У нас даже было много встреч с юристами с обеих сторон ...

Thomas Hansen 25.11.2008 04:42

API Google AJAX обеспечивают динамическую загрузку API JavaScript Google. В документации есть пример загрузка Maps JS по запросу:

function mapsLoaded() {
  var map = new google.maps.Map2(document.getElementById("map"));
  map.setCenter(new google.maps.LatLng(37.4419, -122.1419), 13);
}

function loadMaps() {
  google.load("maps", "2", {"callback" : mapsLoaded});
}

Возможно, вы захотите взглянуть на настоящий ДЕМО на сайте недвижимости.

На демонстрационной странице просто нажмите ссылку [Xem bản đồ], чтобы увидеть карту, загружаемую по запросу. Карта загружается только при нажатии на ссылку, а не во время загрузки страницы, поэтому это может сократить время загрузки страницы.

Другие вопросы по теме