Skip to content

Commit 77c82ce

Browse files
authored
Cache timetable (#333)
## Изменения <!-- Опишите здесь на языке, понятном каждому, изменения, сделанные в исходном коде по пунктам. --> Добавлено кэширование кнопок, фонтов и расписания ## Детали реализации <!-- Здесь можно описать технические детали по пунктам. --> - Кэширование кнопок и стиля требует 2 онлайн перезапусков приложения (Особенность поведения service‑worker, можно исправить, однако вероятно, будет почти незаметна для пользователей) - Кэширование расписания идёт по стратегии SWR, что ускоряет общий UX даже для online пользователей, однако данные могут оказаться устаревшими до обновления страницы ## Check-List <!-- После сохранения у следующих полей появятся галочки, которые нужно проставить мышкой --> - [ ] Вы проверили свой код перед отправкой запроса? - [ ] Вы написали тесты к реализованным функциям? - [ ] Вы не забыли применить форматирование black и isort для _Back-End_ или Prettier для _Front-End_?
1 parent 8d2de92 commit 77c82ce

2 files changed

Lines changed: 47 additions & 15 deletions

File tree

src/store/timetable.ts

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -51,15 +51,8 @@ export const useTimetableStore = defineStore('timetable', () => {
5151

5252
function setDay(date: Date, eventList: Event[]) {
5353
const key = stringifyDate(date);
54-
55-
if (!days.value.has(key)) {
56-
days.value.set(key, []);
57-
}
58-
59-
for (const e of eventList) {
60-
setEvents(eventList);
61-
days.value.get(key)?.push(e);
62-
}
54+
setEvents(eventList);
55+
days.value.set(key, [...eventList]);
6356
}
6457

6558
function setLecturerEvents(lecturerId: number, eventList: Event[]) {

vitePwaOptions.ts

Lines changed: 45 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,45 @@
1-
import { VitePWAOptions } from 'vite-plugin-pwa';
2-
import { vitePwaManifest } from './vitePwaManifest';
3-
4-
export const vitePWAconfig: Partial<VitePWAOptions> = {
5-
manifest: vitePwaManifest,
6-
};
1+
import { VitePWAOptions } from 'vite-plugin-pwa';
2+
import { vitePwaManifest } from './vitePwaManifest';
3+
4+
export const vitePWAconfig: Partial<VitePWAOptions> = {
5+
manifest: vitePwaManifest,
6+
workbox: {
7+
runtimeCaching: [
8+
{
9+
urlPattern: /^https:\/\/fonts\.googleapis\.com\/.*/i,
10+
handler: 'StaleWhileRevalidate',
11+
options: {
12+
cacheName: 'google-fonts-stylesheets',
13+
},
14+
},
15+
{
16+
urlPattern: /^https:\/\/fonts\.gstatic\.com\/.*/i,
17+
handler: 'CacheFirst',
18+
options: {
19+
cacheName: 'google-fonts-webfonts',
20+
expiration: {
21+
maxEntries: 30,
22+
maxAgeSeconds: 60 * 60 * 24 * 365,
23+
},
24+
cacheableResponse: {
25+
statuses: [0, 200],
26+
},
27+
},
28+
},
29+
{
30+
urlPattern: /^https:\/\/api(?:\.test)?\.profcomff\.com\/timetable\/.*/i,
31+
handler: 'StaleWhileRevalidate',
32+
options: {
33+
cacheName: 'api-timetable',
34+
expiration: {
35+
maxEntries: 30,
36+
maxAgeSeconds: 60 * 60 * 24 * 30,
37+
},
38+
cacheableResponse: {
39+
statuses: [0, 200],
40+
},
41+
},
42+
},
43+
],
44+
},
45+
};

0 commit comments

Comments
 (0)