Skip to content

Enhance performance and fix minor bugs - #139

Merged
ram0ng1 merged 6 commits into
masterfrom
melhoria
Jun 6, 2026
Merged

Enhance performance and fix minor bugs#139
ram0ng1 merged 6 commits into
masterfrom
melhoria

Conversation

@ram0ng1

@ram0ng1 ram0ng1 commented Jun 6, 2026

Copy link
Copy Markdown
Owner

Improvements to the codebase enhance performance and address minor bugs identified in previous versions. These changes aim to optimize functionality and improve user experience.

- Added PHPUnit and Mockery as development dependencies in composer.json.
- Created phpunit.xml.dist for PHPUnit configuration.
- Introduced phpstan for static analysis with baseline error handling.
- Implemented integration tests for DiscussionHero model and migration.
- Added security tests for HTML and SVG sanitization to prevent XSS/XXE vulnerabilities.
- Established a security coverage matrix to track vulnerability regression tests.
- Updated .gitignore and .gitattributes to exclude unnecessary files from distribution.
- Created a Support\Database class for in-memory SQLite testing.
- Added various unit tests for policies and sanitization logic.
@ram0ng1 ram0ng1 added the manutencao Manutenção de rotina, CI e infraestrutura label Jun 6, 2026
@github-actions

github-actions Bot commented Jun 6, 2026

Copy link
Copy Markdown
Contributor

🔬 Performance benchmark

Home (/)

Métrica PR Master (baseline) Δ
Performance (score) 80 82 🔴 -2pp (-2.4%)
FCP 1849 ms 1631 ms 🔴 +218 ms (13.3%)
LCP 2091 ms 1875 ms 🔴 +216 ms (11.5%)
TBT 100 ms 144 ms 🟢 -44 ms (-30.6%)
CLS 0.000 0.000 (=)
Speed Index 1849 ms 1631 ms 🔴 +218 ms (13.3%)
TTI 2091 ms 1925 ms 🔴 +166 ms (8.6%)

