Lab js + Javascriptmvc украсть
Кто-нибудь использовал LabJs совместно с javascriptmvc steal? Это означает поиск загрузки зависимостей на дочернем уровне, а также использование преимуществ асинхронной производительности LabJs.
a.js
.....
Steal (../ b.js).then (../ c.js) //c.js требует загрузки b.js и d.js, прежде чем он сможет загрузить
b.js
.....
Steal (../ d.js) // (необходимо загрузить d.js при вызове b.js, загрузить d.js для лучшей классификации и обслуживания)
Любые статьи или опыт для labjs + steal будут отличными.
2 ответа
Откладывая в сторону то, что украсть создает для вас один файл на данный момент...
Концепция аннотирования зависимостей, вложенных в каждый скрипт, означает, что сам по себе вы не можете в полной мере воспользоваться преимуществами параллельной загрузки, потому что загрузчик не знает, от каких скриптов зависит A, пока не завершит загрузку A и не увидит, что ему нужны B и C. Конечно, когда он знает о B и C, он может загружать эти два параллельно, но он не может загружать B и C параллельно с A.
другая проблема заключается в том, что LABjs (и большинство других динамических загрузчиков сценариев), строго говоря, неблокирует поведение, поэтому, если вы загрузите несколько таких сценариев, у вас возникнет проблема:
A - зависит от B и C
D - зависит от A и E
Когда A заканчивает загрузку, а затем вы начинаете загружать B и C, вы не можете (без дополнительных предварительных усилий) заставить D ждать, пока B и C (и, следовательно, A) не будут выполнены.
Причины этого довольно сложны для объяснения, но достаточно сказать, что этот сценарий проблематичен для динамической загрузки с вложенной аннотацией зависимостей.
Тем не менее, если вы знаете о дереве зависимостей в начале (то есть вы не ждете загрузки скриптов, чтобы узнать об их вложенных аннотациях зависимостей), вы можете легко воспользоваться преимуществами динамической параллельной загрузки, убедившись, что порядок сохранен. Вы можете легко сделать это:
B C A E D
и загрузите все 5 из них параллельно, по-прежнему следя за тем, чтобы они выполнялись в правильном порядке, как указано. Лучший способ выяснить это дерево зависимостей и необходимый порядок выполнения - это иметь процесс сборки, который просматривает все ваши сценарии и выясняет, что такое список и его необходимый порядок.
Используя LABjs, эта цепочка будет выглядеть так:
$ LAB.setOptions ({AlwaysPreserveOrder: истинно}) скрипт ([В, С, А, Е,D]);.
Довольно просто и понятно, если вы с самого начала знаете, что это за список / порядок. Просто сделайте, чтобы ваш скрипт компоновки поместил одну строчку кода на вашу HTML-страницу, и бум, все хорошо.
Если у вас нет такого сценария сборки для этого (у меня есть свой собственный, который я создал для своих различных проектов, нуждающихся в подобных вещах), у вас есть два варианта:
Не используйте вложенные аннотации зависимостей. Управляйте своим списком зависимостей (приведенным выше списком) самостоятельно и убедитесь, что он в правильном порядке. Вот уже десять лет или больше люди, использующие теги скриптов в браузерах, работают нормально, поэтому, вероятно, этого вполне достаточно для большинства сайтов. У меня есть цепочки LABjs на многих моих сайтах, которыми я управляю вручную, и это совсем не проблема, как и тысячи других сайтов, которые используют LABjs.
Используйте сценарий сборки (например, Steal), который просто помещает их все в один файл (конечно, он также должен определить правильный порядок!). Вы не получаете преимущества параллельной загрузки. Облом.
Надеюсь, это проливает некоторый свет на рассматриваемые проблемы.
Steal собирается собрать ваше производственное приложение в один файл JS. Вы можете загрузить этот файл, как хотите.