Spec-Zone.ru › Kotlin 1.9

Исключение неиспользуемого кода в Kotlin/JS

Плагин Kotlin Multiplatform Gradle включает инструмент исключения неиспользуемого кода (DCE). Исключение неиспользуемого кода также часто называется удалением неиспользуемого кода. Оно уменьшает размер результирующего JavaScript-кода, удаляя неиспользуемые свойства, функции и классы.

Неиспользуемые объявления могут появляться в таких случаях:

  • Функция инлайнизирована и никогда не вызывается напрямую (что происходит всегда, за исключением нескольких ситуаций).

  • Модуль использует общую библиотеку. Без DCE части библиотеки, которые вы не используете, всё равно включаются в результирующий бандл. Например, стандартная библиотека Kotlin содержит функции для работы со списками, массивами, последовательностями символов, адаптерами для DOM и так далее. Все эти функции занимали бы около 1,3 МБ в виде JavaScript-файла. Простое приложение «Hello, world» нуждается только в функциях для работы с консолью, что составляет всего несколько килобайт для всего файла.

Плагин Kotlin Multiplatform Gradle автоматически обрабатывает DCE при создании бандла для производства, например, с помощью задачи browserProductionWebpack. Задачи сборки для разработки (например, browserDevelopmentWebpack) не включают DCE.

Исключение объявлений из DCE

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

Чтобы предотвратить удаление определённых объявлений, добавьте блок dceTask в свой скрипт Gradle и перечислите объявления как аргументы функции keep. Аргументом должно быть полное квалифицированное имя объявления с префиксом имени модуля: moduleName.dot.separated.package.name.declarationName

Если не указано иное, имена функций и модулей могут быть изменены в сгенерированном JavaScript-коде. Чтобы предотвратить удаление таких функций, используйте изменённые имена в аргументах keep в соответствии с их видом в сгенерированном JavaScript-коде.

kotlin {
    js {
        browser {
            dceTask {
                keep("myKotlinJSModule.org.example.getName", "myKotlinJSModule.org.example.User" )
            }
            binaries.executable()
        }
    }
}

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

Исключение целых пакетов или модулей из удаления может помешать DCE удалить множество неиспользуемых объявлений. Поэтому предпочтительно выбирать отдельные объявления, которые нужно исключить из DCE, по одному.

Отключение DCE

Чтобы полностью отключить DCE, используйте опцию devMode в dceTask:

kotlin {
    js {
        browser {
            dceTask {
                dceOptions.devMode = true
            }
        }
        binaries.executable()
    }
}
Последнее изменение: 19 июня 2023 г.
Запуск тестов в Kotlin/JS Компилятор Kotlin/JS IR

© 2010–2023 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/javascript-dce.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API