YUI Loader и изменений для 3.4.0

1 июля 2011 в 6:34 утра по Dav Стекло | В развитии , производительность | 10 комментариев

В 3.4.0 мы начали процесс перехода некоторых из логики Loader вокруг, чтобы не только сделать его более производительным, но и сделать его более надежным и простым в использовании и в других местах (например, на сервере). Мы будем выкатывает больше изменений в будущих версиях, но я хотел, чтобы занять некоторое время, и объяснить, что было изменено, поэтому оно было изменено и как она может повлиять на разработчиков. Для большинства сценариев использования, разработчики ничего не заметит другой, за исключением того, что вещи немного быстрее, и их загрузки требованию, немного меньше.

Семенной файла

Первое, что я хочу, чтобы адрес файла YUI семени. В предыдущих версиях YUI, наше семя файл был очень маленький и не содержали Loader или любого из его мета-данных. Мы обнаружили, что в 90% прецедентов это не было как производительной, как мы надеялись. Обычный пользователь включает в себя семя файл, то запросы своих модулей, которые, в свою очередь, означает, что семя должно первой выборке Loader, затем вычислить все его зависимости, то за ними все. Теперь мы считаем, что этот дополнительный запрос HTTP это неправильно, что нужно делать, поэтому новый стандарт файл семя содержит Loader и его мета-данных. Да, это будет сделать первоначальный запрос немного больше, но это сделает загрузку модулей, что значительно быстрее, так как все его мета-данных требований в настоящее время уже находится на странице.

Если вы хотите использовать его по-старому, вы можете просто включить юй-лесосеменной базы файл вместо. Он содержит все, что необходимо сделать YUI работать в автономном режиме, плюс он содержит возможность для извлечения Loader по требованию. Если вам требуется еще более детального зависимостей, мы создали юй-ядерный семян файл, который именно то, что старые юй-база семя.

     / Строить / юй / юй-min.js / / YUI Семени + Loader
     / Строить / юй-база / юй-Base-min.js / / Старый Семени с YUI Loader принести поддержку
     / Строить / юй-ядро / юй-Core-min.js / / Старый юй-базу без Loader принести поддержку

Следует отметить, что эти адреса отличаются от предыдущего URL. Любой, кто использовал yui/yui-base.js файлы должны repoint их yui-core/yui-core.js . Если вы хотите старше способ загрузки семян и получения Loader, вы должны использовать yui-base/yui-base.js файл семени.

Другие рассуждения на это изменение нашего плана для принятия YUI работать в стольких местах, как это возможно. Старый файл семян плюс погрузчика в одном запросе сервер комбо все хорошо и хорошо, если у вас есть комбо-сервер, доступный в вашем приложении. Но как на сервере? Или в офлайн приложение на мобильном устройстве? Эти места необходимо свести к минимуму доступ к файлам в то же время получать необходимую им информацию.

Накопительные

Следующее, что мы изменили был накопительных удаления из системы и дефолт allowRollup к ложным в Loader конфигурации. Что это значит для вас? Что ж, надеюсь, ничего вообще. Прежде чем объяснить, воздействие изменений, позвольте мне объяснить рассуждения за ней. Основной причиной является, опять же, производительность, наряду с полезной нагрузкой доставки. Рассмотрим пример:

      Модуль: требует событий, событий-б
      Модуль В: требуется событий с, событие-й

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

      event.a, event.b, event.c, event.d, event.e, event.f, event.g, event.h

Вы закончили с более на вашей странице, чем вы на самом деле необходимо. При отключении накопительный пакет поддержки, YUI теперь будет просить только то, что вы на самом деле просил и ничего более. В большинстве случаев вы не заметите этого. Модуль разработчиков, можете столкнуться с ситуацией, когда вещи, которые работали в прошлом, не может работать сейчас. Причина этого заключается в том, что они на самом деле работали случайно раньше. Позвольте мне привести реальный пример: Dial.

В 3.3.0, Dial требуется следующее:

     требует: [
         «Виджет»,
         'Дд-перетащить',
         «Заменить»,
         'События MouseEnter », 
         «Переход»,
         'Международный'
     ]

По большей части, Dial работал в 3.4.0, однако поддержка клавиатуры не работает. После выполнения некоторых простых расследование, выяснилось, что накопительный поддержка была на самом деле запрашивающей весь накопительный событие (которое включает в себя события двигаться и событийно-ключ). Без накопительный логики втягивая все события, 3.4.0 набора уже не было всех ее требований. Создание требований набора более конкретным и определять все его фактической зависимости должным образом заставляет его работать, как ожидалось.

     требует: [
         «Виджет»,
         'Дд-перетащить',
         «Заменить»,
         'События MouseEnter »,
         "Событие ходу»,
         "Событие ключ»,
         «Переход»,
         'Международный'
     ]

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

