Автор этого поста пытается дать ответ на вопрос, готов ли новый язык программирования Dart к использованию в боевых условиях на серьезных проектах, и если да, то каким условиям должны удовлетворять эти проекты.
В апреле этого года я с удовольствием посетил лекцию Криса Баккета, на которой он знакомил аудиторию с новейшей платформой для веб-программирования от Google — Dart. К тому моменту Крис уже успел проработать над Dart около полутора лет, постоянно комментируя этот процесс в своем блоге, а также написал книгу «Dart in Action». В принципе, он является одним из ведущих специалистов по Dart (если не самым авторитетным) из всех, кто не работает в Google.
Если вы хотите поближе познакомиться с этим языком, настоятельно рекомендую посмотреть видео с этой лекцией, которую вы найдете здесь. Слайды выложены по этой ссылке (с просмотром в браузере Chrome могут возникать проблемы).
В целом я был очень впечатлен. Язык программирования Dart кажется мне очень красивым, в нем имеется обширная и хорошо продуманная библиотечная поддержка, а также ряд отличных готовых инструментов. Я с удивлением обнаружил, что язык даже снабжен собственной IDE — Dart Editor. Создается впечатление, что эта интегрированная среда разработки основана на очень минималистской (спасибо!) сборке Eclipse*.
Язык может работать либо на собственной виртуальной машине, либо кросс-компилироваться (по всей видимости, исключительно эффективно) в JavaScript, который работает во всех современных браузерах.
К сожалению, вот и первая большая закавыка: а что такое «современный браузер»?
Я спросил Криса, и он ответил, что имеет в виду IE9 или выше, а также последние версии Firefox, Chrome, iOS и Opera. Таким образом, язык не будет работать в IE8 и более старых браузерах. Это объясняется тем, что разработчики из Google стремились предоставить пользователям все самые современные функции.
Теперь я понимаю это; я даже склоняюсь к мысли, что так действительно следовало поступить, но приходится признать, что здесь имеется очевидная проблема.
Незадолго до написания этой статьи я покопался в Интернете и попытался выяснить, какие доли на рынке в настоящее время занимают разные браузеры. Наткнулся на интереснейшую диаграмму:
Ого! Получается, 32% пользователей Интернета до сих пор работают с IE 6, 7 или 8**? Это ведь фактически треть от всей аудитории. Ведь ни один здравомыслящий владелец сайта не откажется от целой трети трафика, верно?
Разумеется, эти показатели отражают усредненную картину, учитывая сотни и даже тысячи сайтов со всего Веба, и могут быть нерепрезентативны для вашего сайта, где распределение трафика по разным браузерам может быть совершенно иным. Итак, давайте уточним ситуацию и познакомимся с данными с сайта Red Gate (по состоянию на 11 апреля 2013 года):
Здесь складывается иная картина: старые браузеры в общей сложности дают ничтожные 10% нашего трафика. Отлично! Почему бы просто не отказаться от поддержки этих браузеров?
Нет, так не выйдет, и вот почему…
Суммы, которые мы зарабатываем за счет пользователей, приходящих к нам через старые браузеры, значительно превышают наши затраты на поддержку версий сайта для этих браузеров. Это верно даже для IE 7, чья аудитория на нашем сайте составляет каких-то 1,2%: мы получаем от этих пользователей гораздо больше денег, чем тратим на поддержку их допотопных, барахлящих старых браузеров, которые действительно давно следовало бы заменить. Вывод: процентные показатели в данном случае могут быть обманчивы, и необходимо также учитывать абсолютное количество пользователей.
Конечно, доля старых браузеров устойчиво снижается, но я не думаю, что они так уж скоро сойдут со сцены. Около 11% наших пользователей до сих пор работают с Windows XP, поэтому вряд ли они в скором времени перейдут на IE выше восьмой версии (правда, кто-то из них может переключиться на Chrome или Firefox). По некоторым источникам, доля IE 8 на рынке снижается примерно на 0,5% в месяц, но я отношусь к этой цифре немного скептически. Даже если она не завышена, то придется ждать еще не менее 2 лет, пока количество пользователей IE 8 снизится до коммерчески незначительной величины.
Похожая ситуация складывается и с операционными системами. Чего стоит тот факт, что Windows XP уже целых 12 лет, но многие пользователи считают, что она «достаточно хороша». Windows 7 потенциально может лишь усугубить эту ситуацию, но, к счастью, Microsoft пошла на решительные шаги и стала продвигать IE 10 через обновления Windows Update. Будем надеяться, что эта стратегия поможет нам своевременно обзаводиться новыми версиями браузеров!
Итак, на настоящий момент мировая экономика по-прежнему испытывает последствия хаоса, спровоцированного финансовым кризисом 2007—2008 года, и в такой ситуации сложно поверить, что многие компании пойдут на потерю 10—20% своих потенциальных посетителей ради даже самой захватывающей клиентской технологии, в данном случае — Dart.
Есть и другая проблема, связанная с потоком задач.
Одна из важнейших черт Dart заключается в том, что он совершенно не зависит от используемых вами серверных технологий. На самом деле, хотя виртуальная машина DartVM доступна для запуска Dart на сервере и вам ничто не мешает воспользоваться этой виртуальной машиной, основной акцент в современной разработке Dart все-таки делается на клиентскую сторону. В частности, это касается создаваемых на Dart одностраничных веб-приложений.
Все это хорошо, но если у вас есть машинный интерфейс, написанный по шаблону MVC, а вы привыкли разрабатывать в Visual Studio как машинный, так и пользовательский интерфейс, то оказываетесь фактически без поддержки. Dart не предоставляет инструментария для работы с Visual Studio, поэтому вам остается просто отказаться от Dart Editor, если вы, конечно, не готовы выстраивать всю интеграцию сами. Работать с Dart тем более неудобно, поскольку он нарушает привычный для вас поток задач. Тем не менее, полагаю, что если Dart продолжит развиваться, эта проблема в долгосрочной перспективе будет решена.
Итак, до конца года мы все-таки дождались выхода стабильной версии Dart, но решитесь ли вы использовать этот язык в реальных боевых проектах? Да, на этот вопрос можно ответить утвердительно, но только если:
- вы абсолютно уверены, что в вашем целевом сегменте рынка не используется браузер IE8 или ниже;
- вы разрабатываете одностраничное приложение (я бы пока не рекомендовал использовать Dart для многостраничных приложений);
- вы привыкли работать на сервере со строго типизированным языком и желаете воспользоваться сильными сторонами строгой типизации и на клиентской стороне;
- вас не пугает перспектива серьезного изменения потока задач, а также вам не придется работать с унаследованным машинным интерфейсом***.
Кроме того, я считаю, что язык Dart лучше подходит для новых проектов, чем для уже существующих. Если вы не уверены в каком-либо из вышеперечисленных пунктов, особенно в первом, то, пожалуй, вам пока не следует прибегать к Dart.
Учитывая все эти соображения, язык Dart представляется значительно более органичным для стартапов, чем для больших компаний. Правда, это ощущение немного не согласуется с такими явно «корпоративными» чертами Dart, которые сближают его со структурированными и строго типизированными языками. У меня складывается впечатление, что язык Dart в принципе сработан добротно, но пока не является идеальным вариантом для достижения каких-либо практических целей. Возможно, со временем язык окрепнет и ситуация изменится, но пока я отношусь к нему скептически.
* ДИСКЛЕЙМЕР: я испытываю пещерную ненависть к Eclipse. Я презираю ее всеми фибрами души. Я скачал Android SDK, поработал с ним около недели, пытаясь написать и развернуть в этой среде приложение для Android. Пришел к выводу, что этот процесс, мягко говоря, убог, как и все мои предыдущие опыты с Eclipse. Уважаемые читатели, обожающие Eclipse, прошу извинить меня за такую резкую оценку. Я остаюсь сторонником таких инструментов, как Visual Studio, WebStorm и IntelliJ, и хотя Eclipse функционально им практически не уступает (а возможно, и превосходит — я не знаю), мне эта IDE кажется совершенно нелогичной.
** Кстати, вы легко найдете источники, в которых приводятся существенно иные данные. Например, в этом посте автор указывает, что IE8 установлен всего у 10% пользователей, и его рыночная доля снижается на 0,5% в месяц.
*** Крис видит здесь отличные перспективы для интеграции с другими технологиями (об этом он говорит в начале своей лекции). Вы гораздо охотнее согласитесь с ним, если привыкли работать с Java/Eclipse, но я бы поспорил с Крисом, так как мой профессиональный опыт в большей степени связан со стеком Microsoft.
Релоцировались? Теперь вы можете комментировать без верификации аккаунта.