Это хороший вопрос, на который у нас нет простого ответа.
С помощью можно определить, есть ли у отдельного компонента значения, которые могут изменяться - svelte.compile(...)
возвращает объект со свойством vars
, которое представляет собой массив всех значений внутри компонента. Проверка этого массива покажет вам, какие значения никогда не переназначаются или не изменяются. (Он не скажет вам, есть ли у компонента обработчики событий, которые имеют побочные эффекты, но которые не влияют на состояние, что также необходимо для определения того, является ли компонент полностью статичным. мог бы добавить в будущем выпуск 3.x.)
Но это только половина истории. Рассмотрим компонент, который объявляет name
prop ...
<script>
export let name;
</script>
<h1>Hello {name}!</h1>
... и который используется в вашем приложении примерно так:
<Greeting name="world"/>
Что касается компилятора, когда он компилирует компонент <Greeting>
, значение name
может измениться в любой момент, поэтому небезопасно рассматривать его как полностью статический. Но если бы оно могло более целостно понимать ваше приложение, оно могло бы заменить {name}
на world
, что имело бы различные преимущества.
При увлажнении Svelte предполагает, что может существовать несоответствие между существующим DOM и тем, что должно быть там. Во многих ситуациях было бы безопасно предположить иное, и пропустить проверку поддеревьев, которые, как он знал, были статическими, что избавило бы от необходимости включать их в сгенерированный JS.
Как компилятор, Svelte необычайно хорошо расположен, чтобы иметь возможность использовать преимущества этих методов, но это работа, которую мы еще не предприняли. В идеале мы сможем обновить компилятор таким образом, чтобы ваши приложения стали меньше без каких-либо изменений. Если вы заинтересованы в том, чтобы начать экспериментировать с тем, что возможно в это время, то свойство vars
, возвращаемое из svelte.compile(...)
(а также свойство ast
, я полагаю), - это то место, с которого нужно начинать.