SlideShare a Scribd company logo
1 of 14
Download to read offline
Marrow
Что это такое и с чем готовят?
Так что же это такое?
Marrow - это...
• Механизм создания “песочницы” + загрузчик предоставлюящий
возможность загружать файлы как в песочницу, так и в основную
страницу.
• Шаблон файловой структуры для хранения необходимого количества
приложений + автоматическая сборка и тестирование на основе grunt.js.
• Набор рецептов позволяющий подготавливать окружение песочницы
под конкретное приложение – загрузка зависимостей, отложенная
загрузка компонентов.
• Механизм транзитов предназначенный для прозрачного линкования api
библиотек с песочницы на основную страницу.
А теперь немного истории
Первый прототип
Создание приложения, которое должно было
работать, как по отдельной ссылке так и
встраиваться в сайт в качестве виджета.
Как это было реализовано:
• Был реализован простой загрузчик на основе библиотеки yepnope.js,
который загружал в страницу все скрипты и стили.
• В iframe загружались все шаблоны для js шаблонизации и потом
переносились в основную страницу, чтоб они стали доступны
приложению.
Проблемы
• Первой же проблемой стал конфликт разных
версий библиотек, так как они все загружались в
основную страницу.
• Конфликт некоторых библиотек, которые
перезаписывали друг друга.
• В тот момент столкнулись с проблемой, когда
верстка приложения была не модульной и
многие стили пересекались со стилями сайта,
что в результате ломало верстку.
Второй прототип
Самостоятельные эксперементы по запуску
несколько приложений с разным набором библиотек
на одной странице.
Как это было реализовано:
• Первоначальный загрузчик и структура были улучшены для возможности
хранения нескольких приложений и загрузки их в индивидуальную
песочницу.
• Общие библиотеки все так же загружались в основную страницу
инициализируясь в песочницу.
• Добавлена сборка с помощью grunt.js для создания минифицированных
версий приложений.
Проблемы
• Возникли проблемы с библиотеками, которые
должны были работать с DOM так как находясь
в iframe они с ним и пытались работать.
• Небыло возможности загружать разные версии
библиотек работающие с DOM.
• Приходилось делать много патчей в самих
приложениях, чтоб они работали с основной
страницей, а не с iframe.
Третий прототип
Был реализован в качестве демо виджета, который
должен был встраиваться в стороние сайты через js
инъекцию загрузчика и запускать внутри себя веб-
приложение.
Как это было реализовано:
• Из-за невозможности yepnope.js делать кроссдоменную загрузку ресурсов
он был заменен на curl.js + сделаны специальные переменные для
конфигов для более просто загрузки ресурсов приложения.
• Были созданы рецепты для описания зависимостей и создания окружения
в песочнице (переменные, функции и т.д.).
• Были созданы транзиты – патчи для библиотек работающих с DOM, чтоб
сделать верхнеуровневое прокидывание селекторов на основную страницу
Проблемы
• Большая проблема реализовать
кроссбраузерный транзит для window.location.
Возможно он и не нужен...
• Для каждой библиотеки работающей с DOM
(jQuery, Prototype, MooTools) нужно писать свой
транзит.
Время демок!
https://github.com/a-ignatov-parc/Marrow#demos

More Related Content

What's hot

[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)
[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)
[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)Evgeny Kaziak
 
Как быть с большими сайтами на Word press
Как быть с большими сайтами  на Word pressКак быть с большими сайтами  на Word press
Как быть с большими сайтами на Word pressvovasik
 
Phalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP FrameworkPhalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP FrameworkOleksandr Torosh
 
Как не стать рабом облака. PaaS 2.0 с Docker
Как не стать рабом облака. PaaS 2.0 с DockerКак не стать рабом облака. PaaS 2.0 с Docker
Как не стать рабом облака. PaaS 2.0 с Dockertrukhinyuri
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложенияDenis Latushkin
 
