2013-10-02 5 views
0

Я создаю фреймворк, в котором я объединил все файлы JavaScript в один файл (minify).Асинхронные функции загрузки JavaScript.

Пример:

function A() {} function B() {} 

Через уменьшенная файл я хочу, чтобы загрузить функцию асинхронно и удалить из HTML, когда его работа.

Пример: нагрузка функция А когда это требуется, но не функционирует B.

Я видел одну рамочного Require.js но в том, что он загружает файл JavaScript асинхронного основанный на требовании.

Есть ли какой-либо фреймворк, который загружает функции JavaScript по запросу, которые определены в одном файле js.

+0

Загрузка отдельных функций на самом деле является анти-оптимизацией. Вы оптимизируете объем памяти и время компиляции (которые обычно не являются серьезными узкими местами), жертвуя сетевой нагрузкой (каждая функция заставляет браузер открывать другой сокет для сервера), что является основным узким местом для веб-приложений. – slebetman

ответ

1

Недостатком конкатенации является то, что вы получаете менее мелкий контроль над тем, что вы включаете при заданной загрузке страницы. Решение этого, а не создание одного конкатенированного файла, создает уровни функциональности, которые могут быть включены немного более модульно. Таким образом, вам не нужен весь ваш JS на странице, которая может использовать только некоторые конкретные функции. Это действительно может быть победой в скорости, так как, поскольку только один JS-файл может не использовать браузеры 6 одновременных подключений. Более того, как только SPDY будет полностью принят, один большой файл будет фактически менее производительным, чем более мелкие (поскольку соединения могут быть повторно использованы). Тем не менее, по-прежнему важна оценка.

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

Можно отложить выполнение путем обертывания скрипта в комментарии блока, затем получить доступ к нему из узла сценария и eval() ... но это не похоже на то, что вы просите. Однако это может быть полезной стратегией, если вы хотите предварительно загружать модули без блокировки пользовательского интерфейса.

+0

Я получил решение в вашем ответе, минируя все классы отдельно в разных файлах, я могу использовать requirejs на этом. Выполнение этого кода также будет уменьшено, и я могу загружать классы по требованию, используя js. Большое спасибо Wyatt за ваше предложение. –

+0

Да, минимизация просто уменьшает количество байтов, отправленных по проводу, поэтому, независимо от того, сколько у вас файлов, вы получите ускорение скорости. Рад, что смог помочь. – Wyatt

0

Это не то, как работает javascript. Когда загружается исходный файл функции, функция доступна в памяти. Поскольку язык интерпретируется, функции, которые определены, будут загружены, как только исходный файл будет считаться браузером.

Лучше всего использовать Require.js или что-то подобное, если вы хотите иметь явные цепи зависимостей.

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