Кэширование вычислений — важный аспект работы с реактивными библиотеками, таких как Petite-Vue. Оно позволяет оптимизировать производительность приложения, минимизируя повторные вычисления зависимых значений. В Petite-Vue для этого используется механизм computed properties, который обеспечивает ленивую и эффективную переработку данных.
В Petite-Vue реактивные данные создаются через объект, передаваемый в
createApp. Любое изменение реактивного свойства вызывает
обновление связанных с ним элементов интерфейса.
const app = PetiteVue.createApp({
a: 5,
b: 10,
sum() {
return this.a + this.b;
}
}).mount();
В этом примере функция sum вычисляется каждый раз при
обращении. Если sum вызывается часто, это может приводить к
избыточным вычислениям, особенно при сложных вычислениях или большом
объёме данных.
Computed свойства создаются через функцию
computed, которая автоматически кэширует результат до тех
пор, пока не изменятся зависимые свойства.
const app = PetiteVue.createApp({
a: 5,
b: 10,
sum: PetiteVue.computed(function () {
console.log('Вычисляем сумму');
return this.a + this.b;
})
}).mount();
sum функция выполняется, и
результат сохраняется.a и b не
изменились, возвращается кэшированное значение.Это особенно полезно при сложных вычислениях, фильтрации массивов или работе с большими объектами.
const app = PetiteVue.createApp({
items: [
{ name: 'Apple', category: 'fruit' },
{ name: 'Carrot', category: 'vegetable' },
{ name: 'Banana', category: 'fruit' }
],
selectedCategory: 'fruit',
filteredItems: PetiteVue.computed(function () {
console.log('Фильтруем массив');
return this.items.filter(item => item.category === this.selectedCategory);
})
}).mount();
filteredItems будет пересчитываться только при
изменении items или selectedCategory.filteredItems не вызывает лишних фильтраций
массива.Computed свойства в Petite-Vue по умолчанию ленивые, то есть функция выполняется только при первом обращении. Иногда требуется немедленное вычисление для предварительной подготовки данных:
const app = PetiteVue.createApp({
a: 3,
b: 7,
sum: PetiteVue.computed(function () {
return this.a + this.b;
}, { lazy: false })
}).mount();
lazy: false заставляет вычисление выполняться
сразу при создании приложения.Computed свойства могут зависеть друг от друга, образуя цепочки:
const app = PetiteVue.createApp({
a: 2,
b: 3,
sum: PetiteVue.computed(function () {
return this.a + this.b;
}),
doubleSum: PetiteVue.computed(function () {
return this.sum * 2;
})
}).mount();
a или b сначала
пересчитывается sum, затем doubleSum.doubleSum
вычисляется только один раз за одно изменение исходных данных.reactive, ref).Кэширование вычислений через computed свойства является ключевым инструментом оптимизации в Petite-Vue. Оно позволяет поддерживать реактивность, сохраняя высокую производительность даже при больших объёмах данных или сложных зависимостях.