Сергей Яковлев "Phalcon 2 - стабилизация и производительность"
Сергей Яковлев "Phalcon 2 - стабилизация и производительность"Сергей Яковлев "Phalcon 2 - стабилизация и производительность"
Сергей Яковлев "Phalcon 2 - стабилизация и производительность"Fwdays
 
Форум на полном БЭМ-стеке — Николай Ильченко, Яндекс
Форум на полном БЭМ-стеке — Николай Ильченко, ЯндексФорум на полном БЭМ-стеке — Николай Ильченко, Яндекс
Форум на полном БЭМ-стеке — Николай Ильченко, ЯндексYandex
 
My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25Alex Chistyakov
 
What do you MEAN? или введение в Fullstack JavaScript
What do you MEAN? или введение в Fullstack JavaScriptWhat do you MEAN? или введение в Fullstack JavaScript
What do you MEAN? или введение в Fullstack JavaScriptVasiliy Teliatnikov
 
Chrome push notifications. Анатомия и разработка
Chrome push notifications. Анатомия и разработкаChrome push notifications. Анатомия и разработка
Chrome push notifications. Анатомия и разработкаAlexandr Mikhaylenko
 
Мониторинг Drupal-сайтов
Мониторинг Drupal-сайтовМониторинг Drupal-сайтов
Мониторинг Drupal-сайтовDrupalSPB
 
Депрокрастинируем Docker: контейнеры здесь и сейчас
Депрокрастинируем Docker: контейнеры здесь и сейчасДепрокрастинируем Docker: контейнеры здесь и сейчас
Депрокрастинируем Docker: контейнеры здесь и сейчасRuslan Sharipov
 
Артем Курбатов — Мастер-класс «Динамический БЭМ-сайт на Node.js»
Артем Курбатов — Мастер-класс «Динамический БЭМ-сайт на Node.js»Артем Курбатов — Мастер-класс «Динамический БЭМ-сайт на Node.js»
Артем Курбатов — Мастер-класс «Динамический БЭМ-сайт на Node.js»Yandex
 
Локальное окружение на Docker
Локальное окружение на DockerЛокальное окружение на Docker
Локальное окружение на DockerМихаил Бакулин
 
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo KazymyrovFwdays
 
Phalcon. Что нового?
Phalcon. Что нового?Phalcon. Что нового?
Phalcon. Что нового?Oleksandr Torosh
 
Bootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressBootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressIgor Sazonov
 

What's hot (20)

Mercurial
MercurialMercurial
Mercurial
 
WebAssembly
WebAssemblyWebAssembly
WebAssembly
 
[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)
[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)
[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)
 
Как быть с большими сайтами на Word press
Как быть с большими сайтами  на Word pressКак быть с большими сайтами  на Word press
Как быть с большими сайтами на Word press
 
Phalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP FrameworkPhalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP Framework
 
Как не стать рабом облака. PaaS 2.0 с Docker
Как не стать рабом облака. PaaS 2.0 с DockerКак не стать рабом облака. PaaS 2.0 с Docker
Как не стать рабом облака. PaaS 2.0 с Docker
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложения
 
Сергей Яковлев "Phalcon 2 - стабилизация и производительность"
Сергей Яковлев "Phalcon 2 - стабилизация и производительность"Сергей Яковлев "Phalcon 2 - стабилизация и производительность"
Сергей Яковлев "Phalcon 2 - стабилизация и производительность"
 
Форум на полном БЭМ-стеке — Николай Ильченко, Яндекс
Форум на полном БЭМ-стеке — Николай Ильченко, ЯндексФорум на полном БЭМ-стеке — Николай Ильченко, Яндекс
Форум на полном БЭМ-стеке — Николай Ильченко, Яндекс
 
My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25
 
What do you MEAN? или введение в Fullstack JavaScript
What do you MEAN? или введение в Fullstack JavaScriptWhat do you MEAN? или введение в Fullstack JavaScript
What do you MEAN? или введение в Fullstack JavaScript
 
Chrome push notifications. Анатомия и разработка
Chrome push notifications. Анатомия и разработкаChrome push notifications. Анатомия и разработка
Chrome push notifications. Анатомия и разработка
 
