USD 97.05 ЕВРО 105.22

Может ли Google Dart решить проблемы скорости и масштабируемости JavaScript?

Аналитика

Большие веб-приложения на JavaScript тяжело разрабатывать и они медленно работают.  Язык Dart от Google может предложить решение обеих этих проблем.

Может ли Google Dart решить проблемы скорости и масштабируемости JavaScript?

Большие веб-приложения на JavaScript тяжело разрабатывать и они медленно работают.  Язык Dart от Google может предложить решение обеих этих проблем.

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

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

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

Большие приложения, как правило, являются модульными, и разные люди отвечают за разработку различных частей. Но JavaScript является динамическим, и поведение объектов может меняться с течением времени. Это очень отличается от  C, C++, Java или C#, и означает, что ваш код необходимо выполнить, чтобы убедиться, что он работает.

Потребность в скорости для Web приложений

В JavaScript, безусловно, присутствовали значительные улучшения скорости в течение большого промежутка  времени, а около пяти лет назад произошёл большой скачок — после введения движка V8 JavaScript от Google. Но очевидно, что разработчики испытывают ограничения скорости с текущим поколением движков JavaScript. Чтобы сделать следующий большой скачок производительности, нужен новый подход.

Одной из возможностей является asm.js —  строго ограниченное подмножество JavaScript, которое не имеет динамических характеристик JavaScript, делающих его трудным для оптимизации.

Как следует из названия, его нужно рассматривать как своего рода язык ассемблера для движков JavaScript. В настоящее время он находится в бета-версии, и продвигается компанией Mozilla.

Как подмножество JavaScript, оно полностью обратно совместимо с существующими движками JavaScript, а в движках, оптимизированных под asm.js,  работает до 50% быстрее, чем обычный JavaScript. Последняя версия Firefox (Версия 22) имеет поддержку  оптимизации asm.js, а демонстрацию технологии можно посмотреть на сайте Mozilla Developer Networks.
Так же, как в C + + или C # разработчики могут использовать более низкий уровень языка для особенно критичного куска кода. Подмножество asm.js может быть использовано разработчиками JavaScript (скорее всего, разработчиками игр) в самых критичных к производительности частях кода. Это не совсем то, что вы бы захотели использовать в написании целого приложения, но это подмножество позволит коду выполняться очень быстро.

На самом деле большинство разработчиков, вероятно, вообще никогда не будут использовать непосредственно asm.js. Скорее всего, они будут использовать C или C + + (или брать существующие C или C + + приложения), а затем компилировать код в asm.js, используя Emscripten транскопилятор.

Крупномасштабное развитие Web App

Подмножество asm.js может дать преимущество в скорости, но, когда дело доходит до разработки крупномасштабных веб-приложений в JavaScript, оно не помогает. Что могло бы помочь, так это язык программирования с открытым исходным кодом, представленный Microsoft под названием TypeScript. Концептуально TypeScript — полная противоположность asm.js: asm.js является подмножеством JavaScript, а TypeScript — его расширением.

Это расширение привносит некоторую структуру в разработки на JavaScript, предлагая: компилятор командной строки, результатом работы которого является обычный JavaScript, проверку типов и интеграцию Visual Studio 2012 через плагин. Что он может сделать, это предоставить преимущество в производительности: TypeScript компилируется в JavaScript, который работает на такой же скорости, как и написанный вручную JavaScript.

Скорость и масштабируемость веб-приложений

Итак, asm.js обещает большую скорость, а Typescript создает среду разработки JavaScript, которая подходит для больших веб-приложений. Но ни один из подходов не предлагает и то и другое.

Вот здесь и появляется Dart от Google. Целью Dart является «полная замена JavaScript, являющегося общим языком веб-разработок на открытую веб-платформу», согласно внутренней электронной почте Google.

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

Приложения, написанные на Dart можно запускать на виртуальной машине Dart (VM), на скорости, примерно в два раза превышающей скорость JavaScript в браузерах, которые его поддерживают. На данный момент, существует поддержка Dart только в кастомной версии браузера компании Google Chromium под названием Dartium, но поддержка, почти наверняка, будет добавлена также в Chrome.

Компилирование в JavaScript

Код также может быть скомпилирован в JavaScript для общей совместимости с браузерами с помощью компилятора dart2js. Несмотря на то, что JavaScript, полученный из Dart не будет работать так быстро, как родной Dart, он будет работать быстрее, чем рукописный JavaScript, по словам Криса Бакета, разработчика программного обеспечения и автора «Dart в действии».

«Когда код преобразуется из Dart в JavaScript, компилятор «встряхивает дерево» (делает оптимизацию)»,  говорит Бакет. В JavaScript нужно добавить целую библиотеку, даже если нужна только одна функция, но благодаря оптимизации, JavaScript полученный из Dart включает в себя только отдельные функции из библиотеки, которые вам нужны, говорит он. Dart также анализирует ваш код и опционально может сделать форму проверки типа и избавить от проверки вручную, которая теперь не является необходимой, говорит Бакет. Он добавляет, что с рукописным JavaScript, разработчики вынуждены писать программу очень осторожно.

Ключевое приложение Dart

Пока не существует планов для браузеров помимо Google по прямой поддержке Dart, так что шансы того, что он станет общим языком Web, очень невелики. Но Бакет утверждает, что двойное преимущество в производительности и простота масштабирования – большие плюсы экосистеме инструментов Dart, а это может означать её распространение.

«В краткосрочной перспективе очень маловероятно, что мы увидим Dart VM в других браузерах, но если появятся ключевые приложения Darts, которые работают очень быстро, в Chrome — что-то вроде следующего Facebook — тогда люди неизбежно скажут «давайте включим его поддержку в нашем браузере», говорит Бакет. «Это особенно актуально для мобильных браузеров, так как JavaScript сокращает время работы батареи».

Хорошей новостью для разработчиков JavaScript является то, что их навыки в JavaScript довольно легко конвертировать в Dart, хотя они, вероятно, найдут Dart более ограниченным по сравнению с JavaScript. Но для тех, кто привык к развивающимся серверным языкам, как Java или C #, эти ограничения не покажутся слишком обременительными.