Dojo Сборка...? Что теперь?

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

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

Скажем, у меня это в "pageinit.js":

require([
    'dojo/parser', 
    'dojo/dom',
    'dojo/dom-class',
    //etc...

    'dijit/form/ValidationTextBox', 
    'dijit/form/CheckBox',
    // etc...

    // Dom Ready call
    'dojo/domReady!']
    function(
        Parser, 
        Dom,
        Class,
        // etc...){
    // do stuff with parser, dijits, so on.
    }
)

Некоторые из запросов на вызов были удалены для краткости, но есть несколько dom, style, style, некоторые dijits и т.д. Когда эта страница загружается, появляется вспышка незакрепленного содержимого, а затем она отлично.

Используя Dojo Web Builder, я выбрал модули, которые я использую, и запустил их. Он загрузил zip с большим количеством файлов под ним, включая новые dojo.js и custom_layer.js.

Итак, теперь мой вопрос: как использовать эти новые комбинированные и мини файлы вместо моей "нестрочной" версии? Что я require? Или я?

Так запутался...

Ответ 1

Сначала давайте понять, как работает API AMD (require/define).

require([
  'dojo/parser', 
  'dojo/dom',
  'dojo/dom-class'
], function(parser, dom, domClass){
});

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

Далее, давайте понять сборку. Конструкция dojo делает именно то, что вы описываете. Он сжимает кучу отдельных файлов в один файл. это ускорит загрузку страницы и предотвратит эту "вспышку", которую вы описываете.

Наконец, объединяя все вместе, вы должны добавить файл custom_layer.js вместе с файлом dojo.js.

<script type="text/javascript" src="path/to/dojo/dojo.js" />
<script type="text/javascript" src="path/to/custom_layer.js" />

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

Итак, ответ на ваш последний вопрос заключается в том, что вы НЕ должны изменять какой-либо из ваших кодов на основе конкретной версии кода (исходной и пользовательской сборки), которую вы используете. Используя AMD api, он должен работать.

Ответ 2

Не уверен, что это лучшая практика или нет, но я видел вспышку незакрепленного контента, когда я впервые начал (несколько дней назад), и увидел несколько примеров где-то, о чем заботится, просто скрывая <body>. Parse будет отображать его, когда он готов что-то показать.

<body style="visibility: hidden;">