💡 Recomendações (Lighthouse + dicas Flarum 2 / Avocado)

  • Sem compressão de texto — economia ~880 ms · ~1099 KB
    Habilite gzip/brotli no servidor (nginx: gzip on; gzip_types text/css application/javascript; ou brotli on; brotli_types ...). Esse é um setting de host, não da extensão, mas reportar aqui ajuda.
  • JavaScript não utilizado — economia ~530 ms · ~515 KB
    Use import() dinâmico para componentes só usados em rotas específicas (TeamPage, AvocadoSearchPage). O webpack faz split automático se você usar import("./components/TeamPage") dentro do routes ao invés de import estático no topo do index.tsx.
  • CSS não utilizado — economia ~440 ms · ~538 KB
    O bundle forum.css carrega tudo de less/forum/**. Divida por rota (Home/Discussion/Tag) via Extend\Frontend->css() condicional no JS, ou use PurgeCSS no webpack para o build de produção.
  • Recursos bloqueando o render — economia ~240 ms
    Mova CSS não-crítico para <link rel="preload"> ou injete inline o CSS above-the-fold do forum.less. Em Flarum 2, o forum.css é servido como bloqueante por padrão — considere media="print" onload para folhas não-críticas (ex.: dark theme).
  • Cache HTTP curto — 8 resources found
    Os assets versionados em /assets/forum-<hash>.js deveriam ter Cache-Control: public, max-age=31536000, immutable. Configure no nginx/apache, não no Flarum.

/discussions

Métrica PR Master (baseline) Δ
Performance (score) 87 92 🔴 -5pp (-5.4%)
FCP 1401 ms 686 ms 🔴 +714 ms (104.1%)
LCP 1784 ms 1794 ms 🟢 -10 ms (-0.6%)
TBT 0 ms 9 ms 🟢 -9 ms (-100.0%)
CLS 0.000 0.000 (=)
Speed Index 1401 ms 846 ms 🔴 +555 ms (65.6%)
TTI 1784 ms 1794 ms 🟢 -10 ms (-0.6%)

💡 Recomendações (Lighthouse + dicas Flarum 2 / Avocado)

  • Sem compressão de texto — economia ~920 ms · ~1105 KB
    Habilite gzip/brotli no servidor (nginx: gzip on; gzip_types text/css application/javascript; ou brotli on; brotli_types ...). Esse é um setting de host, não da extensão, mas reportar aqui ajuda.
  • JavaScript não utilizado — economia ~540 ms · ~537 KB
    Use import() dinâmico para componentes só usados em rotas específicas (TeamPage, AvocadoSearchPage). O webpack faz split automático se você usar import("./components/TeamPage") dentro do routes ao invés de import estático no topo do index.tsx.
  • CSS não utilizado — economia ~480 ms · ~544 KB
    O bundle forum.css carrega tudo de less/forum/**. Divida por rota (Home/Discussion/Tag) via Extend\Frontend->css() condicional no JS, ou use PurgeCSS no webpack para o build de produção.
  • Recursos bloqueando o render — economia ~480 ms
    Mova CSS não-crítico para <link rel="preload"> ou injete inline o CSS above-the-fold do forum.less. Em Flarum 2, o forum.css é servido como bloqueante por padrão — considere media="print" onload para folhas não-críticas (ex.: dark theme).
  • Cache HTTP curto — 9 resources found
    Os assets versionados em /assets/forum-<hash>.js deveriam ter Cache-Control: public, max-age=31536000, immutable. Configure no nginx/apache, não no Flarum.

/tags

Métrica PR Master (baseline) Δ
Performance (score) 88 86 🟢 2pp (2.3%)
FCP 1410 ms 1521 ms 🟢 -110 ms (-7.2%)
LCP 1712 ms 1766 ms 🟢 -54 ms (-3.0%)
TBT 0 ms 1 ms 🟢 -1 ms (-100.0%)
CLS 0.000 0.000 (=)
Speed Index 1410 ms 1521 ms 🟢 -110 ms (-7.2%)
TTI 1712 ms 1766 ms 🟢 -54 ms (-3.0%)

💡 Recomendações (Lighthouse + dicas Flarum 2 / Avocado)

  • Sem compressão de texto — economia ~920 ms · ~1100 KB
    Habilite gzip/brotli no servidor (nginx: gzip on; gzip_types text/css application/javascript; ou brotli on; brotli_types ...). Esse é um setting de host, não da extensão, mas reportar aqui ajuda.
  • JavaScript não utilizado — economia ~510 ms · ~541 KB
    Use import() dinâmico para componentes só usados em rotas específicas (TeamPage, AvocadoSearchPage). O webpack faz split automático se você usar import("./components/TeamPage") dentro do routes ao invés de import estático no topo do index.tsx.
  • CSS não utilizado — economia ~480 ms · ~543 KB
    O bundle forum.css carrega tudo de less/forum/**. Divida por rota (Home/Discussion/Tag) via Extend\Frontend->css() condicional no JS, ou use PurgeCSS no webpack para o build de produção.
  • Recursos bloqueando o render — economia ~480 ms
    Mova CSS não-crítico para <link rel="preload"> ou injete inline o CSS above-the-fold do forum.less. Em Flarum 2, o forum.css é servido como bloqueante por padrão — considere media="print" onload para folhas não-críticas (ex.: dark theme).
  • Cache HTTP curto — 8 resources found
    Os assets versionados em /assets/forum-<hash>.js deveriam ter Cache-Control: public, max-age=31536000, immutable. Configure no nginx/apache, não no Flarum.

🥑 Dicas gerais para acelerar o tema (Flarum 2 + Avocado)

  1. Build de produção minificado — confirme que npm run build rodou com mode: production (já é o caso no js/package.json). Webpack tree-shakes import { x } from "flarum/..." se o consumo for explícito.
  2. Split por rotaindex.tsx importa todos os Components no topo. Trocar para import() dinâmico nas rotas raramente acessadas (TeamPage, AvocadoSearchPage, TagsPage) reduz o forum.js inicial.
  3. Less crítico inline — Flarum 2 serve forum.css bloqueando. Considere extrair o CSS above-the-fold (header + 1ª thread visível) e injetar inline via Extend\Frontend->content(InlineCriticalCss::class).
  4. Avatares — sirva via <img loading="lazy"> em todos os ThreadCards/PostCards que não estiverem no fold inicial.
  5. <link rel="preconnect"> — se você usa CDN para fontes ou avatares S3, adicione preconnects no header.
  6. Extend\Frontend->js() rodam síncronos — todo arquivo js/dist/forum.js é parseado no boot. Cada extend() no index.tsx roda antes da primeira pintura.
  7. opcache + view cache — no host: opcache.enable=1, opcache.validate_timestamps=0 em produção, e php flarum cache:clear no deploy.
  8. HTTP/2 + Brotli no host — o Flarum gera bundles grandes; sem brotli você paga em transferência.

Lighthouse desktop, 1 run por URL. 🟢 = melhorou vs master · 🔴 = regrediu.

@ram0ng1 ram0ng1 added the release label Jun 6, 2026
@github-actions

github-actions Bot commented Jun 6, 2026

Copy link
Copy Markdown
Contributor

🔒 Regressão de segurança (Semgrep diff vs master)

✅ Sem regressão — nenhum achado novo de vulnerabilidade introduzido por esta PR.

@github-actions

github-actions Bot commented Jun 6, 2026

Copy link
Copy Markdown
Contributor

📦 Bundle size

Não há baseline do master ainda. Os números abaixo são da PR; a comparação delta começa no próximo merge.

Arquivo PR (gzip) Master (gzip) Δ gzip PR (raw) Δ raw
admin.js 11.3 KB — (novo) 45.2 KB
forum.js 33.6 KB — (novo) 132.7 KB
forum/components/AllDiscussionsPage.js 2.7 KB — (novo) 8.7 KB
forum/components/AvocadoPostsSearchPage.js 2.4 KB — (novo) 7.3 KB
forum/components/AvocadoSearchPage.js 5.3 KB — (novo) 19.5 KB
forum/components/TagPage.js 3.4 KB — (novo) 11.0 KB
forum/components/TeamPage.js 1.4 KB — (novo) 3.8 KB
forum/components/UserProfilePage.js 2.5 KB — (novo) 10.2 KB
Total 62.5 KB 238.3 KB

gzip nível 9. 🟢 = menor que o master · 🔴 = maior. Report-only — não bloqueia o merge.

@ram0ng1
ram0ng1 merged commit bd681f6 into master Jun 6, 2026
22 checks passed
ram0ng1 added a commit that referenced this pull request Jun 11, 2026
Enhance performance and fix minor bugs
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

manutencao Manutenção de rotina, CI e infraestrutura

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant