Di bagian pertama seri ini, saya membahas cara membuat blog yang didukung Markdown di PHP menggunakan Slim Framework. Dalam bagian kedua dari seri ini, Anda akan mempelajari cara menggunakan Memcached dengan PHP untuk meningkatkan kinerja aplikasi. Show
Mari kita mulai PrasyaratAnda memerlukan yang berikut untuk mengikuti tutorial ini
Mengapa menggunakan caching?Sementara versi awal bekerja dengan sangat baik, kinerjanya akan mencapai puncaknya cukup cepat, karena — pada setiap permintaan — data blog dikumpulkan dari kumpulan file Markdown dengan frontmatter YAML di sistem file aplikasi, mem-parsing data artikel sebelum data blog dapat dirender Untuk mengurangi kerumitan, artikel blog hanya berisi sedikit informasi. tanggal terbit, slug, sinopsis, judul, gambar utama, kategori, dan konten artikel Data yang diurai ini kemudian digunakan untuk menghidrasi serangkaian entitas ( 7) yang memodelkan artikel blog. Mengikuti hidrasi entitas, setiap artikel yang tidak diterbitkan (berdasarkan tanggal penerbitannya) akan disaring, dengan artikel yang tersisa diurutkan dalam urutan tanggal penerbitan terbalikSaat membaca file dari sistem file aplikasi bukanlah pendekatan yang paling berkinerja, itu juga bukan pembunuh kinerja. Server penyebaran dapat dilengkapi dengan perangkat keras yang dioptimalkan dan disetel dengan benar, seperti teknologi NVMe Namun, terlepas dari perangkat keras yang digunakan host, dan seberapa baik dioptimalkan, menjalankan pipa 8 penuh pada setiap permintaan, tidak efisien dan borosJauh lebih efisien untuk menjalankan pipeline lengkap hanya sekali, dan menyimpan data gabungan dalam cache. Kemudian, pada setiap permintaan berikutnya, hingga cache kedaluwarsa, baca data gabungan dan render. Melakukannya akan menghasilkan waktu muat halaman yang jauh lebih rendah, memungkinkan aplikasi untuk menangani lebih banyak pengguna, dan mengurangi biaya hosting dan dampaknya terhadap lingkungan Ini tidak akan menjadi pendekatan yang paling dioptimalkan, tetapi ini akan meningkatkan kinerja aplikasi setidaknya 47% Refactoring akan dipecah menjadi tiga bagian
Kloning kode sumberUntuk memulai, tiru kode sumber aplikasi ke mesin pengembangan Anda, ubah ke direktori kloning, dan periksa 1. 0. 0 tag dengan menjalankan perintah berikut
1. 0. 0 tag berisi versi kode dari bagian pertama seri ini. Aplikasi, seperti yang akan terlihat di akhir tutorial ini, tersedia di tag 9Instal dependensi yang diperlukanSekarang, Anda perlu menambahkan dua dependensi tambahan, sehingga aplikasi dapat meng-cache data artikel blog agregat di Memcached;
Untuk menginstalnya, jalankan perintah di bawah ini, di direktori root proyek
Caching terintegrasiJika Anda melihat publik/index. php, Anda akan melihat bahwa data blog awalnya digabungkan dalam layanan DI bernama 0
Kemudian, diurutkan dan difilter dalam definisi penangan rute default
Pendekatan ini bekerja, bagaimanapun, itu membuat penerapan caching bermasalah karena proses penyortiran dan pemfilteran dijalankan pada setiap permintaan, menghilangkan sebagian besar manfaat caching Untuk memfaktor ulang aplikasi agar caching dapat diimplementasikan secara efisien akan memerlukan perubahan pada sejumlah aspek, tetapi tidak terlalu banyak Refaktor BlogItem agar dapat diserialisasiHal pertama yang harus dilakukan adalah memfaktorkan ulang 7 sehingga dapat diserialkan. Alasannya adalah karena variabel anggota _2 adalah objek DateTime. Itu akan merusak serialisasi, karena banyak kelas PHP bawaan, termasuk DateTime,Jadi, hal pertama yang harus dilakukan adalah
Untuk melakukannya, di src/Blog/Entity/BlogItem. php, ubah tipe _2 menjadi string, seperti pada contoh di bawah ini
Kemudian, refactor metode _7, hapus kasus inisialisasi khusus untuk 2, dengan menggantinya dengan kode di bawah ini
Terakhir, perbarui metode _4 agar cocok dengan kode di bawah ini, sehingga mengembalikan objek 5 yang diinisialisasi dengan 2
Refaktor ContentAggregatorFilesystemHal berikutnya yang harus dilakukan adalah memperbarui src/Blog/ContentAggregator/ContentAggregatorFilesystem. php, untuk melakukan dua hal
Pertama, perbarui _2 agar sesuai dengan versi di bawah ini
Kemudian, tambahkan metode _3 di bawah ini, setelah 2
Kemudian, tambahkan pernyataan _7 berikut ke bagian atas file
Refactor wadah DISekarang, saatnya untuk memfaktorkan ulang wadah DI. Untuk melakukan itu, di public/index. php, ganti layanan _0 dengan definisi berikut 0Kemudian, tambahkan pernyataan _7 berikut ke bagian atas file _1Kode yang direvisi dimulai dengan mengambil cache aplikasi dari layanan yang belum ditentukan bernama 0. Kemudian, ia memeriksa apakah cache memiliki item bernama 1, yang akan berisi artikel gabunganJika demikian, itu mengembalikan item yang di-cache. Jika tidak, saluran agregasi konten lengkap dijalankan, entitas 2 gabungan disimpan dalam cache aplikasi, lalu dikembalikanTambahkan layanan Memcached ke wadah DI aplikasiSelanjutnya, Anda perlu menambahkan layanan cache ( 0) yang menjadi sandaran layanan agregasi konten yang direfaktorisasi ( 1). Untuk melakukan itu, di public/index. php, tambahkan kode di bawah ini setelah service ________14______1 _2Kemudian, ganti 6 dengan nama host, atau alamat IP, dari server Memcached AndaSetelah menambahkan layanan DI baru, tambahkan pernyataan 7 berikut ke bagian atas file _3Kode menentukan server Memcached untuk terhubung, di 8. Kemudian, ini menginisialisasi objek _9, yang menangani interaksi dengan server Memcached, meneruskannya ke 8Setelah itu, ia menggunakan objek tersebut untuk menginisialisasi dan mengembalikan objek 1. Objek ini tidak benar-benar diperlukan. Namun, melakukan hal itu memberikan antarmuka yang agak sederhana ke objek 9 , yang mungkin biasa Anda gunakan jika Anda telah mengimplementasikan caching sebelumnya; . e. , metode seperti 3, 4, 5, dan 6Refactor handler rute defaultHal terakhir yang harus dilakukan, di public/index. php, adalah untuk memperbarui kedua definisi rute. Pertama, ganti rute default dengan kode berikut _4Rute mengambil layanan _1 DI, memanggil 3 untuk mengambil item yang diterbitkan, dan menyetel item yang diambil sebagai variabel templat 9. Ini membuat definisi rute jauh lebih ringkas, dan tidak menggabungkan beberapa masalahSelanjutnya, ganti definisi rute kedua, dengan kode berikut 5Perubahan ini diperlukan agar, juga, mereferensikan layanan 1 DI, bukan layanan 0 yang tidak digunakan lagiUji perubahannyaDengan semua perubahan yang dilakukan, jalankan aplikasi dengan menjalankan perintah berikut di direktori root proyek _6Jika Anda lebih suka menggunakan Docker Compose, yang saya lakukan, unduh direktori docker dan docker-compose. yml file dari 2. 0. 0 tag dari repositori GitHub proyek. Kemudian, mulai aplikasi dengan menjalankan perintah berikut 2Kemudian, di browser pilihan Anda — sebelum memuat aplikasi — buka tab atau jendela baru. Kemudian, buka Alat Pengembang dan buka tab Jaringan Sekarang, buka http. // localhost. 8080. Setelah halaman selesai dimuat, pilih permintaan HTML dan, di panel sebelah kanan, ubah ke tab Waktu Catat waktu "Diunduh". Dengan ini sebagai permintaan pertama, tidak ada konten yang di-cache yang tersedia, sehingga proses agregasi konten lengkap akan selesai, dan hasilnya disimpan di Memcached Sekarang, muat ulang halaman. Waktu pengunduhan harus terasa kurang dari permintaan awal, konten diambil dari cache, bukan dikumpulkan Dengan menggunakan caching, pemuatan halaman kedua sekitar 75% lebih cepat daripada pemuatan pertama, di mana cache tidak dihangatkan Itulah cara meningkatkan performa aplikasi web PHP menggunakan MemcachedKadang-kadang, seperti dalam aplikasi ini, terlepas dari manfaat kinerja yang dibawanya, caching tidak dapat langsung dilakukan. Namun, memungkinkan untuk kasus penggunaan khusus Anda, dengan sedikit pemfaktoran ulang, Anda dapat memanfaatkannya, dan mulai menangani lebih banyak pengunjung secara signifikan Tertarik untuk meningkatkan kinerja aplikasi lebih jauh lagi? Matthew Setter adalah Editor PHP di tim Twilio Voices dan (tentu saja) seorang pengembang PHP. Dia juga penulis Deploy With Docker Compose. Saat dia tidak menulis kode PHP, dia mengedit artikel PHP yang bagus di Twilio. Anda dapat menemukannya di msetter@twilio. com, Twitter, dan GitHub Nilai posting ini 1 2 3 4 5 Penulis
Peninjau
Pos terkaitCara Mengirim Email di PHP pada tahun 2023 23 Januari 2023 Pada artikel ini, Anda akan mempelajari tiga cara berbeda untuk mengirim email dengan PHP; Laravel Breeze vs Laravel Jetstream 20 Januari 2023 Pada artikel ini, Anda mendapatkan pengantar komprehensif untuk Laravel Breeze dan Jetstream, termasuk menginstalnya, diskusi tentang perbedaan dan persamaannya, dan kapan menggunakannya Bantu Mereka Membantu Orang Lain 06 Desember 2022 Dalam tutorial ini, Anda akan mempelajari cara membuat aplikasi untuk membantu siapa saja dengan cepat menyumbang ke badan amal dan nirlaba menggunakan Slim Framework, Vue. js, dan Tailwind CSS Pelajari Bahasa Maasai dengan Cara yang Menyenangkan 20 Oktober 2022 Dalam tutorial ini, Anda akan membuat aplikasi yang membantu Anda mempelajari bahasa Maasai dengan cara yang mudah dan menyenangkan menggunakan WhatsApp Pub/Sub di Laravel - Pemahaman Mendalam 20 Oktober 2022 Dalam tutorial ini, Anda akan belajar tentang Pub/Sub, pola desain perangkat lunak berbasis pesan dan cara mengimplementasikannya di Laravel |