TypeScript производительность (asm.js, компилятор закрытия) и накладные расходы

Я изучаю использование TypeScript в сочетании с MVC на стороне клиента (скорее всего Backbone.js + Marionette.js или Ember.js) для будущих проектов и поэтому имеет несколько вопросов, связанных с производительностью и оптимизацией:

  • Как результат TypeScript сравнивается с характеристикой собственного JavaScript?

  • Так как asm.js является подмножеством JavaScript, можно ли преобразовать код TypeScript в код asm.js? Если да, возможно ли это?

  • Возможно ли и по-прежнему полезно создавать сборки проектов AMD, которые используют TypeScript с Google Closure compiler?

  • Сколько накладных расходов TypeScript добавить в среднем, размер файла мудрый?

  • При использовании таких легких библиотек, как Backbone.js, например, в небольшом проекте. Имеет ли смысл использовать TypeScript в отношении размера файла?

Мне нравятся дополнительные преимущества TypeScript, но я не хочу жертвовать производительностью для стиля кодирования и ввода текста.

Любые статьи/книги об использовании TypeScript в больших проектах, особенно связанных с производительностью, оптимизациями и сборками, очень приветствуются!

Заранее благодарю!

Ответы

Ответ 1

Мы тщательно и тщательно тестировали TypeScript в нашей команде, а другие команды уже использовали его, поэтому вот мой опыт:

  • TypeScript является надмножеством JavaScript и в основном переводит 1:1 на JavaScript без каких-либо значительных компрометаций производительности, поэтому, если вы знаете, как писать эффективный JavaScript, вы знаете, как писать эффективные TypeScript. Одной из не очень эффективных функций является наследование, которое "эмулируется" с использованием прототипов JavaScript и создает больше кода, чем обычно писал бы в JavaScript. Поэтому используйте наследование с осторожностью. Вы можете посмотреть сгенерированный JavaScript, чтобы узнать, достаточно ли скомпилированы ваши конструкции для вашего случая.
  • Компиляция TypeScript в asm.js та же проблема, что и для компиляции JavaScript в asm.js - вам нужно будет эмулировать функции asm.js, отсутствующие по сравнению с полным javascript... Если вам нужны некоторые части в asm.js вам, вероятно, придется написать их самостоятельно или скомпилировать из более подходящего (менее динамичного) языка emscripten и т.д.
  • TypeScript имеет некоторую поддержку AMD, но я не могу говорить о поддержке закрытия Google... Так как она пытается выполнить подобную вещь очень по-разному (типы и метаинфо в комментариях вместо этого в новом синтаксисе), я не думаю, что они очень совместимы, чтобы использовать максимум обоих...
  • Размер файла на самом деле не проблема, он очень похож на размер файла читаемого JavaScript, если вы не используете наследование много
  • Использование TypeScript с базой и другими библиотеками имеет одно преимущество по сравнению с JavaScript; большинство популярных библиотек уже имеют файлы определения типов для TypeScript, поэтому вы получаете автозаполнение и проверку типов почти бесплатно. Разница в размере файла не является проблемой по сравнению с хорошо написанным JavaScript.

TypeScript все еще довольно молод, и многие вещи, которые мы хотели иметь (JSLint, покрытие кода, TDD, инструменты BDD,...) в то время отсутствовали. Кроме того, в компиляторе было несколько ошибок (которые были исправлены впоследствии), поэтому мы не решили использовать его, но ни одна точка из вашего списка не показала нам реальный откат...

Обновление: Чтобы увидеть потенциал TypeScript, вы можете посмотреть на Visual Studio Online "Монако". То, что они там сделали, довольно впечатляет, см. Начало работы с TypeScript для быстрого ввода