API Yanıtlarını Sıkıştırma: GZIP ve Brotli Kodlama Pratiği
API'den dönen büyük JSON verisi ağ üzerinden yavaş gidiyor mu? Sıkıştırma (compression) bunu çözer. GZIP ve Brotli, HTTP yanıtlarını küçülterek bant genişliğini azaltır ve istemci tarafında otomatik açılır.
GZIP daha eski ve yaygın, Brotli ise daha yeni ve genellikle daha iyi sıkıştırır. İkisini de desteklemek en iyi yöntemdir.
Node.js ile GZIP ve Brotli
Express.js'te sıkıştırma middleware'i kullanmak en basit yoldur.
1const express = require('express');2const compression = require('compression');34const app = express();56// Hem GZIP hem Brotli'yi etkinleştir7app.use(compression());89app.get('/api/data', (req, res) => {10const largeData = {11users: Array(1000).fill(null).map((_, i) => ({12id: i,13name: `User ${i}`,14email: `user${i}@example.com`,15description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'16}))17};18res.json(largeData);19});2021app.listen(3000, () => console.log('Sunucu 3000 portunda çalışıyor'));CMD'de çalıştır:
1npm install express compression2node app.jsTarayıcı konsolunda (DevTools Network) yanıtın başlığını kontrol et: `Content-Encoding: gzip` veya `Content-Encoding: br` (Brotli) görünecek.
Python Flask ile Sıkıştırma
Flask-Compress kütüphanesi aynı işi yapar.
1from flask import Flask, jsonify2from flask_compress import Compress34app = Flask(__name__)5Compress(app)67@app.route('/api/data')8def get_data():9large_data = {10'users': [11{12'id': i,13'name': f'User {i}',14'email': f'user{i}@example.com',15'description': 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'16}17for i in range(1000)18]19}20return jsonify(large_data)2122if __name__ == '__main__':23app.run(debug=True, port=5000)Kurul ve çalıştır:
1pip install flask flask-compress2python app.pyPerformans Farkı
Sıkıştırılmamış 1000 kullanıcılı JSON yaklaşık 150 KB. GZIP ile 15-20 KB, Brotli ile 12-18 KB olur. Ağ hızı yavaşsa bu fark dramatiktir.
Sık Yapılan Hata
Her zaman sıkıştırma etkinleştirme. Küçük yanıtlar (< 1 KB) sıkıştırılmadan daha ağır olabilir; middleware'ler bunu otomatik filtreliyor. Ayrıca resim, video gibi zaten sıkıştırılmış dosyalar tekrar sıkıştırılmaz.
Brotli desteği eski tarayıcılarda olmayabilir; bu yüzden GZIP fallback'i önemli. Express compression ve Flask-Compress bunu otomatik yapıyor.
0 yorum