(JS) Доработка библиотеки для подгрузки модулей
Имеется "библиотека" отвечающая за подгрузку файлов и модулей (boot.js – свой "недоаналог" RequireJS).
Описание работы
*********************
Суть работы "библиотеки" скрипта такова:
1. boot.js прописывается как обычный скрипт на странице
2. После чего возможна загрузка файлов и модулей посредством команд:
* boot.library( %name% );
* boot.module( %name% );
* boot.addon( %name% );
(первыми должны загружаться всегда библиотеки, после чего модули и аддоны соответственно, сейчас с этим проблемы)
3. boot.js в свою очередь обращается по путям вида: /client/%type%/%name%/, и считывает файл %name%.boot.js, в котором находится нечто вроде этого:
boot.css( { file: 'navigator.main' } );
boot.js( { file: 'navigator.interface', initialize: [ 'interface.navigator' ], require: [ 'core.jQuery', 'core.localization' ] } );
boot.js( { file: 'navigator.core', initialize: [ 'core.navigator' ], require: [ 'interface.navigator' ] } );
(здесь вначале подгрузится файл navigator.main.css,
потом должен jQuery.core.js если он не загружен (но это происходит не всегда, об этом ниже), localization.core.js,
navigator.interface.js, navigator.core.js)
4. После подгрузки всех файлов – происходит их инициализация – путём обращения к моделям вида (к тому что указано в initialize):
var core =
(function( core )
{
with( core )
{
var navigator = core.navigator = core.navigator || {};
navigator.initialize = function( )
{
//** Здесь код
}
}
return core;
})( core || { } );
Проблемы / Не доработки
********************************
Вроде-бы как в всё хорошо, но имеется ряд проблем которые необходимо решить
( так же возможны другие модификации по Вашему совету – но без разрушения структуры ):
1. В случаях когда файлов нет в кеше совсем (например первый запуск сайта в браузере, очистка кеша или не хранение его почему-то не помогает воспроизвести проблему),
в примере что я указал выше (это реальный участок кода, за исключением деталей), не всегда загружается jQuery тогда когда он нужен – а загружается он когда ему вздумается – что приводит к ошибкам (на странице в момент обращения к JQuery вылазит код функции из JQuery).
Данная проблема скорее всего не только с jquery но и другими модулями, просто данная ошибка самая приметная.
(в общем приоритетов никаких нет)
(выводится текст: function ( selector, context ) { // The jQuery object is actually just the init constructor 'enhanced' return new jQuery.fn.init( selector, context, rootjQuery ); } – это из файла jQuery)
2. Не работает в IE
3. Необходима придумать/реализовать модель загрузки "системных" модулей, или подобного которые будут загружены и инициализированы до всего (например вначале jquery, потом локализация и тестирование браузера на поддерживаемые технологии).
4. Нужна возможность прерывания дальнейшей загрузки скриптов, например в случае неудачного проведения теста на поддерживаемые технологии.
Как вариант о котором я думал – возможно следует немного разделить логику изначальной инициализации скриптов – с подзагрузкой.
Прочее
*********
Данная "библиотека" писалась не мной, я – "правоприёмник".
Потратив много времени на решение вышепоставленных задач – решил что с этим разберётся лучше тот кто уже сталкивался с подобным.
Архив с библиотекой и примером – во вложениях.
Уточняйте стоимость работ, и примерное время.
Оплата при помощи WebMoney (если не устраивает думаю что-то сможем придумать).