Мониторинг Drupal-сайтов
Мониторинг Drupal-сайтовМониторинг Drupal-сайтов
Мониторинг Drupal-сайтов
 
PHP
PHPPHP
PHP
 
Депрокрастинируем Docker: контейнеры здесь и сейчас
Депрокрастинируем Docker: контейнеры здесь и сейчасДепрокрастинируем Docker: контейнеры здесь и сейчас
Депрокрастинируем Docker: контейнеры здесь и сейчас
 
Артем Курбатов — Мастер-класс «Динамический БЭМ-сайт на Node.js»
Артем Курбатов — Мастер-класс «Динамический БЭМ-сайт на Node.js»Артем Курбатов — Мастер-класс «Динамический БЭМ-сайт на Node.js»
Артем Курбатов — Мастер-класс «Динамический БЭМ-сайт на Node.js»
 
Локальное окружение на Docker
Локальное окружение на DockerЛокальное окружение на Docker
Локальное окружение на Docker
 
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
 
Phalcon. Что нового?
Phalcon. Что нового?Phalcon. Что нового?
Phalcon. Что нового?
 
Bootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressBootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPress
 

Viewers also liked

Product Catalog - Network and Web Enabled Devices
Product Catalog - Network and Web Enabled DevicesProduct Catalog - Network and Web Enabled Devices
Product Catalog - Network and Web Enabled DevicesUptime Devices
 
Geo final project
Geo final projectGeo final project
Geo final projectgbcm0920
 
Linked in presentaion
Linked in presentaionLinked in presentaion
Linked in presentaionrivkaf
 
P ythagorean and his theorem
P ythagorean and his theoremP ythagorean and his theorem
P ythagorean and his theoremmatt_hicks
 
Uptime Devices - Network and Web Enabled Technologies
Uptime Devices - Network and Web Enabled TechnologiesUptime Devices - Network and Web Enabled Technologies
Uptime Devices - Network and Web Enabled TechnologiesUptime Devices
 
Buat logo fersi kelompok 6
Buat logo fersi kelompok 6Buat logo fersi kelompok 6
Buat logo fersi kelompok 6nopryadi
 
Geo final project
Geo final projectGeo final project
Geo final projectgbcm0920
 
Marketing 521 Team Marketing Plan Final Draft_2012-11-27
Marketing 521 Team Marketing Plan Final Draft_2012-11-27Marketing 521 Team Marketing Plan Final Draft_2012-11-27
Marketing 521 Team Marketing Plan Final Draft_2012-11-27Anthony Lee
 
IEC Conference 2011 - Literacy/Maths/High Challenge-High Support
IEC Conference 2011 - Literacy/Maths/High Challenge-High SupportIEC Conference 2011 - Literacy/Maths/High Challenge-High Support
IEC Conference 2011 - Literacy/Maths/High Challenge-High SupportMarsden IEC
 
Попасть в мишень
Попасть в мишеньПопасть в мишень
Попасть в мишеньAnton Ignatov
 
Vesalius’ Continuum EMSA 25 maart 2014
Vesalius’ Continuum EMSA 25 maart 2014Vesalius’ Continuum EMSA 25 maart 2014
Vesalius’ Continuum EMSA 25 maart 2014Ann de Velde
 
Capacidades fisicas terminado
Capacidades fisicas terminadoCapacidades fisicas terminado
Capacidades fisicas terminadomarceyuli
 
Nuestras Raices (PUERTO RICO) )
Nuestras Raices (PUERTO RICO) )Nuestras Raices (PUERTO RICO) )
Nuestras Raices (PUERTO RICO) )cortijo77
 
Cuadro factores de riesgos
Cuadro factores de riesgosCuadro factores de riesgos
Cuadro factores de riesgosmarceyuli
 
How to upgrade your rails application to rspec3
How to upgrade your rails application to rspec3How to upgrade your rails application to rspec3
How to upgrade your rails application to rspec3Junichi Ito
 
Trabajo de etica terminado
Trabajo de etica terminadoTrabajo de etica terminado
Trabajo de etica terminadomarceyuli
 

Viewers also liked (20)

Product Catalog - Network and Web Enabled Devices
Product Catalog - Network and Web Enabled DevicesProduct Catalog - Network and Web Enabled Devices
Product Catalog - Network and Web Enabled Devices
 
Geo final project
Geo final projectGeo final project
Geo final project
 
LogiExcel - Complete Logistics Solution
LogiExcel -  Complete Logistics SolutionLogiExcel -  Complete Logistics Solution
LogiExcel - Complete Logistics Solution
 
Linked in presentaion
Linked in presentaionLinked in presentaion
Linked in presentaion
 
P ythagorean and his theorem
P ythagorean and his theoremP ythagorean and his theorem
P ythagorean and his theorem
 
Uptime Devices - Network and Web Enabled Technologies
Uptime Devices - Network and Web Enabled TechnologiesUptime Devices - Network and Web Enabled Technologies
Uptime Devices - Network and Web Enabled Technologies
 
Buat logo fersi kelompok 6
Buat logo fersi kelompok 6Buat logo fersi kelompok 6
Buat logo fersi kelompok 6
 
Geo final project
Geo final projectGeo final project
Geo final project
 
Marketing 521 Team Marketing Plan Final Draft_2012-11-27
Marketing 521 Team Marketing Plan Final Draft_2012-11-27Marketing 521 Team Marketing Plan Final Draft_2012-11-27
Marketing 521 Team Marketing Plan Final Draft_2012-11-27
 
IEC Conference 2011 - Literacy/Maths/High Challenge-High Support
IEC Conference 2011 - Literacy/Maths/High Challenge-High SupportIEC Conference 2011 - Literacy/Maths/High Challenge-High Support
IEC Conference 2011 - Literacy/Maths/High Challenge-High Support
 
LogiExcel : Complete Logistics Solution
LogiExcel : Complete Logistics SolutionLogiExcel : Complete Logistics Solution
LogiExcel : Complete Logistics Solution
 
Попасть в мишень
Попасть в мишеньПопасть в мишень
Попасть в мишень
 
Presentación gbi
Presentación gbiPresentación gbi
Presentación gbi
 
Vesalius’ Continuum EMSA 25 maart 2014
Vesalius’ Continuum EMSA 25 maart 2014Vesalius’ Continuum EMSA 25 maart 2014
Vesalius’ Continuum EMSA 25 maart 2014
 
Capacidades fisicas terminado
Capacidades fisicas terminadoCapacidades fisicas terminado
Capacidades fisicas terminado
 
Nuestras Raices (PUERTO RICO) )
Nuestras Raices (PUERTO RICO) )Nuestras Raices (PUERTO RICO) )
Nuestras Raices (PUERTO RICO) )
 
Cuadro factores de riesgos
Cuadro factores de riesgosCuadro factores de riesgos
Cuadro factores de riesgos
 
How to upgrade your rails application to rspec3
How to upgrade your rails application to rspec3How to upgrade your rails application to rspec3
How to upgrade your rails application to rspec3
 
Trabajo de etica terminado
Trabajo de etica terminadoTrabajo de etica terminado
Trabajo de etica terminado
 
All About the City of Tallahassee
All About the City of TallahasseeAll About the City of Tallahassee
All About the City of Tallahassee
 

Similar to Marrow

Использование сторонних библиотек в веб-приложении
Использование сторонних библиотек в веб-приложенииИспользование сторонних библиотек в веб-приложении
Использование сторонних библиотек в веб-приложенииDenis Latushkin
 
Trening modul2-webinar10
Trening modul2-webinar10Trening modul2-webinar10
Trening modul2-webinar10olgaoov
 
Yaremchuk - Корпоративные сайты
Yaremchuk - Корпоративные сайтыYaremchuk - Корпоративные сайты
Yaremchuk - Корпоративные сайтыAndrii Podanenko
 
работа с блогом1
работа с блогом1работа с блогом1
работа с блогом1Natalia Odegova
 
