Обложка канала

.NET Разработчик

Опытный разработчик не так давно зашёл в .Net и поставил цель получить сертификат Microsoft. Свой ежедневный прогресс он описывает на канале .Net Разработчик. Заметки об изученном материале, советы по повышению производительности и поддержке мотивации, ин

.NET Разработчик

4 года назад
Открыть в
День 1273. #ЧтоНовенького Обновления ASP.NET Core в .NET 7 Превью 6. Начало Некоторые интересные новинки, которые выпустили для ASP.NET Core в очередном превью .NET 7. 1. Промежуточное ПО для распаковки запросов Используется HTTP-заголовок Content-Encoding для автоматической идентификации и распаковки запросов со сжатым содержимым, чтобы разработчику серверной части не приходилось заниматься этим самостоятельно. Это промежуточное ПО добавляется с помощью метода расширения UseRequestDecompression в IApplicationBuilder и метода расширения AddRequestDecompression в IServiceCollection. Поддерживаются Brotli (br), Deflate (deflate) и GZip (gzip). Другие кодировки можно добавить, зарегистрировав собственный класс поставщика распаковки, который реализует интерфейс IDecompressionProvider вместе со значением заголовка Content-Encoding в RequestDecompressionOptions. 2. Промежуточное ПО для кэширования вывода Помогает вам сохранять результаты вашего веб-приложения и обслуживать их из кэша, а не вычислять их каждый раз, что повышает производительность и высвобождает ресурсы для других действий. Используйте метод расширения AddOutputCache в IServiceCollection и метод расширения UseOutputCache в IApplicationBuilder. После можно настроить кэширование на конечных точках:
app.MapGet("/notcached", 
  () => DateTime.Now.ToString());
app.MapGet("/cached", 
  () => DateTime.Now.ToString()).CacheOutput();

Запросы к /notcached вернут текущее время. А каждый запрос к /cached после первого будет возвращать кешированный ответ. Существует множество более продвинутых способов: - по параметру строки запроса
….CacheOutput(p => p.VaryByQuery("culture"));
- по заголовкам (VaryByHeader) - по произвольному значению (VaryByValue). Промежуточное ПО кэширования имеет встроенную защиту от некоторых распространённых ошибок. Например, при инвалидации значения кэша только первый запрос будет вызывать серверный код получения значения. Остальные запросы в это время будут ждать появления значения в кэше, чтобы не перегружать сервер избыточной работой. Вот здесь есть пример использования кэширования. 3. Обновления промежуточного ПО ограничений Промежуточное ПО ограничений (rate limiting) теперь поддерживает ограничения на определённых конечных точках, которое можно комбинировать с глобальным ограничителем, работающим для всех запросов. Также теперь поддерживается добавление пользовательских политик ограничений с помощью новых методов AddPolicy в RateLimiterOptions. Подробнее об ограничениях в этом посте (см. пункт 4). 4. Поддержка WebSockets через HTTP/2 в Kestrel Использование WebSockets через HTTP/2 позволяет использовать преимущества новых функций, таких как сжатие заголовков и мультиплексирование, которые сокращают время и ресурсы, необходимые при выполнении нескольких запросов к серверу. Эта поддержка теперь доступна в Kestrel на всех платформах с поддержкой HTTP/2. Согласование версии HTTP выполняется автоматически в браузерах и Kestrel. Вы можете использовать существующие примеры для ASP.NET Core. Примечание: WebSockets в HTTP/2 использует запросы CONNECT, а не GET, поэтому ваши маршруты и контроллеры возможно придётся обновить. 5. Улучшения производительности Kestrel на многоядерных компьютерах Разделение ConcurrentQueue, используемой в Kestrel, по связанному с ней сокету уменьшает конкуренцию и увеличивает пропускную способность на машинах с большим количеством ядер. В превью 6 пул памяти Kestrel теперь разделён так же, как и очередь ввода-вывода. Наблюдалось более чем 500% улучшение RPS в тестах TechEmpower на 80-ядерных виртуальных машинах ARM64 (доступных теперь в Azure) и почти 100-процентное улучшение на 48-ядерных виртуальных машинах AMD в тесте HTTPS JSON. Источник: https://devblogs.microsoft.com/dotnet/asp-net-core-updates-in-dotnet-7-preview-6/