Кеширование запросов является важной частью оптимизации фронтенд-приложений, обеспечивая снижение количества сетевых обращений и ускорение отклика интерфейса. В Quasar Framework кеширование может быть реализовано как на уровне компонентов, так и с использованием сторонних библиотек, интегрируемых через Vue.js.
Quasar интегрируется с Vuex, что позволяет хранить результаты API-запросов в централизованном состоянии. Основной подход включает следующие шаги:
export const state = () => ({
cache: {}
});
export const mutations = {
setCache(state, { key, data }) {
state.cache[key] = {
data,
timestamp: Date.now()
};
}
};
export const getters = {
getCache: (state) => (key, maxAge = 60000) => {
const item = state.cache[key];
if (!item) return null;
if (Date.now() - item.timestamp > maxAge) return null;
return item.data;
}
};
async function fetchData(store, key, fetchFunction) {
const cached = store.getters['cache/getCache'](key);
if (cached) return cached;
const data = await fetchFunction();
store.commit('cache/setCache', { key, data });
return data;
}
Такой подход позволяет контролировать время жизни кеша
(maxAge) и минимизировать повторные сетевые запросы.
Quasar имеет встроенную поддержку плагинов, и один из наиболее распространённых вариантов — интеграция axios с кешированием. Можно создать собственный плагин:
import { boot } from 'quasar/wrappers';
import axios from 'axios';
const cache = {};
export default boot(({ app }) => {
app.config.globalProperties.$axios = async (url, options = {}) => {
const key = url + JSON.stringify(options);
if (cache[key]) return cache[key];
const response = await axios(url, options);
cache[key] = response.data;
return response.data;
};
});
Особенности такого подхода:
При реализации кеширования важно определять стратегию:
Cache-first Сначала возвращается кешированная версия данных, если она существует, и затем, при необходимости, выполняется обновление в фоне. Подходит для интерфейсов с большим количеством повторяющихся запросов.
Network-first Сначала выполняется запрос к серверу, а кеш обновляется только после успешного ответа. Подходит для данных, требующих актуальности.
Stale-while-revalidate Возвращается устаревший кеш, но одновременно запускается обновление данных с сервера. Этот метод снижает задержки и сохраняет актуальность информации.
Для хранения кеша между сессиями можно использовать Quasar Storage API:
import { LocalStorage } from 'quasar';
function setCache(key, data, ttl = 60000) {
const item = { data, expiry: Date.now() + ttl };
LocalStorage.set(key, item);
}
function getCache(key) {
const item = LocalStorage.getItem(key);
if (!item) return null;
if (Date.now() > item.expiry) {
LocalStorage.remove(key);
return null;
}
return item.data;
}
При использовании Composition API Quasar можно создать хук для кешированных запросов:
import { ref } from 'vue';
export function useCachedFetch(key, fetchFunction, store) {
const data = ref(null);
const loading = ref(false);
const load = async () => {
loading.value = true;
const cached = store.getters['cache/getCache'](key);
if (cached) {
data.value = cached;
} else {
data.value = await fetchFunction();
store.commit('cache/setCache', { key, data: data.value });
}
loading.value = false;
};
return { data, loading, load };
}
Эти методы обеспечивают высокую производительность и сокращают задержки при работе с сетевыми запросами в приложениях на Quasar Framework.