Компания Twitter, развивающая популярный сервис микроблогов, анонсировала новый событийно-ориентированный JavaScript-фреймворк Flight, код которого открыт под лицензией MIT. Фреймворк составляет основу клиентской части кода, используемого в новом варианте сайта Twitter, который был введён в строй в прошлом году. Работа Flight протестирована во всех современных браузерах, в том числе в Chrome, Firefox, Safari, Opera и IE7. Из зависимостей используются библиотеки ES5-shim и JQuery.
В отличие от других фреймворков, Flight не навязывает и не предоставляет какие-то конкрентые методы для рендеринга или получения данных. Фреймворк не заботится о том, как именно организован маршрут обработки запросов, какие шаблонизаторы используются и генерируется ли HTML на стороне сервера или клиента. Вместо этого Flight базируется на организации работы поверх уже присутствующей модели DOM, привязывая требуемую функциональность непосредственно к узлам DOM. Подобный подход позволяет не только избежать необходимости задействования дополнительных структур данных, усложняющих архитектуру web-приложения, но и упростить привязку дополнительной функциональности для уже существующих web-приложений.
Архитектура Flight предусматривает строгую изоляцию всех компонентов-обработчиков, которые не могут напрямую взаимодействовать друг с другом, не зависят от других компонентов и не являются элементами дерева объектов. Вместо этого, компоненты должны оформлять действия в виде широковещательных анонсов событий, на которое должны подписываться заинтересованные в них другие компоненты. Когда компонент инициирует событие, он не имеет представления о том, кем и как будет обработано данное событие, что позволяет разрабатывать каждый компонент изолировано, без оглядки на особенности реализации других компонентов - каждый компонент оформляется и распространяется в виде обособленного JavaScript-модуля.
Подписка на обработку определённых типов событий осуществляется с использованием привязки к элементам дерева DOM, при этом таким способом организуется как подписка на нативные события, связанные с узлами DOM, так и на события генерируемые другими компонентами, и те и другие события обрабатываются идентично. В простейшем случае, для реализации нужно функциональности достаточно создать новый компонент и привязать его к DOM-узлу. Пример простейшего web-приложения, созданного с использованием Flight, можно посмотреть здесь, демонстрация работы данного приложения доступна на данной странице.