Возможности компилятора Kotlin/JS
Kotlin/JS включает возможности компилятора, позволяющие оптимизировать код для повышения производительности, уменьшения размера и ускорения разработки. Это достигается в процессе компиляции: перед генерацией кода JavaScript код Kotlin преобразуется в промежуточное представление (IR).
Ленивая инициализация свойств верхнего уровня
Для повышения производительности запуска приложения компилятор Kotlin/JS выполняет ленивую инициализацию свойств верхнего уровня. Благодаря этому приложение загружается без инициализации всех используемых в его коде свойств верхнего уровня. При запуске инициализируются только необходимые свойства; остальные получают значения позднее, когда выполняется использующий их код.
val a = run {
val result = // intensive computations
println(result)
result
} // value is computed upon the first usage
Если по какой-либо причине вам нужно инициализировать свойство сразу (при запуске приложения), пометьте его аннотацией @EagerInitialization.
Инкрементальная компиляция для бинарных файлов разработки
Компилятор Kotlin/JS предоставляет режим инкрементальной компиляции для бинарных файлов разработки, который ускоряет процесс разработки. В этом режиме компилятор кэширует результаты задачи Gradle compileDevelopmentExecutableKotlinJs на уровне модуля. При последующих компиляциях он использует кэшированные результаты для неизменённых исходных файлов, благодаря чему компиляция завершается быстрее, особенно при небольших изменениях.
Инкрементальная компиляция включена по умолчанию. Чтобы отключить инкрементальную компиляцию для бинарных файлов разработки, добавьте следующую строку в gradle.properties или local.properties проекта:
kotlin.incremental.js.ir=false // true by default
Минификация имён членов в production-сборке
Компилятор Kotlin/JS использует внутреннюю информацию о связях между классами и функциями Kotlin, чтобы эффективнее выполнять минификацию, сокращая имена функций, свойств и классов. Это уменьшает размер итоговых объединённых приложений.
Этот тип минификации применяется автоматически при сборке приложения Kotlin/JS в режиме production и включён по умолчанию. Чтобы отключить минификацию имён членов, используйте параметр компилятора -Xir-minimized-member-names:
kotlin {
js {
compilations.all {
compileTaskProvider.configure {
compilerOptions.freeCompilerArgs.add("-Xir-minimized-member-names=false")
}
}
}
}
Удаление мёртвого кода
Удаление мёртвого кода (DCE) уменьшает размер итогового кода JavaScript, удаляя неиспользуемые свойства, функции и классы.
Неиспользуемые объявления могут появляться, например, в следующих случаях:
Функция встроена в код и никогда не вызывается напрямую (так происходит всегда, за исключением нескольких случаев).
Модуль использует общую библиотеку. Без DCE неиспользуемые части библиотеки всё равно включаются в итоговый пакет. Например, стандартная библиотека Kotlin содержит функции для работы со списками, массивами и последовательностями символов, а также адаптеры для DOM и многое другое. Весь этот функционал занял бы около 1,3 МБ в файле JavaScript. Простому приложению «Привет, мир» нужны только функции работы с консолью, которые занимают всего несколько килобайт в файле.
В компиляторе Kotlin/JS DCE выполняется автоматически:
-
DCE отключена для задач сборки для разработки, которым соответствуют следующие задачи Gradle:
jsBrowserDevelopmentRunjsBrowserDevelopmentWebpackjsNodeDevelopmentRuncompileDevelopmentExecutableKotlinJscompileDevelopmentLibraryKotlinJsДругие задачи Gradle, в названии которых есть «development»
-
DCE включена при сборке production-пакета, которому соответствуют следующие задачи Gradle:
jsBrowserProductionRunjsBrowserProductionWebpackcompileProductionExecutableKotlinJscompileProductionLibraryKotlinJsДругие задачи Gradle, в названии которых есть «production»
С помощью аннотации @JsExport можно указать объявления, которые DCE должна считать корневыми.
© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/js-ir-compiler.html