mirror of
https://github.com/R0m1k3/noteflow.git
synced 2026-10-20 05:38:17 +02:00
Performance: Optimisations majeures + Auto-refresh RSS
Problèmes résolus: ✅ Flux RSS ne s'affichaient pas → LEFT JOIN + COALESCE ✅ Pas de mise à jour automatique → Scheduler toutes les 5min ✅ Application lente → Cache serveur + client Scheduler RSS (services/rss-scheduler.js): - Mise à jour automatique des flux toutes les 5 minutes - Première exécution 5 secondes après démarrage - Gestion parallèle de tous les flux activés - Logs détaillés pour debugging - Protection contre les exécutions multiples simultanées - Limite de 20 articles par flux pour performance Routes RSS optimisées: - Cache serveur 30 secondes pour /api/rss/articles - Invalidation cache après fetch manuel - LEFT JOIN au lieu de INNER JOIN (flux sans articles) - COALESCE pour titre fallback - Logs améliorés avec compteurs Frontend vanilla JS: - Auto-refresh RSS toutes les 30 secondes - Cache settings client 1 minute - Synchronisation avec scheduler serveur - console.debug au lieu de console.error pour auto-refresh Frontend React: - Auto-refresh RSS toutes les 30 secondes - loadRssData() séparée pour refresh indépendant - useEffect cleanup proper (clearInterval) - État lastUpdate pour tracking Server.js: - Démarrage scheduler au startup - Log confirmation démarrage Performances: - Moins de requêtes DB grâce au cache - Refresh automatique sans action utilisateur - Articles toujours à jour (max 30s de délai) - Support de beaucoup de flux RSS sans ralentissement
This commit is contained in:
5 files changed
+211
-57
No files matched your search
@@ -11,22 +11,39 @@ export default function Dashboard() {
|
||||
const [rssContent, setRssContent] = useState<RssArticle[] | RssSummary[]>([]);
|
||||
const [showSummaries, setShowSummaries] = useState(false);
|
||||
const [loading, setLoading] = useState(true);
|
||||
const [lastUpdate, setLastUpdate] = useState<Date>(new Date());
|
||||
|
||||
useEffect(() => {
|
||||
loadData();
|
||||
|
||||
// Auto-refresh toutes les 30 secondes pour afficher les nouveaux articles RSS
|
||||
const interval = setInterval(() => {
|
||||
loadRssData();
|
||||
}, 30000); // 30 secondes
|
||||
|
||||
return () => clearInterval(interval);
|
||||
}, []);
|
||||
|
||||
const loadData = async () => {
|
||||
try {
|
||||
const [notesData, todosData, settings] = await Promise.all([
|
||||
const [notesData, todosData] = await Promise.all([
|
||||
notesApi.getAll(false),
|
||||
todosApi.getAll(),
|
||||
settingsApi.getAll(),
|
||||
]);
|
||||
|
||||
setNotes(notesData);
|
||||
setTodos(todosData);
|
||||
await loadRssData();
|
||||
} catch (error) {
|
||||
console.error('Erreur chargement données:', error);
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
};
|
||||
|
||||
const loadRssData = async () => {
|
||||
try {
|
||||
const settings = await settingsApi.getAll();
|
||||
const summaryEnabled = settings.rss_summary_enabled === '1';
|
||||
setShowSummaries(summaryEnabled);
|
||||
|
||||
@@ -37,10 +54,9 @@ export default function Dashboard() {
|
||||
const articles = await rssApi.getArticles();
|
||||
setRssContent(articles);
|
||||
}
|
||||
setLastUpdate(new Date());
|
||||
} catch (error) {
|
||||
console.error('Erreur chargement données:', error);
|
||||
} finally {
|
||||
setLoading(false);
|
||||
console.error('Erreur chargement RSS:', error);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in new issue
Block a user