Есть ли способы улучшить загрузку javascript (Dojo)?

Я начинаю использовать набор инструментов Dojo, и у него есть богатые функции, такие как Dijits и темы, которые полезны, но загружаются вечно.

У меня хорошее подключение к Интернету, но те, у кого более медленное подключение, будут испытывать довольно медленную загрузку страниц.

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


person marko    schedule 11.01.2010    source источник
comment
Используете ли вы пользовательские слои и систему сборки?   -  person prodigitalson    schedule 11.01.2010
comment
нет, но, возможно, должен... Я углублюсь в это.   -  person marko    schedule 24.02.2010


Ответы (4)


В Dojo есть система сборки, которая значительно сокращает время загрузки. Взгляните на одну из книг по додзё или онлайн-документы и посмотрите на многоуровневые сборки. Чтобы выполнить сборку, вам необходимо иметь «исходную» (или «полную») версию dojo, в которую включен инструмент сборки — вы можете узнать, есть ли она у вас, по наличию каталога «util» ( который находится на том же уровне, что и додзё, диджит, доджокс). Если у вас нет полной версии, вернитесь на сайт додзё и углубитесь в область загрузки — возможно, это не совсем очевидно.

В любом случае, если у вас есть правильная версия, вам в основном просто нужно создать файл «профиля сборки» (или файлы ... также известные как многоуровневая сборка), который, по сути, является вашим списком dojo.requires, который вы обычно имеете в своем html. . Система сборки соберет весь код javascript для всех диджитов, dojox и т. д. вместе в «многоуровневую сборку» (файл), и она запустит на ней сжатие, что как бы минимизирует код (удаляет пробелы, сокращает имена , так далее). Это также будет делать некоторые из файлов css. Помимо того, что вы делаете вещи намного меньше, вы получаете всего один файл для всего кода js (или несколько файлов, если вы делаете более одного слоя, но в большинстве случаев достаточно одного слоя).

Это улучшит время загрузки как минимум в десять раз, если не больше. Вам может потребоваться немного чтения, чтобы понять формат профилей и саму команду сборки, но на самом деле это не так уж сложно. Как только вы создадите файл сборки, назовите его как-то очевидно, например, «mystuff», а затем вы можете dojo.require файл «mystuff» (который будет в новом каталоге сборки, который создается при сборке, а затем под ним и болтается с файл dojo.js в каталоге dojo). Required в вашем собранном файле удовлетворит все dojo.require, которые вы обычно делаете (при условии, что вы указали их все в профиле для сборки), и все будет загружаться очень быстро.

Вот ссылка на старую документацию по сборке, которая в основном все еще актуальна: http://www.dojotoolkit.org/book/dojo-book-0-9/part-4-meta-dojo/package-системныеипользовательскиесборки

Вот обновленная документация (хотя, возможно, немного неполная): docs.dojocampus.org/build/index

Это читается сложнее, чем есть на самом деле... используйте файл layer.profile в каталоге профилей в качестве отправной точки. Просто поместите пару вещей, а затем выполните сборку и посмотрите, создадите ли вы каталог выпуска (который должен быть на том же уровне, что и додзё, диджит и т. д.), и в нем будет вся система додзё (все минимизировано) а также ваши встроенные (слоистые) материалы. Намного быстрее.

Дилан Тайнан

person Community    schedule 12.01.2010

Он не такой уж большой (28 КБ в сжатом виде). Тем не менее, вы можете использовать размещенную Google версию Dojo. Многие из ваших пользователей уже закешировали его.

person Sampson    schedule 11.01.2010

Как только вы создадите файл сборки, назовите его как-то очевидно, например, «mystuff», а затем вы можете dojo.require файл «mystuff» (который будет в новом каталоге сборки, который создается при сборке, а затем под ним и болтается с файл dojo.js в каталоге dojo). Required в вашем собранном файле удовлетворит все dojo.require, которые вы обычно делаете (при условии, что вы указали их все в профиле для сборки), и все будет загружаться очень быстро.

Небольшое исправление - вы не dojo.require этот файл, вы ссылаетесь на него в обычном теге скрипта.

<script type="text/javascript" src="js/dojo/dojo/dojo.js" ></script>
<script type="text/javascript" src="js/dojo/mystuff/mystuff.js"></script>

Для макета каталога я поместил встроенный файл «mystuff.js» в тот же каталог, что и мой пакет. Таким образом, на том же уровне, что и dojo, dojox и dijit, у меня будет каталог с именем «mystuff», и в нем у меня есть MyClass1.js и MyClass2.js. Тогда фрагмент из файла profile.js для сборки выглядит так:

layers:[
{
name: "../mystuff/mystuff.js",
dependencies: [
  "mystuff.MyClass1",
  "mystuff.MyClass2"
  ]
},...
person hughw    schedule 26.08.2011

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

Если вы обслуживаете через apache, есть и другие факторы. Эти настройки могут иметь огромное значение — MaxClients и MaxRequestsPerChild. Вам нужно будет настроить их в зависимости от ресурсов, доступных вашему серверу/машине, обслуживающей файлы.

Изменение этого сработало очень хорошо для меня.

Использование Google CDN также является хорошим вариантом, хотя в некоторых ситуациях это может оказаться непрактичным.

Пользовательская сборка также имеет эффект, как указано в других ответах.

person ksrini    schedule 22.05.2014