Compression — gzip, brotli
Muammodan boshlaylik
GET /products — 500 ta mahsulot, javob 2MB. Sekin internet bor foydalanuvchi 4 soniya kutadi.
Compression — javobni yuborishdan oldin siqish. 2MB → 400KB. Brauzer qabul qilib, o'zi yoyadi. Foydalanuvchi uchun bu jarayon ko'rinmaydi — tezroq yuklanadi.
O'rnatish
npm install compression
npm install -D @types/compression
Ulash
// src/main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import * as compression from 'compression';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.use(compression({
threshold: 1024, // ← 1KB dan kichik javoblar siqilmaydi (foydasiz)
level: 6, // ← 1-9 orasida (6 — tezlik va siqish balansi)
}));
await app.listen(3000);
}
threshold: 1024 — kichik javoblarni siqish tezlikni oshirmaydi, aksincha server yukini oshiradi.
level: 6 — Node.js ning standart darajasi. 9 — eng kuchli siqish, eng sekin. 1 — eng tez, kam siqish.
Qanday ishlaydi?
Brauzer so'rov yuboradi:
Accept-Encoding: gzip, deflate, br
Server javob qaytaradi:
Content-Encoding: gzip
(siqilgan ma'lumot)
Brauzer o'zi yoyadi — dasturchi hech narsa qilmaydi
Compression middleware Accept-Encoding headerini ko'radi. Brauzer qo'llab-quvvatlasa — siqib yuboradi. Qo'llab-quvvatlamasa — oddiy yuboradi.
Nima uchun Nginx da?
Produksiyada compression ko'pincha Nginx da qilinadi — Node.js da emas:
# nginx.conf
gzip on;
gzip_comp_level 6;
gzip_min_length 1000;
gzip_types application/json text/plain text/css application/javascript;
# Brotli (yangroq, samarali)
brotli on;
brotli_comp_level 6;
brotli_types application/json text/plain;
Nima uchun Nginx da yaxshiroq? Nginx C da yozilgan — CPU ishlovi tezroq. Node.js event loop ni band qilmaydi. Nginx siqilgan natijalani keshlab qo'yishi ham mumkin.
Node.js da compression — Nginx yo'q (lokal dev, oddiy deploy) holatlar uchun.
Xulosa
Compression — bir qator kod, sezilarli tezlik oshishi.
Eslab qoling:
app.use(compression())— bir marta,main.tsdathreshold: 1024— kichik javoblar siqilmaydilevel: 6— tezlik va siqish balansi- Produksiyada — Nginx da qilish afzal
- Brauzer
Accept-Encodingyuboradi, serverContent-Encodingbilan javob beradi
Keyingi dars
36-dars: Logger — NestJS built-in, Winston/Pino integratsiya