Spec-Zone.ru › Kotlin 1.4

Устранение мёртвого кода JavaScript (DCE)

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

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

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

Плагин Kotlin/JS 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()
    }
}

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

Spec-Zone.ru

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