Это также означает, что модуль требования более четко определены. Например, datatype-date имеет Intl поддержку встроенного В предыдущих версиях вы сможете получить доступ Intl так:

     Y.Intl.getAvailableLangs («тип данных дата-');

Но так как этот модуль на самом деле не имеют языка ( datatype-date-format модуль делает), то это не удастся. Она должна быть более конкретной и на самом деле просят языков для правильного модуля:

     Y.Intl.getAvailableLangs («тип данных дата-формата ');

Сборка Взрыв файлов и удаления Субмодуль

После внесения этих изменений, следующее изменение мы сделали был взрыв в каталог сборки и удаления подмодулей из ядра системы. Субмодуль логики не было удалено, только наша мета-структура данных была изменена. Это обеспечит обратную совместимость для текущей установки.

Подмодули в ядро ​​системы, вызванной пару вопросов, которые нам необходимо решить. Первая причина была производительность. Каждый раз, когда погрузчик, необходимых для расчета зависимости, то ей необходимо идти подмодуль / плагин структуру каждого модуля. Делать это в тысячи раз было больно во время нашего выступления Loader расчета рутины. Удаляя поддержку подмодулей в ядре системы, мы спасли десятки тысяч вызовов функций и итераций.

Погрузчик был изменен так, что если use имущества в модуле мета-данных, определенных несколько модулей, он будет использовать те модули, вместо того, чтобы загрузить оригинальный модуль. Итак, если вы просили " dd "Loader будет инспектировать" dd "" с мета-данными и посмотреть, пользоваться имуществом, которое выглядит примерно так:

     "Дд-DDM-базы, дд-DDM, дд-DDM-кап, дд-сопротивления, дд-прокси, дд-ограничивать, дд-кап, дд-прокрутки, дд-капля-плагин"

В семени файла дампа YUI, мы также включая то, что мы называем виртуальной накопительные пакеты или псевдонимы. Эти определения модулей в точности такие же, как мета-данных в Loader. Таким образом, вы можете включать в себя все файлы, экспортируемые из нашей зависимости Configurator и по-прежнему использовать эти накопительные пакеты без Loader присутствуют на странице. В будущих релизах мы будем переработки такой подход еще больше.

После внесения этих изменений, мы тогда предшествовали взорвать наши файлы сборки. В предыдущих выпусках подмодулей определил пути модули файл. Например:

     "Дд": {
         "Подмодулей": {
             "Дд-перетащить": 
             / / Модуль данных
         }
     }

В 3.3.0 при построении "дд", файловая структура выглядела примерно так:

     / Строить / дд / дд-drag.js
     / Строить / дд / дд-ddm.js
     / Строить / дд / дд-drop.js

С системой сборки взорвалась в 3.4.0, "дд" Построим файлы теперь выглядеть следующим образом:

     / Строить / дд-перетащить / дд-drag.js
     / Строить / дд-DDM / дд-ddm.js
     / Строить / дд-вывода / дд-drop.js

Это позволило нам снять "путь" имущество от всех наших модуль мета-данных, а, сохраняя размер файла и сокращения логики, необходимые для сборки модулей пути URL.

Если вы в том числе предварительно сконфигурированных комбо URL, вы должны пересчитать URL при обновлении.

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

Будущее

Я буду продолжать совершенствовать, реорганизовывать и максимизировать каждый аспект нашей Loader и семеноводства стратегии. Эти первые шаги были необходимы, чтобы помочь в будущем изменения, которые должны быть сделаны не только для нашей клиентской стратегии, но и нашего сервера, командной строки и мобильных устройств стратегии, а также.

Доля и расширить: Закладка с del.icio.us | Digg это! | Reddit!

10 Комментариев »

RSS-лента комментариев к этой записи. TrackBack URI

  1. Я не совсем получить этот отрывок:

    "Loader был изменен так, что если пользоваться имуществом в модуле мета-данных, определенных несколько модулей, он будет использовать те модули, вместо того, чтобы загрузить оригинальный модуль. Итак, если вы просили "дд" Loader будет инспектировать "дд" "с мета-данными и посмотреть, пользоваться имуществом, которое выглядит примерно так:

    "Дд-DDM-базы, дд-DDM, дд-DDM-кап, дд-сопротивления, дд-прокси, дд-ограничивать, дд-кап, дд-прокрутки, дд-капля-плагин"
    "
    Можете ли вы объяснить это говорю, напротив, что происходит в текущей версии?

    Thx
    / Paolo

    Комментарий от Паоло НЕСТИ - 4 июля 2011 #

  2. @ Паоло

    В версиях до 3.4.0 PR2, мы создали статических файлов свертки. Таким образом, в случае DD, был файл с именем:

    / Строить / дд / dd.js

    И это, содержащихся все ДД связанных модулей.

    Комментарий от Dav стекла - 4 июля 2011 #

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

    Комментарий от Марка - 5 июля 2011 #

  4. @ Марк

    При 3.4.0 выпущен, не должно быть большого количества документации вокруг изменилось модулей.

    Комментарий от Dav стекла - 5 июля 2011 #

  5. Этот комментарий не на этот пост специально, но я все еще нахожу философии YUI против моей веры в хороший дизайн ", простые вещи должны быть простыми, сложными вещами должно быть возможно".

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

    Новое приложение / МВЦ модули кажутся идеально подходит для моего приложения во-первых, тогда я начал писать много логику, чтобы обойти по умолчанию из-за огромных накладных расходов памяти. Когда я выбросить Модуль & Посмотреть полностью, я закончил с гораздо более короткий и компактный логики, только быстрее!

    Другой случай контекстного меню, которое я не нашел в YUI3. Некоторые эксперты предполагают, YUI создает новый класс, основанный на Overlay затем добавляют различные пользовательские свойства и методы оказания ... Мне просто нужно ОДИН контекстное меню и в конце концов я получил это сделано с менее чем 10 строк сырье JS + CSS.

    Я никогда не сомневаться YUI3 может поддерживать сложные ситуации, но что об очень простых случаях, например, привет приложение мире? С С, вы просто позвоните Е ("привет мир!") В рамках основного (). Для Java, вы должны сначала определить HelloWorld класса, то открытые статический метод недействительным называется основной (), и, наконец, вызов System.out.println ("привет мир!") ... OMG, кто-нибудь понимает, сколько предпосылка знания, которое требуется писать-то же просто, как этот? Это именно то, как я отношусь к YUI!

    Все, что я не думаю, что YUI3 никогда не станет проще, но я все еще надеюсь, что вы, ребята, можете сделать это как можно более простым.

    Комментарий от Wayne - 16 июля 2011 #

  6. @ Уэйн: Вам не нужно YUI написать Привет App World. Похоже, вы также не нуждается в YUI построить приложение, которое вы пытались построить с использованием модели и просмотр компонентов.

    Это нормально!

    Юй не будет идеальным инструментом для каждой задачи. Если вы можете написать десять строк JavaScript и выполнить то, что вам нужно сделать, то все средства, сделать это вместо того чтобы использовать виджет, который делает гораздо больше, чем нужно.

    Это не означает, что виджет является бесполезным или излишне сложным. Это означает, что он не был правильный инструмент для работы вы хотели сделать.

    Мы абсолютно не хотим, чтобы YUI простым, насколько это практично, но есть баланс должны быть достигнуты между простотой и полезность. Простейший код не является кодом на всех, но если бы мы пошли так далеко, мы также не будет предоставлять никакого значения. Таким образом, мы стараемся найти баланс: мы стараемся сделать сложные вещи простыми, но без упрощением их до точки, где наши абстракции не являются полезными.

    Я согласен с вашей философией, что простые вещи должны быть простыми и сложными вещами должна быть возможной. И я верю, что это именно то, что YUI делает: он делает сложные вещи возможно, не делая простые вещи немного менее просто. Красота модульная архитектура YUI в том, что если вы обнаружите, проще свернуть свой собственный код вместо использования специального виджета, вы не обязаны загрузить код виджета. И Loader вступления изменений в 3.4.0 сделать это еще проще.

    Комментарий от Райана Grove - 20 июля 2011 #

  7. [...] Loader оказала значительное обновление для 3.4.0. Если вы делаете ручной спецификации нагрузки посредством использования ("*") или использовать подмодуль конфигураций, мы будем очень благодарны вам пытаются ваш код с нового погрузчика быть уверен, что мы правильно обработки всех вариантов использования. Для получения более подробной информации о Loader изменений в этой версии можно найти в блоге описании 3.4.0 изменения Loader. [...]

    Pingback от YUI 3.4.0 Предварительный просмотр версии 3 теперь доступен на CDN »Yahoo! Пользовательский интерфейс блог (YUIBlog) - 28 июля 2011 #

  8. @ Райан,

    Только видел ваш комментарий. Я был сохранении старого проекта, написанных на YUI 3.1 с 1000 строк кода, и я просто хотел бы добавить один контекстного меню. Но я не смог найти любую посильную модуль / метод, чтобы сделать это быстро и просто. Предвидя эту мелочь может потребовать 100s линий YUI ориентированного кода, я использовал сырье JS вместо этого.

    Кстати: было мало глюков при переключении на 3.2, но вся система перестала работать при переходе на 3.3. Поэтому я не думаю, что стоит попробовать 3.4 для этого проекта.

    Комментарий от Wayne - 18 августа 2011 #

  9. [...] Число итераций, выполненных Loader в расчет зависимостей. Вы можете сослаться на сообщение в блоге о Loader изменения в 3.4.0 для более [...]

    Pingback от Объявляя YUI 3.4.0 и новые YUILibrary.com »Yahoo! Пользовательский интерфейс блог (YUIBlog) - 18 августа 2011 #

  10. Все эти изменения в загрузчик кажутся очень перспективными и удаление вспомогательных модулей расчетов велика. Это было, вероятно, по этой причине мы видели тонн вызовов функций, достигнутый в IE при выполнении зависимость расчетов и IE будет Сорта дроссель в течение нескольких секунд.

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

    Комментарий от Али D - 19 августа 2011 #

Оставить комментарий

Примечание: Комментарии модерируются для новичков. Спам удаляется.

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Хостинг в Yahoo!

Copyright © 2006-2012 компании Yahoo! Inc Все права защищены. Политика конфиденциальности - Условия предоставления услуг

Работает на WordPress на Yahoo! Веб-хостинг .