Tech-News: Analýza problému a návrh řešení
🔴 Zjištěné problémy
1. Obrovská velikost stránky
Soubor: _site/tech-news/index.html
Velikost: 6.4 MB
Řádky: 163,250
Důsledky:
- Pomalé načítání stránky
- Vysoká spotřeba dat
- Problémy s výkonem prohlížeče
- Špatné SEO
2. Nadměrný počet článků v kolekci
Celkem článků v _tech_news/: 2,478
Nejstarší článek: 23. září 2025
Nejnovější článek: 29. října 2025
Rozsah: více než měsíc
Rozdělení podle období:
- Dnes (30.10.): 0 článků
- Včera (29.10.): 1 článek
- Poslední týden (23-29.10.): 263 článků
- Celkem: 2,478 článků
3. Chybějící filtrace podle data
Layout tech_news_index.html (řádky 26-29):
Problém:
- ❌ Načítá VŠECH 2,478 článků z kolekce
- ❌ Žádná filtrace podle data (24 hodin)
- ❌ Jen limit 18 článků, ale po načtení všech
- ❌ Jekyll musí při každém buildu zpracovat všechny články
4. Neefektivní build proces
Současný stav:
- Jekyll načte všech 2,478 článků do paměti
- Seřadí je podle publishedAt
- Vezme prvních 18
- Vygeneruje 6.4 MB HTML soubor
Výsledek:
- Dlouhý build čas
- Vysoká spotřeba paměti
- Neefektivní využití zdrojů
💡 Navrhovaná řešení
Řešení A: Cleanup + Filtrace (DOPORUČENO)
1. Automatický cleanup starých článků
Vytvořit skript .github/scripts/cleanup_old_tech_news.py:
#!/usr/bin/env python3
"""
Cleanup starých tech-news článků
Ponechá pouze články za posledních 7 dní
"""
from pathlib import Path
from datetime import datetime, timedelta, timezone
import re
def cleanup_old_articles(days_to_keep=7):
tech_news_dir = Path('_tech_news')
cutoff_date = datetime.now(timezone.utc) - timedelta(days=days_to_keep)
removed_count = 0
kept_count = 0
for article_file in tech_news_dir.glob('*.md'):
if article_file.name == 'index.md':
continue
# Extrahovat datum z názvu souboru (YYYY-MM-DD)
match = re.match(r'(\d{4}-\d{2}-\d{2})-', article_file.name)
if not match:
continue
article_date = datetime.fromisoformat(match.group(1)).replace(tzinfo=timezone.utc)
if article_date < cutoff_date:
article_file.unlink()
removed_count += 1
else:
kept_count += 1
print(f"✅ Cleanup dokončen")
print(f" Smazáno: {removed_count} článků")
print(f" Ponecháno: {kept_count} článků")
return removed_count, kept_count
if __name__ == "__main__":
cleanup_old_articles(days_to_keep=7)
2. Přidat cleanup do GitHub Actions workflow
.github/workflows/tech-news.yml - přidat před build:
- name: Cleanup old tech-news articles
run: python .github/scripts/cleanup_old_tech_news.py
3. Filtrovat v layoutu podle data
Aktualizovat _layouts/tech_news_index.html (řádky 26-34):
Výhody:
- ✅ Zobrazí jen relevantní články (24-48 hodin)
- ✅ Automatický cleanup snižuje velikost kolekce
- ✅ Zachovává historii v denních stránkách
- ✅ Snížení velikosti HTML na ~100-200 KB
Řešení B: Redirect na denní stránku
Změnit /tech-news/ na redirect:
_pages/tech-news.md:
---
layout: tech_news_redirect
title: Technologické zprávy
permalink: /tech-news/
---
_layouts/tech_news_redirect.html:
---
layout: default
---
<script>
// Přesměrovat na nejnovější denní stránku
const today = new Date();
const yyyy = today.getFullYear();
const mm = String(today.getMonth() + 1).padStart(2, '0');
const dd = String(today.getDate()).padStart(2, '0');
const dateStr = `${yyyy}-${mm}-${dd}`;
window.location.href = `/tech-news/${dateStr}/`;
</script>
<div style="text-align: center; padding: 3rem;">
<p>Přesměrovávám na dnešní zprávy...</p>
<p><a href="/tech-news/2025-11-12/">Pokračovat ručně</a></p>
</div>
Výhody:
- ✅ Nejjednodušší řešení
- ✅ Žádné načítání velkých kolekcí
- ✅ Denní stránky už existují
- ✅ Okamžité zobrazení
Nevýhody:
- ⚠️ Žádný přehled napříč dny
- ⚠️ Nutný JavaScript
Řešení C: Kombinované (NEJVÍCE ROBUSTNÍ)
Kombinace řešení A + B:
- Cleanup starých článků (7 dní)
- Hlavní stránka zobrazuje 18 nejnovějších (48 hodin)
- Fallback redirect pokud nejsou žádné články za 48 hodin
- Link na archiv pro přístup k denním stránkám
Implementace:
1. Cleanup script (stejný jako Řešení A)
2. Aktualizovaný layout tech_news_index.html:
<!-- Navigace -->
<div class="tech-news-navigation">
<a href="/tech-news/archive/">📚 Archiv</a>
</div>
<!-- Články... -->
3. Stránka archivu /tech-news/archive/:
- Seznam denních stránek
- Kalendářové zobrazení
- Filtr podle měsíce
📊 Srovnání řešení
| Kritérium | Řešení A | Řešení B | Řešení C |
|---|---|---|---|
| Velikost HTML | ~100-200 KB | ~10 KB (redirect) | ~100-200 KB |
| Build čas | Střední | Rychlý | Střední |
| Funkčnost | ✅ Plná | ⚠️ Omezená | ✅ Plná |
| Uživatelský zážitek | ✅ Dobrý | ⚠️ Redirect delay | ✅ Výborný |
| Údržba | Střední | Nízká | Vyšší |
| Implementace | ⚙️ Jednoduchá | 🚀 Velmi jednoduchá | ⚙️ Složitější |
🎯 Doporučení
Pro okamžité řešení: Řešení A (Cleanup + Filtrace)
- ✅ Řeší hlavní problémy
- ✅ Rychlá implementace
- ✅ Zachovává funkcionalitu
- ✅ Automatický maintenance
Pro dlouhodobé řešení: Řešení C (Kombinované)
- ✅ Nejrobustnější
- ✅ Nejlepší UX
- ✅ Archiv pro historii
- ✅ Fallback mechanismy
📋 Implementační kroky
Krok 1: Cleanup script
- Vytvořit
.github/scripts/cleanup_old_tech_news.py - Otestovat lokálně
- Přidat do workflow
Krok 2: Aktualizovat layout
- Upravit
_layouts/tech_news_index.html - Přidat filtraci podle data
- Otestovat s malým počtem článků
Krok 3: Deploy
- Commitnout změny
- Pushnout do GitHubu
- Ověřit workflow
Krok 4: Monitoring
- Zkontrolovat velikost HTML
- Měřit build čas
- Sledovat počet článků v kolekci
🔧 Technické detaily
Jekyll Collection Limits
- Jekyll nemá vestavěný limit pro kolekce
- Všechny dokumenty se načítají do paměti
- Filtrace Liquid je pomalá pro velké kolekce
Liquid Date Filtering
Cleanup Considerations
- 7 dní: Optimální pro archiv + aktuální zobrazení
- Denní stránky: Zachovávají historii
- Build čas: ~50% redukce při cleanup
📈 Očekávané výsledky
Po implementaci Řešení A:
- Velikost HTML: 6.4 MB → ~150 KB (-98%)
- Počet článků: 2,478 → ~100-200 (-92%)
- Build čas: ~3-5 min → ~1-2 min (-50%)
- Načítání stránky: ~5-10s → <1s (-90%)
Po implementaci Řešení C:
- Stejné výsledky jako A
- Plus: Archiv, lepší navigace, fallback
|