Sprint 14 — производительность с реальными замерами до/после. Ключевые цифры: - Sales-report SQL: 9.53ms → 7.09ms mean (-25%) после N+1 fix + индексов. - Initial JS bundle: 1456 KB → 706 KB raw (-51%); gzip 389 KB → 196 KB (-50%) через React.lazy на 30 редких страниц + Recharts. - Lighthouse /login: Perf 89, A11y 92, BP 100 (target ≥85/90/90 ✓). Подробности по каждому пункту + методология замеров — в docs/sprint14-progress.md. Что сделано: 1. Phase14a_PerfIndexes — composite (Org,Status,Date), partial (WHERE Status=1 AND NOT IsReturn) + INCLUDE, и composite stock_movements(Org,OccurredAt). 2. SalesReportController.FetchAsync — раньше каждая строка результата делала CASE WHEN ELSE (SELECT ... LIMIT 1) correlated subquery на RetailPoint.Name и User.FullName. Заменено на 2 IN-batch'a + dictionary lookup в C#. 3. App.tsx React.lazy для отчётов, audit-log, loyalty, super-admin, settings, all rare edit pages. Recharts вынесен в lazy chunk Dashboard'а (KPI рендерятся сразу). 4. SixLabors.ImageSharp v3.1.6 + ImageVariantService — генерирует thumb 256/medium 800 WebP@80 при загрузке. UploadsController ?size=thumb|medium с fallback. React <ProductImage> — <picture> + srcset. 5. ApplyDefaultPoolConfig на старте: Max=100, Min=10 (грей пул), Idle=300, Max Auto Prepare=20. 6. Lighthouse на /login /forgot-password /reset-password — все три проходят пороги. 7. JobTimingFilter + HangfireGlobalFilterRegistrar — каждый recurring job логирует длительность; >30s = Warning. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
76 lines
4 KiB
XML
76 lines
4 KiB
XML
<Project>
|
|
<PropertyGroup>
|
|
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
|
|
<CentralPackageTransitivePinningEnabled>true</CentralPackageTransitivePinningEnabled>
|
|
</PropertyGroup>
|
|
|
|
<ItemGroup>
|
|
<!-- ASP.NET Core 8 -->
|
|
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.11" />
|
|
<PackageVersion Include="Microsoft.AspNetCore.OpenApi" Version="8.0.11" />
|
|
<PackageVersion Include="Microsoft.AspNetCore.SignalR" Version="1.2.0" />
|
|
<PackageVersion Include="Microsoft.AspNetCore.SignalR.Client" Version="8.0.11" />
|
|
<PackageVersion Include="Swashbuckle.AspNetCore" Version="6.9.0" />
|
|
|
|
<!-- EF Core 8 + PostgreSQL -->
|
|
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="8.0.11" />
|
|
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.11" />
|
|
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="8.0.11" />
|
|
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.11" />
|
|
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.10" />
|
|
|
|
<!-- OpenIddict 5 (aligned to .NET 8 LTS) -->
|
|
<PackageVersion Include="OpenIddict.AspNetCore" Version="5.8.0" />
|
|
<PackageVersion Include="OpenIddict.EntityFrameworkCore" Version="5.8.0" />
|
|
|
|
<!-- Identity -->
|
|
<PackageVersion Include="Microsoft.AspNetCore.Identity" Version="2.3.1" />
|
|
<PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="8.0.11" />
|
|
|
|
<!-- App services -->
|
|
<PackageVersion Include="CsvHelper" Version="33.0.1" />
|
|
<PackageVersion Include="Minio" Version="6.0.5" />
|
|
<PackageVersion Include="ClosedXML" Version="0.104.2" />
|
|
<PackageVersion Include="MailKit" Version="4.10.0" />
|
|
<PackageVersion Include="Microsoft.AspNetCore.DataProtection" Version="8.0.11" />
|
|
<PackageVersion Include="MediatR" Version="12.4.1" />
|
|
<PackageVersion Include="FluentValidation" Version="11.11.0" />
|
|
<PackageVersion Include="FluentValidation.DependencyInjectionExtensions" Version="11.11.0" />
|
|
<PackageVersion Include="Mapster" Version="7.4.0" />
|
|
<PackageVersion Include="Mapster.DependencyInjection" Version="1.0.1" />
|
|
<PackageVersion Include="Serilog.AspNetCore" Version="8.0.3" />
|
|
<PackageVersion Include="Serilog.Sinks.Console" Version="6.0.0" />
|
|
<PackageVersion Include="Serilog.Sinks.File" Version="6.0.0" />
|
|
|
|
<!-- Image processing (Sprint 14: variants thumb/medium + WebP) -->
|
|
<PackageVersion Include="SixLabors.ImageSharp" Version="3.1.6" />
|
|
|
|
<!-- Background jobs -->
|
|
<PackageVersion Include="Hangfire.AspNetCore" Version="1.8.17" />
|
|
<PackageVersion Include="Hangfire.PostgreSql" Version="1.20.10" />
|
|
|
|
<!-- Observability / Prometheus -->
|
|
<PackageVersion Include="prometheus-net.AspNetCore" Version="8.2.1" />
|
|
|
|
<!-- POS: local storage + API client -->
|
|
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.11" />
|
|
<PackageVersion Include="Refit" Version="7.2.22" />
|
|
<PackageVersion Include="Refit.HttpClientFactory" Version="7.2.22" />
|
|
<PackageVersion Include="Polly" Version="8.5.0" />
|
|
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="8.0.1" />
|
|
<PackageVersion Include="CommunityToolkit.Mvvm" Version="8.4.0" />
|
|
<PackageVersion Include="System.IO.Ports" Version="8.0.0" />
|
|
|
|
<!-- Testing -->
|
|
<PackageVersion Include="xunit" Version="2.9.3" />
|
|
<PackageVersion Include="xunit.runner.visualstudio" Version="3.0.1" />
|
|
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
|
|
<PackageVersion Include="FluentAssertions" Version="7.0.0" />
|
|
<PackageVersion Include="NSubstitute" Version="5.3.0" />
|
|
<PackageVersion Include="coverlet.collector" Version="6.0.3" />
|
|
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="8.0.11" />
|
|
<PackageVersion Include="Microsoft.EntityFrameworkCore.InMemory" Version="8.0.11" />
|
|
<PackageVersion Include="Testcontainers.PostgreSql" Version="4.1.0" />
|
|
</ItemGroup>
|
|
</Project>
|