работа с блогом1
работа с блогом1работа с блогом1
работа с блогом1Nata Koinova
 
Dev ops.events.v tymoshyk-20-oct-2016
Dev ops.events.v tymoshyk-20-oct-2016Dev ops.events.v tymoshyk-20-oct-2016
Dev ops.events.v tymoshyk-20-oct-2016Vad Tymoshyk
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaAlex Chistyakov
 
Meet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis BosakMeet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis BosakAmasty
 
Разработка сложного мультимедийного приложения на JavaScript+HTML5 и PhoneGap...
Разработка сложного мультимедийного приложения на JavaScript+HTML5 и PhoneGap...Разработка сложного мультимедийного приложения на JavaScript+HTML5 и PhoneGap...
Разработка сложного мультимедийного приложения на JavaScript+HTML5 и PhoneGap...Ontico
 
Ruby on Rails. Пользовательский интерфейс
Ruby on Rails. Пользовательский интерфейсRuby on Rails. Пользовательский интерфейс
Ruby on Rails. Пользовательский интерфейсDigital-агентство Мэйк
 
SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. ВнутренностиSPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. ВнутренностиOleg Nenashev
 
Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Alexey Kachayev
 
Go для веба глазами PHP-разработчика
Go для веба глазами PHP-разработчикаGo для веба глазами PHP-разработчика
Go для веба глазами PHP-разработчикаUP2IT
 
Heroku for Java developer
Heroku for Java developerHeroku for Java developer
Heroku for Java developerVRPInc
 
Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011
Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011
Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011camp_drupal_ua
 
сервисы создания и хранения презентаций
сервисы создания и хранения презентацийсервисы создания и хранения презентаций
сервисы создания и хранения презентацийmagabova
 
Александр Киракозов "Архитектура загрузчика Яндекс.Диска"
Александр Киракозов "Архитектура загрузчика Яндекс.Диска"Александр Киракозов "Архитектура загрузчика Яндекс.Диска"
Александр Киракозов "Архитектура загрузчика Яндекс.Диска"Yandex
 
Павел Брылов, Skype
Павел Брылов, SkypeПавел Брылов, Skype
Павел Брылов, SkypeOntico
 

Similar to Marrow (20)

Использование сторонних библиотек в веб-приложении
Использование сторонних библиотек в веб-приложенииИспользование сторонних библиотек в веб-приложении
Использование сторонних библиотек в веб-приложении
 
Trening modul2-webinar10
Trening modul2-webinar10Trening modul2-webinar10
Trening modul2-webinar10
 
Yaremchuk - Корпоративные сайты
Yaremchuk - Корпоративные сайтыYaremchuk - Корпоративные сайты
Yaremchuk - Корпоративные сайты
 
Errors Tracker
Errors TrackerErrors Tracker
Errors Tracker
 
Migrate!
Migrate!Migrate!
Migrate!
 
работа с блогом1
работа с блогом1работа с блогом1
работа с блогом1
 
работа с блогом1
работа с блогом1работа с блогом1
работа с блогом1
 
Dev ops.events.v tymoshyk-20-oct-2016
Dev ops.events.v tymoshyk-20-oct-2016Dev ops.events.v tymoshyk-20-oct-2016
Dev ops.events.v tymoshyk-20-oct-2016
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
 
Meet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis BosakMeet Magento Belarus 2015: Denis Bosak
Meet Magento Belarus 2015: Denis Bosak
 
Разработка сложного мультимедийного приложения на JavaScript+HTML5 и PhoneGap...
Разработка сложного мультимедийного приложения на JavaScript+HTML5 и PhoneGap...Разработка сложного мультимедийного приложения на JavaScript+HTML5 и PhoneGap...
Разработка сложного мультимедийного приложения на JavaScript+HTML5 и PhoneGap...
 
Ruby on Rails. Пользовательский интерфейс
Ruby on Rails. Пользовательский интерфейсRuby on Rails. Пользовательский интерфейс
Ruby on Rails. Пользовательский интерфейс
 
SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. ВнутренностиSPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
 
Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)
 
Go для веба глазами PHP-разработчика
Go для веба глазами PHP-разработчикаGo для веба глазами PHP-разработчика
Go для веба глазами PHP-разработчика
 
Heroku for Java developer
Heroku for Java developerHeroku for Java developer
Heroku for Java developer
 
Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011
Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011
Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011
 
сервисы создания и хранения презентаций
сервисы создания и хранения презентацийсервисы создания и хранения презентаций
сервисы создания и хранения презентаций
 
Александр Киракозов "Архитектура загрузчика Яндекс.Диска"
Александр Киракозов "Архитектура загрузчика Яндекс.Диска"Александр Киракозов "Архитектура загрузчика Яндекс.Диска"
Александр Киракозов "Архитектура загрузчика Яндекс.Диска"
 
Павел Брылов, Skype
Павел Брылов, SkypeПавел Брылов, Skype
Павел Брылов, Skype
 

Marrow

  • 1. Marrow Что это такое и с чем готовят?
  • 2. Так что же это такое?
  • 3. Marrow - это... • Механизм создания “песочницы” + загрузчик предоставлюящий возможность загружать файлы как в песочницу, так и в основную страницу. • Шаблон файловой структуры для хранения необходимого количества приложений + автоматическая сборка и тестирование на основе grunt.js. • Набор рецептов позволяющий подготавливать окружение песочницы под конкретное приложение – загрузка зависимостей, отложенная загрузка компонентов. • Механизм транзитов предназначенный для прозрачного линкования api библиотек с песочницы на основную страницу.
  • 5. Первый прототип Создание приложения, которое должно было работать, как по отдельной ссылке так и встраиваться в сайт в качестве виджета. Как это было реализовано: • Был реализован простой загрузчик на основе библиотеки yepnope.js, который загружал в страницу все скрипты и стили. • В iframe загружались все шаблоны для js шаблонизации и потом переносились в основную страницу, чтоб они стали доступны приложению.
  • 6. Проблемы • Первой же проблемой стал конфликт разных версий библиотек, так как они все загружались в основную страницу. • Конфликт некоторых библиотек, которые перезаписывали друг друга. • В тот момент столкнулись с проблемой, когда верстка приложения была не модульной и многие стили пересекались со стилями сайта, что в результате ломало верстку.
  • 7.
  • 8. Второй прототип Самостоятельные эксперементы по запуску несколько приложений с разным набором библиотек на одной странице. Как это было реализовано: • Первоначальный загрузчик и структура были улучшены для возможности хранения нескольких приложений и загрузки их в индивидуальную песочницу. • Общие библиотеки все так же загружались в основную страницу инициализируясь в песочницу. • Добавлена сборка с помощью grunt.js для создания минифицированных версий приложений.
  • 9. Проблемы • Возникли проблемы с библиотеками, которые должны были работать с DOM так как находясь в iframe они с ним и пытались работать. • Небыло возможности загружать разные версии библиотек работающие с DOM. • Приходилось делать много патчей в самих приложениях, чтоб они работали с основной страницей, а не с iframe.
  • 10.
  • 11. Третий прототип Был реализован в качестве демо виджета, который должен был встраиваться в стороние сайты через js инъекцию загрузчика и запускать внутри себя веб- приложение. Как это было реализовано: • Из-за невозможности yepnope.js делать кроссдоменную загрузку ресурсов он был заменен на curl.js + сделаны специальные переменные для конфигов для более просто загрузки ресурсов приложения. • Были созданы рецепты для описания зависимостей и создания окружения в песочнице (переменные, функции и т.д.). • Были созданы транзиты – патчи для библиотек работающих с DOM, чтоб сделать верхнеуровневое прокидывание селекторов на основную страницу
  • 12. Проблемы • Большая проблема реализовать кроссбраузерный транзит для window.location. Возможно он и не нужен... • Для каждой библиотеки работающей с DOM (jQuery, Prototype, MooTools) нужно писать свой транзит.
  • 13.