`

СПЕЦИАЛЬНЫЕ
ПАРТНЕРЫ
ПРОЕКТА

Архив номеров

Как изменилось финансирование ИТ-направления в вашей организации?

Best CIO

Определение наиболее профессиональных ИТ-управленцев, лидеров и экспертов в своих отраслях

Человек года

Кто внес наибольший вклад в развитие украинского ИТ-рынка.

Продукт года

Награды «Продукт года» еженедельника «Компьютерное обозрение» за наиболее выдающиеся ИТ-товары

 

Microsoft Volta: обходной маневр

Статья опубликована в №16 (633) от 22 апреля

+11
голос

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

Хитросплетения Всемирной Паутины

Microsoft Volta обходной маневр
После установки Volta в Visual Studio 2008 появляются новые типы проектов

Весьма часто в хаотической конкурентной борьбе побеждает не по-настоящему достойное признания решение, а то, которое лишь оказалось в нужном месте в нужное время. В современном веб-программировании сложилась именно такая ситуация: бесчисленное количество стандартов и технологий, множество тонкостей и нюансов различных браузеров и платформ по меньшей мере затрудняют процесс разработки, а в худшем случае превращают его в сущий кошмар. И, к сожалению, каких-либо явных тенденций к исправлению существующего положения вещей не наблюдается, наоборот, оно скорее продолжает усугубляться: выходят очередные версии браузеров (нередко несовместимые не только друг с другом, но и со своими же предыдущими релизами), спонтанно развиваются веб-стандарты, появляются новые технологии, нацеленные не на обеспечение более высокого уровня качества и удобства, а на решение каких-то конкретных проблем.

Конечно, мы не собираемся пророчить очередной апокалипсис, а лишь хотим обратить внимание на постоянное усложнение и удорожание веб-приложений на этапах как создания, так и сопровождения. Тем самым практически нивелируется рост производительности труда разработчиков, который должен был бы стать следствием развития инструментальных средств, применения новых методов и технологий. Если в ИТ и существует более яркий пример сизифова труда, то его нужно хорошенько поискать.

В то же время разработчики традиционных десктопных и клиент-серверных приложений сегодня гораздо реже сталкиваются с подобными сложностями, а для некоторых схожих проблем у них уже есть достаточно эффективные решения. К примеру, известное Windows-разработчикам явление DLL Hell, по своей сути напоминающее многообразие браузеров и веб-платформ, фактически исчезло в .NET Framework за счет монолитности среды исполнения и возможности параллельной установки нескольких ее версий с тем, чтобы .NET-приложение использовало именно ту, для которой изначально предназначалось.

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

Впрочем, попытки свести десктопную и веб-разработку к некоему общему знаменателю не прекращаются, и если сделать это «в лоб» (т. е. на основе исключительно десктопных инструментов) не получилось, то сейчас рассматриваются обходные пути, главной идеей которых является признание, хоть и с определенными оговорками, права на существование специализированных решений. Один из таких подходов сегодня предлагается корпорацией Microsoft в виде технологии Volta, все еще дорабатывающейся в исследовательском подразделении Microsoft Live Labs, но уже доступной для ознакомления всем желающим.

Как мы к этому пришли

Microsoft Volta обходной маневр
Веб-сервер в составе Volta облегчает отладку приложений и принятие решений об архитектурном рефакторинге

Прежде чем перейти к рассмотрению непосредственно Microsoft Volta, следует немного остановиться на нескольких важных вопросах конструирования и функционирования веб-приложений – чтобы глубже понять существующие проблемы и проанализировать возможные пути их решения. А вначале рассмотрим основной инструмент, хорошо знакомый и пользователям, и разработчикам – браузер.

По сути, браузер представляет собой программу, отображающую DHTML-документы, которые формируются из статичного языка HTML, обеспечивающего разметку документа; скриптового языка JavaScript, исполняемого на стороне клиента и позволяющего создавать интерактивные элементы, и каскадных таблиц стилей CSS. Кроме того, они описываются объектной моделью DOM, предоставляющей программный интерфейс для управления содержимым. Для интерпретации форматов данных, которые изначально не поддерживаются браузером, возможно использование различных подключаемых модулей.

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

Изначально браузеры были ориентированы на демонстрацию статического HTML, их взаимосвязь с сервером ограничивалась исключительно запросом страниц. Позже они приобрели возможность обмениваться информацией с сервером, т. е. не только загружать, но и отправлять ее обратно. Это, однако, не привело к какому бы то ни было радикальному пересмотру предназначения и, соответственно, реализации браузеров – они все так же остались программами для просмотра веб-страниц.

Функционирование типичного веб-приложения существенно отличается от традиционного клиент-серверного. В частности, для первого предполагается существование некоего сервера, готового отвечать на запросы браузеров, возвращая им гипертекстовые документы. Отдельные страницы или их части могут быть статическими и не изменяются от одного клиента к другому, а другие являются динамическими и автоматически формируются в зависимости от различных условий, например от состояния определенных данных в СУБД. Браузеры, считывая одни документы, могут запрашивать другие, а также передавать данные посредством GET- или POST-запросов, обрабатываемых сервером в зависимости от реализованной бизнес-логики.

Таким образом, принципиальное отличие веб-приложения состоит в функционировании браузера как средства отображения документов, в котором лишь имитируется работа какой-то программы. То есть фактически браузер не является полноценной платформой подобно ОС или runtime-среде вроде Java, а всего лишь имитирует ее, притом с существенными ограничениями, затрудняющими исполнение этой роли. К примеру, стандартно браузер не поддерживает постоянного соединения с сервером, и каждый запрос обрабатывается как новый без всякой связи с предыдущим, аналогично браузер не предоставляет какого-либо локального хранилища данных за исключением плохо подходящих для этой цели cookies.

Microsoft Volta обходной маневр
Архитектурный рефакторинг по версии Volta может быть проведен на финальных этапах работы над проектом

С программированием серверной части также складывалось не все просто. Браузерам необходимо было возвращать корректно отформатированный HTML, для чего традиционные языки и технологии программирования подходили не очень хорошо, – тогда их место заняли специализированные языки вроде PHP, позволяющие внедрять в шаблоны на базе статического HTML динамически изменяемые элементы. Когда дело касалось сравнительно несложных задач, то подобные решения вполне оправдывали себя, но для достаточно масштабных их использование было чересчур трудоемким. Поэтому нишу крупных проектов заняли ASP.NET и JSP, основанные на универсальных технологиях программирования, но окончательно вытеснить более простые специализированные языки им так и не удалось.

Независимо от избранных инструментов проще всего создать серверный компонент, генерирующий для браузера статические страницы – в таком случае разработчик избавляется от необходимости программирования и отладки клиентского JavaScript-кода. Но, как это нередко бывает, то, что удобно для разработчиков, не слишком по душе пользователям. В частности, последним не хватало отзывчивости и интерактивности веб-приложений – многочисленные переходы между страницами и вынужденное ожидание никого в восторг не приводили. Таким образом, фокус все же сместился на клиентскую сторону, в результате чего появилась и быстро приобрела популярность технология Ajax – по своей сути она не была чем-то принципиально новым, просто позволила использовать существующие возможности в новом качестве. Кроме всего прочего, большинство современных ПК обладают незаурядной вычислительной мощью, и перенесение части нагрузки с сервера на клиент помогает радикальным образом повысить масштабируемость решений.

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

Итак, большинство современных веб-приложений состоит как минимум из двух программных уровней: серверного, отвечающего за формирование веб-страниц и взаимодействие с браузерами, и клиентского, функционирующего в рамках браузера и обеспечивающего взаимодействие с пользователем. По ироничному стечению обстоятельств, знания и навыки, необходимые для создания каждого из них, почти не пересекаются, даже между языками Java и JavaScript общего гораздо меньше, чем обещают их названия.

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

Таким образом, независимо от используемых серверных технологий клиентскую часть все равно придется программировать на JavaScript. Но чем больше объем этого кода, тем сложнее разработка и выше риск несовместимости браузеров. Естественно, грамотное архитектурное решение (т. е. разделение серверной и клиентской составляющих) позволяет нивелировать данную проблему, однако даже минимальные ошибки на этапе проектирования способны привести к непрогнозируемому увеличению сложности проекта.

Volta пытается изменить мир

Microsoft Volta обходной маневр
Код этого онлайнового словаря, похожего на Google Suggest, полностью написан на C#, однако Volta позволила оформить его в Ajax-приложение

Именно на описанную в предыдущем разделе ситуацию и обратили внимание создатели Volta, и, как и положено амбициозным исследователям, решили предложить едва ли не панацею. Конечно, сейчас еще рано судить о том, сможет ли новая технология изменить мир веб-разработки к лучшему, но выглядит она, по меньшей мере, многообещающе.

Итак, Volta призвана обеспечить создание веб-приложений исключительно средствами .NET, совершенно не заботясь о разработке клиентского JavaScript-кода. На первый взгляд, подобными свойствами уже обладает ASP.NET, генерирующая отдельные клиентские скрипты, а также ASP.NET Ajax, которая содержит обширную библиотеку скриптов для построения интерактивных веб-страниц, осуществляющих обмен данными с сервером в асинхронном режиме. Однако обе эти технологии хотя и упрощают разработку клиентского уровня, требуют принятия важных архитектурных решений на начальных стадиях выполнения проекта. В отличие от них Volta позволяет не заботиться об этом вплоть до финальной сборки веб-приложения и создавать монолитное решение с использованием всех возможностей платформы .NET. Разбить его на уровни можно будет уже по завершении реализации основной логики, в зависимости от текущих потребностей. Причем не придется даже модифицировать код приложения – достаточно пометить соответствующими атрибутами фрагменты, отнесенные к клиентскому уровню.

Фактически Volta представляет собой «перекомпилятор» промежуточного языка MSIL, транслирующий его в клиентский JavaScript-код. При этом автоматически генерируется вся необходимая функциональность по организации обмена данными между сервером и клиентом с тем, чтобы многоуровневое приложение исполнялось таким же образом, как и исходное монолитное. Все это, в частности, подразумевает, что Volta совместима с любыми языками и сторонними библиотеками для .NET Framework, поскольку их код переводится в MSIL на этапе компиляции.

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

На первый взгляд, идея Volta достаточно проста, но она предоставляет своего рода революцию в веб-разработке – теперь браузер превращается в платформу для развертывания приложений, программирование которых существенно облегчается за счет того, что решение создается монолитным с использованием всех возможностей .NET, а разделение уровней производится на завершающих стадиях проекта, когда для оценки функционирования ПО можно применять специальные инструменты. При этом необходимые архитектурные коррективы вносятся совершенно просто, тогда как для традиционных подходов это нередко выливается в большие затраты.

Сами разработчики акцентируют внимание на следующих достоинствах Volta:

  • архитектурный рефакторинг, т. е. возможность почти произвольного разделения монолитного CLR-приложения на серверный и клиентский уровни (в предположении, что последний будет выполняться в браузере). Помимо перекомпиляции из MSIL в JavaScript автоматически реализуется вся необходимая вспомогательная функциональность, в частности обеспечивающая коммуникации между уровнями;
  • легкая смена целевой платформы, т. е. перенос функциональности между серверным и клиентским уровнями даже после завершения разработки как таковой. Более широко это качество можно трактовать как своеобразную кросс-платформенность .NET-приложений, поскольку все они компилируются в MSIL-код. Причем ничто не мешает выполнить подобную операцию и со сторонним приложением, даже при отсутствии исходных текстов;
  • кросс-браузерная поддержка – таким термином создатели Volta нарекли возможность автоматической генерации кода, адаптированного для различных браузеров. Уже сейчас есть ознакомительные версии Volta XUL, обеспечивающие поддержку Mozilla XUL – основанного на XML языка построения интерфейсов для RIA, который будет стандартно присутствовать в FireFox 3.0.

В отдаленной перспективе идеи Volta можно развить до почти фантастического уровня. Что, если разбиением монолитного приложения на клиентскую и серверную составляющие будет заниматься не разработчик, а сервер – в автоматическом режиме в зависимости от технических возможностей клиента? А если вместо JavaScript будет генерироваться код для платформы Silverlight, с которой DHTML (в области графики) и JavaScript (по чистой производительности) нельзя даже сравнивать? (Кстати, сомневающимся в последнем утверждении достаточно познакомиться с Silverlight Chess, где в шахматы «сам с собой» играет один и тот же алгоритм, реализованный в виде JavaScript-приложения и .NET-приложения для Silverlight, причем второй вариант безоговорочно побеждает, поскольку за одно и то же время успевает просчитывать в среднем в тысячу раз больше ходов). А ведь вовсе не обязательно ограничиваться только веб-приложениями и двумя уровнями?

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

Текущее состояние Volta

Microsoft Volta обходной маневр
Volta позволяет просто решать крайне трудоемкие для JavaScript задачи, например, выводить трехмерную графику

На сегодня Microsoft Volta доступна для ознакомления (как Technology Preview). Дистрибутив занимает чуть более 10 МБ, инсталлируемые средства интегрируются в Visual Studio 2008. В частности, появляются соответствующие типы проектов, в свойствах которых имеется вкладка, определяющая поведение Volta-инструментария, а в меню Refactor становится доступной новая команда, позволяющая явно задавать уровень для исполнения отдельных классов. Также развертывается веб-сервер для отладки таких приложений.

Кроме того, в процессе установки Volta создается кэш отдельных пространств имен платформы .NET Framework на JavaScript – фактически происходит трансляция MSIL-сборок, так что на выходе получается вариант .NET, который может исполняться скриптовым движком браузера. В дальнейшем разработчики обещают существенно расширить объем транслируемого кода (пока он ограничен подмножеством Base Class Library). Дополнительно Volta предоставляет собственное пространство имен, а также надстройки над некоторыми SDK (например, Virtual Earth Interactive SDK), упрощающими создание приложений и их применение.

Отдельные возможности Volta весьма примечательны, например, разработчики гордятся поддержкой трехмерной графики, что при программировании непосредственно на JavaScript реализуется весьма нетривиально. Кроме того, Volta поддерживает не только проекты ASP.NET, но и приложения Windows Forms – в этом случае отдельные классы могут быть помечены атрибутом RunAt(«Server»), что позволит им исполняться в качестве веб-сервиса, при этом вся необходимая «обвязка» будет выполнена автоматически.

Конечно, данной технологии также присущи определенные ограничения, многие из которых, впрочем, обусловлены ее ознакомительным статусом и должны быть со временем устранены разработчиками – в частности, пока не выполнена оптимизация скорости, о применении в серьезных проектах речь не идет. Впрочем, прозрачность Volta для программиста открывает широкий простор для экспериментов – в конце концов, если трансляция в JavaScript не будет работать как положено, ее можно попросту отключить.

Заключение

К сожалению, создатели Volta пока не указывают никаких конкретных сроков или даже названий будущих продуктов для разработчиков, в составе которых их детище должно увидеть свет. Известно только, что с момента своего представления публике технология вызвала всеобщее одобрение со стороны .NET-программистов, и потому Microsoft должна быть заинтересована выпустить ее в составе обновления Visual Studio или в качестве дополнения к этой IDE.

Тем более что даже у такого оригинального подхода, оказывается, есть конкуренты. Одним из них является открытый проект Google Web Toolkit (GWT), обеспечивающий автоматическую трансляцию из Java в JavaScript для построения Ajax-приложений. Конечно, это не прямой аналог, потому что преследуются немного иные цели (соответственно, нет и архитектурного рефакторинга), однако технологическая разница не слишком велика и ничто не помешает Google при желании несколько расширить сферу применения GWT.

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

Сайт автора: koldovsky.com

+11
голос

Напечатать Отправить другу

Читайте также

 
 
IDC
Реклама

  •  Home  •  Рынок  •  ИТ-директор  •  CloudComputing  •  Hard  •  Soft  •  Сети  •  Безопасность  •  Наука  •  IoT