Spring 5 dan Servlet 4 - PushBuilder

1. Perkenalan

Teknologi Server Push - bagian dari HTTP / 2 (RFC 7540) - memungkinkan kita mengirim sumber daya ke klien secara proaktif dari sisi server. Ini adalah perubahan besar dari pendekatan berbasis tarik HTTP / 1.X.

Salah satu fitur baru yang dibawa Spring 5 - adalah dukungan server push yang hadir dengan Jakarta EE 8 Servlet 4.0 API. Di artikel ini, kita akan mempelajari cara menggunakan server push dan mengintegrasikannya dengan pengontrol Spring MVC .

2. Ketergantungan Maven

Mari kita mulai dengan mendefinisikan dependensi yang akan kita gunakan:

 org.springframework spring-webmvc 5.2.8.RELEASE   javax.servlet javax.servlet-api 4.0.0 provided 

Versi terbaru spring-mvc dan servlet-api dapat ditemukan di Maven Central.

3. Persyaratan HTTP / 2

Untuk menggunakan server push, kita perlu menjalankan aplikasi kita dalam wadah yang mendukung HTTP / 2 dan API Servlet 4.0 . Persyaratan konfigurasi berbagai wadah dapat ditemukan di sini, di wiki Spring.

Selain itu, kami memerlukan dukungan HTTP / 2 di sisi klien ; tentu saja, browser terbaru memiliki dukungan ini.

4. Fitur PushBuilder

The PushBuilder antarmuka bertanggung jawab untuk melaksanakan server push. Di Spring MVC, kita bisa memasukkan PushBuilder sebagai argumen metode yang dianotasi dengan @RequestMapping .

Pada titik ini, penting untuk mempertimbangkan bahwa - jika klien tidak memiliki dukungan HTTP / 2 - referensi akan dikirim sebagai null .

Berikut adalah API inti yang ditawarkan oleh antarmuka PushBuilder :

  • path (String path) - menunjukkan sumber daya yang akan kita kirim
  • push () - mengirimkan sumber daya ke klien
  • addHeader (Nama string, nilai String) - menunjukkan header yang akan kita gunakan untuk resource yang didorong

5. Contoh Cepat

Untuk mendemonstrasikan integrasi, kita akan membuat halaman demo.jsp dengan satu sumber daya - logo.png :

     PushBuilder demo   PushBuilder demo

Kami juga akan mengekspos dua titik akhir dengan pengontrol PushController - satu yang menggunakan dorongan server dan yang lainnya tidak:

@Controller public class PushController { @GetMapping(path = "/demoWithPush") public String demoWithPush(PushBuilder pushBuilder) { if (null != pushBuilder) { pushBuilder.path("resources/logo.png").push(); } return "demo"; } @GetMapping(path = "/demoWithoutPush") public String demoWithoutPush() { return "demo"; } }

Dengan menggunakan alat Pengembangan Chrome, kita dapat melihat perbedaannya dengan memanggil kedua titik akhir.

Saat kita memanggil metode demoWithoutPush , tampilan dan resource dipublikasikan dan digunakan oleh klien menggunakan teknologi pull:

Ketika kita memanggil metode demoWithPush , kita dapat melihat penggunaan server push dan bagaimana sumber daya dikirimkan terlebih dahulu oleh server, menghasilkan waktu muat yang lebih rendah:

Teknologi server push dapat meningkatkan waktu buka halaman aplikasi kami dalam banyak skenario. Karena itu, kami perlu mempertimbangkan bahwa, meskipun kami menurunkan latensi, kami dapat meningkatkan bandwidth - bergantung pada jumlah resource yang kami layani.

Ada baiknya juga untuk menggabungkan teknologi ini dengan strategi lain seperti Caching, Resource Minification, dan CDN, dan menjalankan tes kinerja pada aplikasi kita untuk menentukan titik akhir yang ideal untuk menggunakan server push.

6. Kesimpulan

Dalam tutorial singkat ini, kami melihat contoh cara menggunakan teknologi server push dengan Spring MVC menggunakan antarmuka PushBuilder , dan kami membandingkan waktu muat saat menggunakannya versus teknologi tarik standar.

Seperti biasa, kode sumber tersedia di GitHub.