Usullar2 min read

Siqish

Siqish javob bodysining hajmini sezilarli kamaytirishi mumkin, shu orqali web ilovaning tezligini oshiradi.

Siqish javob bodysining hajmini sezilarli kamaytirishi mumkin, shu orqali web ilovaning tezligini oshiradi.

Productiondagi high-traffic saytlarda siqishni ilova serveridan tashqariga chiqarish qat'iy tavsiya etiladi - odatda reverse proxyda (masalan, Nginx). Bunday holatda siqish middleware'idan foydalanmaslik kerak.

Express bilan foydalanish (default)

Gzip siqishni yoqish uchun compression middleware paketidan foydalaning.

Avval kerakli paketlarni o'rnating:

Terminal
1$ npm i --save compression
2$ npm i --save-dev @types/compression

O'rnatish tugagach, siqish middleware'ini global middleware sifatida qo'llang.

TypeScript
1import * as compression from 'compression';
2// somewhere in your initialization file
3app.use(compression());

Fastify bilan foydalanish

Agar FastifyAdapter dan foydalansangiz, fastify-compress kerak bo'ladi:

Terminal
1$ npm i --save @fastify/compress

O'rnatish tugagach, @fastify/compress middleware'ini global middleware sifatida qo'llang.

Warning

Ilovani yaratishda NestFastifyApplication tipidan foydalanayotganingizga ishonch hosil qiling. Aks holda, siqish middleware'ini qo'llash uchun register dan foydalana olmaysiz.

TypeScript
1import { FastifyAdapter, NestFastifyApplication } from '@nestjs/platform-fastify';
2
3import compression from '@fastify/compress';
4
5// inside bootstrap()
6const app = await NestFactory.create<NestFastifyApplication>(AppModule, new FastifyAdapter());
7await app.register(compression);

Standart holatda @fastify/compress brauzerlar encoding qo'llab-quvvatlashini bildirganda Brotli siqishni (Node >= 11.7.0 da) ishlatadi. Brotli siqish koeffitsienti bo'yicha juda samarali bo'lishi mumkin, biroq u anchagina sekin ham bo'lishi mumkin. Standard holatda Brotli maksimal siqish sifati 11 ga o'rnatiladi, lekin BROTLI_PARAM_QUALITY ni 0 (min) dan 11 (max) gacha sozlab, siqish vaqtini siqish sifati hisobiga kamaytirish mumkin. Bu joy/vaqt unumdorligini optimallashtirish uchun nozik sozlashni talab qiladi. Sifat 4 bo'lgan misol:

TypeScript
1import { constants } from 'node:zlib';
2// somewhere in your initialization file
3await app.register(compression, { brotliOptions: { params: { [constants.BROTLI_PARAM_QUALITY]: 4 } } });

Soddalashtirish uchun fastify-compress ga javoblarni siqishda faqat deflate va gzip'dan foydalanishni ko'rsatishingiz mumkin; javoblar biroz kattaroq bo'ladi, ammo ancha tez yetkaziladi.

Encodinglarni ko'rsatish uchun app.register ga ikkinchi argument bering:

TypeScript
1await app.register(compression, { encodings: ['gzip', 'deflate'] });

Yuqoridagi misol fastify-compress ga faqat gzip va deflate encodinglaridan foydalanishni va mijoz ikkalasini ham qo'llab-quvvatlasa, gzipni afzal ko'rishni bildiradi.