Conversation
- 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.
Contributor
🔬 Performance benchmarkHome (
|
| 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;oubrotli 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
Useimport()dinâmico para componentes só usados em rotas específicas (TeamPage, AvocadoSearchPage). O webpack faz split automático se você usarimport("./components/TeamPage")dentro doroutesao invés de import estático no topo doindex.tsx. - CSS não utilizado — economia ~440 ms · ~538 KB
O bundleforum.csscarrega tudo deless/forum/**. Divida por rota (Home/Discussion/Tag) viaExtend\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 doforum.less. Em Flarum 2, oforum.cssé servido como bloqueante por padrão — consideremedia="print" onloadpara folhas não-críticas (ex.: dark theme). - Cache HTTP curto — 8 resources found
Os assets versionados em/assets/forum-<hash>.jsdeveriam terCache-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;oubrotli 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
Useimport()dinâmico para componentes só usados em rotas específicas (TeamPage, AvocadoSearchPage). O webpack faz split automático se você usarimport("./components/TeamPage")dentro doroutesao invés de import estático no topo doindex.tsx. - CSS não utilizado — economia ~480 ms · ~544 KB
O bundleforum.csscarrega tudo deless/forum/**. Divida por rota (Home/Discussion/Tag) viaExtend\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 doforum.less. Em Flarum 2, oforum.cssé servido como bloqueante por padrão — consideremedia="print" onloadpara folhas não-críticas (ex.: dark theme). - Cache HTTP curto — 9 resources found
Os assets versionados em/assets/forum-<hash>.jsdeveriam terCache-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;oubrotli 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
Useimport()dinâmico para componentes só usados em rotas específicas (TeamPage, AvocadoSearchPage). O webpack faz split automático se você usarimport("./components/TeamPage")dentro doroutesao invés de import estático no topo doindex.tsx. - CSS não utilizado — economia ~480 ms · ~543 KB
O bundleforum.csscarrega tudo deless/forum/**. Divida por rota (Home/Discussion/Tag) viaExtend\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 doforum.less. Em Flarum 2, oforum.cssé servido como bloqueante por padrão — consideremedia="print" onloadpara folhas não-críticas (ex.: dark theme). - Cache HTTP curto — 8 resources found
Os assets versionados em/assets/forum-<hash>.jsdeveriam terCache-Control: public, max-age=31536000, immutable. Configure no nginx/apache, não no Flarum.
🥑 Dicas gerais para acelerar o tema (Flarum 2 + Avocado)
- Build de produção minificado — confirme que
npm run buildrodou commode: production(já é o caso nojs/package.json). Webpack tree-shakesimport { x } from "flarum/..."se o consumo for explícito. - Split por rota —
index.tsximporta todos os Components no topo. Trocar paraimport()dinâmico nas rotas raramente acessadas (TeamPage, AvocadoSearchPage, TagsPage) reduz oforum.jsinicial. - Less crítico inline — Flarum 2 serve
forum.cssbloqueando. Considere extrair o CSS above-the-fold (header + 1ª thread visível) e injetar inline viaExtend\Frontend->content(InlineCriticalCss::class). - Avatares — sirva via
<img loading="lazy">em todos os ThreadCards/PostCards que não estiverem no fold inicial. <link rel="preconnect">— se você usa CDN para fontes ou avatares S3, adicione preconnects no header.Extend\Frontend->js()rodam síncronos — todo arquivojs/dist/forum.jsé parseado no boot. Cadaextend()noindex.tsxroda antes da primeira pintura.- opcache + view cache — no host:
opcache.enable=1,opcache.validate_timestamps=0em produção, ephp flarum cache:clearno deploy. - 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.
… dados e regras de i18n para evitar strings hardcoded
… paridade de tradução
… detectar regressões de segurança
Contributor
🔒 Regressão de segurança (Semgrep diff vs
|
Contributor
📦 Bundle size
gzip nível 9. 🟢 = menor que o master · 🔴 = maior. Report-only — não bloqueia o merge. |
ram0ng1
added a commit
that referenced
this pull request
Jun 11, 2026
Enhance performance and fix minor bugs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Improvements to the codebase enhance performance and address minor bugs identified in previous versions. These changes aim to optimize functionality and improve user experience.