YUI 3 - модульная архитектура и динамическая загрузка приложения от Yahoo! Пётр Мязин.

Презентация:



Advertisements
Похожие презентации
JavaScript фреймворки. Куда катится мир. Владимир Кузнецов UWDC2012.
Advertisements

Проф. В.К.Толстых, Технологии разработки Internet- приложений ASP.NET приложения – оптимизация скорости работы приложений Из цикла лекций.
#html5camp JavaScript на сервере – node.js на Windows Гайдар Руководитель направления веб-технологий, Microsoft.
Ненавязчивый Unobtrusive JavaScript Сергеев Алексей «Открытые Веб-Технологии»
Кратко о jQuery. История jQuery января первый анонс о создании библиотеки 26 августа jQuery января jQuery сентября jQuery 1.2.
Web-технологии. Лекция 5. Browser. Что такое Browser? ПО для работы с web-сайтами В общем – интерфейс взаимодействия.
USE GRUNT, LUKE Глеб Поспелов, Дневник.ру IT Life {JavaScript} 2014.
Разработка больших сайтов Сумин Андрей Разработчик интерфейсов
Разгони свой сайт Лекция 7: «Ненавязчивый» JavaScript Мациевский Николай 1 / 22 webo.in.
Разгони свой сайт Лекция 4: Объединение файлов Мациевский Николай 1 / 22 webo.in.
NodeJS Эффективное программирование Юра Богданов технический директор и соучредитель Eventr.
Использование Google Web Toolkit для разработки AJAX-приложений Илья Обшадко
Проф. В.К.Толстых, Применение ASP.NET AJAX Extensions Asynchronous JavaScript And XML (Асинхронный JavaScript и XML) Основано на существующих.
Сервер приложений С++ Андрей Шетухин Rambler Internet Holding.
1 IoT with Galileo – Getting Started WHAT WILL YOU MAKE? Intel IoT.
JavaScript и доступность веб- сайтов Владимир Агафонкин.
Разработка игр в HTML5. Опыт портирования Doodle God. Николай Котляров, JoyBits Ltd.
Сергей Байдачный Специалист по разработке ПО Майкрософт Украина.
Drupal Camp Minsk Возможность изменения только одной области Нет инструментов, позволяющих загрузить css или js динамически Механизм по перезагрузке.
Просмотр сайтов во вкладках Вы можете работать сразу с несколькими Web-страницами в пределах одного окна.
Транксрипт:

YUI 3 - модульная архитектура и динамическая загрузка приложения от Yahoo! Пётр Мязин

YUI is a free, open source JavaScript and CSS library for building richly interactive web applications.

YUI 2 jQuery ExtJS 3 YUI 3 AngularJS Веб-решения для управления логистикой и цепями поставок в международной компании экспедиторе Panalpina. Представительства в 80 странах мира. Мы делаем динамические интерфесы с большим количеством виджетов и интерактива. Основные JS виджеты – это различные калькуляторы тарифов перевозок, быстрый поиск и ввод информации о грузах.

История развития Основные возможности Поддерживаемые платформы Статическая загрузка vs динамическая загрузка Динамическая загрузка самого фреймворка Создание своих модулей в стиле YUI Описание зависимостей между модулями Динамическая загрузка сторонних библиотек

2005 – внутренняя разработка Yahoo! 2006 февраль – первый публичный релиз YUI сентябрь - релиз переписанного с нуля YUI 3.0

2006 – yui-ext как дополнительный набор виджетов к YUI 2006 осень – библиотека приобретает популярность и начинает называться просто Ext 2007 – ExtJS 1.0

Кроссбраузерная работа с DOM и событиями Анимации Утилиты (Handelbars, History, Uploader, Pjax, Promise, …) Виджеты (Autocomplete, Charts, DataTable, Panel, TabView, …) App Framework MVC Routing Y.Test – более тестов Сборка с использованием Grunt, минификация Uglifyjs Открытая модель разработки через github Yahoo! CDN Лицензия BSD Основные возможности

Поддержка браузеров

WidgetA.js Core.js Library.js Core.css WidgetB.js B1.jsB2.js WidgetA.css

Статическая загрузка или или

Динамическая загрузка Хотим загружать js и css по событиям от пользователя Все зависимости должны разрешаться автоматически Если какой-то из модулей уже загружен, повторно не загружаем Асинхронная загрузка

Динамическая загрузка – вручную var s = document.createElement("script"); s.type = "text/javascript"; s.async = true; s.src = "/js/myfile.js"; var head = document.getElementsByTagName("head")[0]; head.appendChild(s);

Динамическая загрузка в YUI Библиотека разделена на ~250 модулей Каждый модуль – это отдельный js или css файл Между модулями существуют зависимости yui-min.js – базовый файл, который знает всю карту зависимостей и умеет загружать модули динамически По умолчанию файлы модулей загружаются из Yahoo! CDN Загрузчик отправляет ОДИН http запрос к CDN с указанием всех требуемых модулей, получает минифицированную сборку

// Create a YUI sandbox on your page. YUI().use('node', 'event', function (Y) { // The Node and Event modules are loaded and ready to use. // Your code goes here! }); // Put the YUI seed file on your page. Динамическая загрузка – с помощью YUI

YUI().use('transition', function (Y) { // Fade away. Y.one('#fademe').transition({ duration: 1, // seconds opacity : 0 }); // Shrink to nothing. Y.one('#shrinkme').transition({ duration: 1, // seconds width : 0, height : 0 }); // Put the YUI seed file on your page.

1. yui-base (34.78 KB) 2. oop (2.14 KB) 3. features (4.90 KB) 4. dom-core (2.58 KB) 5. dom-base (6.16 KB) 6. color-base (2.98 KB) 7. dom-style (2.27 KB) 8. event-custom-base (11.95 KB) 9. selector-native (3.37 KB) 10. selector (0.08 KB) 11. node-core (9.52 KB) 12. node-base (6.11 KB) 13. event-base (7.17 KB) 14. node-style (0.48 KB) 15. transition (7.15 KB)

YUI.add('my-module', function (Y) { // Write your module code here, and make your module available on the Y // object if desired. Y.MyModule = { sayHello: function () { console.log('Hello!'); } }; }, '0.0.1', { requires: ['node', 'event'] }); YUI().use('my-module', function (Y) { // The Y instance here is the same Y instance that was passed into // my-module's add() callback, so the Y.MyModule object that was created // there is now available here as well. Y.MyModule.sayHello(); }); Опишем модуль в отдельном файле Используем его на основной странице

YUI.applyConfig({ "groups":{ "mylibs":{ "base": "path/to/jsfiles/", "modules":{ "my-module":{ "path":"MyModuleFile.js", "requires":["node", "event"] } }); Чтобы загрузчик знал откуда загружать наши собственные модули, нужно описать карту зависимостей и путей

WidgetA.js Core.js Library.js Core.css WidgetB.js B1.jsB2.js WidgetA.css

"my-app-css": { base: "path/to/css/", modules: { "core-css": { path: "Core.css" }, "widget-a-css": { path: "WidgetA.css" } "my-app": { base: "path/to/js/", modules: { "core": { path: "Core.js", requires:["core-css"] }, "library": { path: "Library.js", requires:["core"] }, "widget-a": { path: "WidgetA.js", requires:["library", "widget-a-css"] }, "b1": { path: "B1.js", requires:["library"] }, "b2": { path: "B2.js", requires:["library"] }, "widget-b": { path: "WidgetB.js", requires:["b1", "b2"] }

YUI.add('widget-b', function (Y) { //Этот код не будет запущен //пока все зависимости не будут удовлетворены }, '0.0.1', { requires: ['b1', 'b2'] }); Файл WidgetB.js

Описывая карту зависимостей, можно: Загружать файлы по одному или через комбо- загрузчик (одинм http запросом) Загружать raw, min или debug версии (к файлам будут добавлены суффиксы) Загружать или нет на основе теста фич браузера (разные версии модуля под разные браузеры) Разбить модули на группы и к каждой группе применить свой комплекс настроек

Динамическая загрузка сторонних библиотек YUI.applyConfig({ "groups":{ "select2": { async: false, modules: { "select2": { path: "select2.min.js", requires: ["select2-css"] }, "select2-css": { path: "select2.css", type: "css" } });

YUI Gallery – хостинг своих модулей в Yahoo! CDN Инструменты shifter и yogi (node.js) помогают создать и покрыть тестами собственный YUI модуль Можно опубликовать свой модуль в YUI Gallery Любой разработчик может использовать модуль из YUI Gallery YUI().use("gallery-myawesomemodule", function(Y) { Y.MyAwesomeModule.sayHallo(); });

История развития Основные возможности Поддерживаемые платформы Статическая загрузка vs динамическая загрузка Динамическая загрузка самого фреймворка Создание своих модулей в стиле YUI Описание зависимостей между модулями Динамическая загрузка сторонних библиотек