Pemampatan Brotli adalah teknik pemampatan tujuan umum yang disokong secara meluas di penyemak imbas. Ia setanding dengan kaedah pemampatan yang ada sekarang kerana ia menawarkan nisbah mampatan 20-26% lebih baik. Walaupun begitu, tidak ada gunanya melainkan pelayan web menghantar sumber berasaskan teks termampat dengan algoritma Brotli.
Dalam artikel ini, kita akan belajar bagaimana pemampatan berfungsi di pelayan dan mengapa ia berguna? Kami juga akan belajar memasang pelayan Nginx dan mendapatkan pelayan kami untuk menyediakan fail termampat Brotli.
Latar belakang
Teknik / algoritma pemampatan meningkatkan prestasi laman web dengan mengurangkan ukuran kandungan. Oleh itu data yang dimampatkan memerlukan beban dan masa pemindahan yang rendah. Walau bagaimanapun, ia mempunyai harga. Pelayan menggunakan banyak sumber pengiraan untuk memberikan kadar pemampatan yang lebih baik. Oleh itu, lebih baik, lebih mahal. Oleh itu, banyak usaha ditambahkan untuk meningkatkan format pemampatan sambil menggunakan kitaran CPU minimum.
Sekarang, format pemampatan yang paling berpotensi telah dizip. Baru-baru ini gzip digantikan oleh algoritma pemampatan baru yang dikenali sebagai Brotli. Ini adalah algoritma pemampatan maju yang terdiri daripada pengkodan Huffman, algoritma L77, dan pemodelan konteks. Sebaliknya, Gzip dibina berdasarkan algoritma Deflate.
Format pemampatan tanpa kerugian, yang dirancang oleh Google, berkait rapat dengan format mampatan kempis. Kedua-dua kaedah pemampatan menggunakan tingkap gelangsar untuk rujukan belakang. Saiz tetingkap gelangsar Brotli berkisar antara 1 KB hingga 16MB. Sebaliknya, Gzip mempunyai ukuran tetingkap tetap 32KB. Ini bermakna tetingkap Brotli 512 kali lebih besar daripada tetingkap kempis, yang tidak relevan kerana fail teks yang lebih besar daripada 32 KB jarang ada di pelayan web.
Keserasian Pemampatan Pelayan adalah Penting
Setiap kali kita memuat turun fail dari penyemak imbas, penyemak imbas meminta pelayan jenis pemampatan yang disokongnya melalui tajuk. Sebagai contoh, jika penyemak imbas menyokong gzip dan mengempiskan untuk menyahmampatkan. Ia akan menambah pilihan ini di dalamnya Terima-Pengekodan, tajuk, i.e.,
Terima-Pengekodan = "deflate, gzip"
Oleh itu penyemak imbas yang tidak menyokong format ini tidak akan memasukkannya ke dalam tajuk. Apabila pelayan bertindak balas dengan kandungan, ia memberitahu penyemak imbas mengenai format pemampatan melalui header, Pengekodan Kandungan. Oleh itu, jika ia menyokong gzip, maka tajuk seperti ini:
Pengekodan Kandungan = "gzip"
Header penyemak imbas seperti Firefox yang menyokong pemampatan Brotli dan pelayan web yang mempunyai modul Brotli dipasang untuk kelihatan seperti ini:
Terima-Pengekodan = "deflate, gzip, br"
Pengekodan Kandungan = "gzip, br"
Oleh itu, jika penyemak imbas menggunakan format pemampatan terbaik dan pelayan web tidak, itu tidak bagus, kerana pelayan web tidak akan menghantar kembali fail dengan algoritma pemampatan pilihan. Itulah sebabnya penting untuk memasang modul pemampatan untuk pelayan laman web.
Pemasangan Pelayan
Sebelum bergerak maju dengan konfigurasi Brotli, kami akan menyediakan pelayan Nginx kami. Sebelum itu sudo apt-get kemas kini pengedaran Ubuntu anda dan ketik perintah berikut di terminal bash anda.
[dilindungi e-mel]: ~ $ sudo apt-get kemas kini[dilindungi e-mel]: ~ $ sudo apt-get install nginx -y
[dilindungi e-mel]: ~ $ sudo perkhidmatan nginx bermula
Untuk membolehkan pemampatan Brotli di Nginx, kami akan menyusunnya .jadi modul mengikut perincian versi Nginx kami. Seperti yang ditunjukkan, mengetik perintah berikut akan mengeluarkan versi Nginx:
[dilindungi e-mel]: ~ $ nginx -vversi nginx: nginx / 1.18.0 (Ubuntu)
Menggunakan wget arahan bersama dengan perincian versi nginx anda untuk memuat turun kod sumber dari laman web Nginx.
[dilindungi e-mel]: ~ $ wget https: // nginx.org / muat turun / nginx-1.18.0.tar.gz--2021-02-07 02: 57: 33-- https: // nginx.org / muat turun / nginx-1.18.0.tar.gz
Menyelesaikan nginx.org (nginx.org)… 3.125.197.172, 52.58.199.22, 2a05: d014: edb: 5702 :: 6,…
Menyambung ke nginx.org (nginx.org) | 3.125.197.172 |: 443… bersambung.
Permintaan HTTP dihantar, menunggu tindak balas ... 200 OK
Panjang: 1039530 (1015K) [aplikasi / octet-stream]
Menyimpan ke: 'nginx-1.18.0.tar.gz '
nginx-1.18.0.tar.gz 100% [============================================== ====================>] 1015K 220KB / s dalam 4.8s
2021-02-07 02:57:38 (212 KB / s) - 'nginx-1.18.0.tar.gz disimpan [1039530/1039530]
Kami akan menggunakan kod sumber ini untuk menyusun *.jadi binari untuk pemampatan Brotli. Sekarang ekstrak fail menggunakan arahan berikut.
[dilindungi e-mel]: ~ $ tar xzf nginx-1.18.0.tar.gzKonfigurasi Modul Brotli
Kini Google telah mengeluarkan modul Brotli untuk Nginx. Kami akan git-clone modul dari repositori Google.
[dilindungi e-mel]: ~ $ git clone https: // github.com / google / ngx_brotli - berulang.Kami akan cd ke dalam nginx-1.18.0 folder untuk mengkonfigurasi modul Brotli dinamik.
[dilindungi e-mel]: ~ $ cd nginx-1.18.0 /[dilindungi e-mel]: ~ $ sudo ./ konfigurasikan --dengan -kompak --add-dynamic-module =… / ngx_brotli
Catatan: Anda mungkin menerima ralat berikut semasa mengkonfigurasi
./ configure: error: modul penulisan semula HTTP memerlukan perpustakaan PCRE.Anda boleh mematikan modul dengan menggunakan --tanpa-http_rewrite_module
pilihan, atau pasang perpustakaan PCRE ke dalam sistem, atau bina perpustakaan PCRE
secara statik dari sumber dengan nginx dengan menggunakan --with-pcre =
Sekiranya demikian, jalankan arahan berikut untuk memasang perpustakaan pcre
[dilindungi e-mel]: ~ $ sudo apt-get install libpcre3-dev -yPenyusunan Modul
Kami akan menggunakan membuat arahan untuk membuat a modul folder di dalam nginx-1.18.0 direktori.
[dilindungi e-mel]: ~ $ sudo membuat modulKami menggunakan cp arahan untuk menyalin ngx_http_brotli *.begitu fail dari nginx-1.18.0 / obj folder ke folder modul.
[dilindungi e-mel]: ~ $ cd / nginx-1.18.0 / obj /[dilindungi e-mel]: ~ $ sudo cp ngx_http_brotli *.begitu / usr / share / nginx / modul
Sekarang senaraikan kandungan fail menggunakan ls perintah. Anda akan melihat bahawa ia terdiri daripada dua fail modul yang berbeza, i.e.:
[dilindungi e-mel]: ~ $ ls ngx_http_brotli *.begitungx_http_brotli_filter_module.begitu
ngx_http_brotli_static_module.begitu
- Modul Brotli Biasa: Modul ngx_http_brotli_filter_module.jadi modul memampatkan semua fail dengan cepat, dan oleh itu ia memerlukan lebih banyak sumber komputasi
- Modul Brotli Statik: Modul ngx_http_brotli_static_module.jadi modul memungkinkan untuk menyajikan fail statik yang dimampatkan, oleh itu kurang memerlukan sumber.
Sekarang gunakan editor kegemaran anda untuk membuka / etc / nginx / nginx.fail conf untuk menambahkan modul muat Brotli untuk memulakan konfigurasi Brotli dengan memasukkan baris berikut:
[dilindungi e-mel]: ~ $ sudo vim / etc / nginx / nginx.pengesahan# Muat bahagian bahagian
load_module "modul / ngx_http_brotli_filter_module.jadi ";
load_module "modul / ngx_http_brotli_static_module.jadi ";
Kami juga akan memasukkan laluan folder konfigurasi / etc / nginx / konf.d / *.pengesahan
dan / usr / share / nginx / modul / *.pengesahan dalam fail di atas seperti:
http# Sertakan folder konfigurasi
sertakan / etc / nginx / conf.d / *.conf;
sertakan / usr / share / nginx / modul / *.conf;
Untuk menambahkan konfigurasi Brotli buka / etc / nginx / conf.d / brotli.pengesahan
fail di vim editor dan aktifkan Brotli dengan menetapkan arahan konfigurasi berikut:
brotli dihidupkan;brotli_static pada;
brotli_comp_level 6;
aplikasi brotli_types / rss + xml application / xhtml + xml
teks / teks / teks css;
The "off brotli | padaNilai membolehkan atau mematikan dinamik atau secara cepat pemampatan kandungan.
The 'brotli_ statik pada ' membolehkan pelayan Nginx untuk memeriksa apakah fail yang dimampatkan sebelumnya dengan .sambungan br ada atau tidak. Kami juga boleh mengubah tetapan ini menjadi pilihan mati atau selalu. The selalu nilai membolehkan pelayan menghantar kandungan pra-dimampatkan tanpa mengesahkan sama ada penyemak imbas menyokongnya atau tidak. Oleh kerana Brotli berintensifkan sumber daya, modul ini sangat sesuai untuk mengurangkan keadaan masalah.
The "brotli_comp_level 6Arahan menetapkan tahap kualiti mampatan dinamik menjadi 6. Ia boleh berkisar antara 0 hingga 11.
Akhir sekali, aktifkan pemampatan dinamik untuk jenis MIME tertentu, sedangkan tindak balas teks / html selalu dimampatkan. Sintaks lalai untuk arahan ini adalah jenis brotli [jenis mime]. Anda boleh mendapatkan lebih banyak maklumat mengenai arahan konfigurasi di Github.
Simpan perubahan, mulakan semula perkhidmatan Nginx dengan menaip "Perkhidmatan sudo mulakan semula nginx" dan semuanya selesai.
Kesimpulannya
Selepas perubahan, anda akan melihat beberapa peningkatan yang ketara dalam metrik prestasi. Namun, ia hadir dengan sedikit kekurangan peningkatan beban CPU pada waktu puncak. Untuk mengelakkan situasi seperti itu, perhatikan penggunaan CPU; jika mencapai 100% secara berkala, kita dapat menggunakan banyak pilihan sesuai pilihan kita, seperti menyajikan kandungan pra-dimampatkan atau statik, menurunkan tahap mampatan, dan mematikan pemampatan on-the-fly, di antara banyak.