Saya menerima email pagi ini yang menyatakan bahwa situs Wordpress saya telah diperbarui secara otomatis ke versi terbaru. Saya tahu tentang fitur ini tetapi saya selalu bertanya-tanya bagaimana cara kerjanya.
PHP bukan proses yang berjalan secara permanen: PHP hanya berjalan saat diminta. Sejauh yang saya tahu, Wordpress hanya dapat memperbarui dirinya sendiri ketika seseorang memuat halaman web. Tetapi proses pembaruan tidak instan, jadi tentunya pengguna yang mengunjungi situs akan memiliki halaman yang sangat lambat.
Apakah ada trik berbeda yang mereka gunakan untuk pembaruan otomatis? Saya sudah mencari di semua tempat tetapi belum menemukan penjelasan.
php
automatic-updates
DisgruntledGoat
sumber
sumber
Jawaban:
Sistem yang Anda cari di sini disebut "WP Cron". Ini adalah sistem proses latar belakang di WordPress yang memungkinkan acara terjadi di luar pemrosesan normal. Mereka masih membutuhkan pemicu untuk memulai, tetapi mereka tidak mengganggu pemuatan halaman karena proses latar belakang.
Jadi ya, seseorang harus memuat halaman Anda. Tidak aktif di file default-filter.php, Anda akan menemukan baris kode ini:
add_action( 'init', 'wp_cron' );
Jadi, pada setiap pemuatan halaman, fungsi wp_cron berjalan. Fungsi ini berakhir di wp-include / cron.php dan apa yang dilakukannya adalah untuk memeriksa acara yang dijadwalkan dalam database. Jika ada proses yang perlu dijalankan di latar belakang, maka ia memanggil fungsi spawn_cron.
Spawn cron memiliki dua metode operasi yang mungkin, tetapi yang pertama dan paling umum adalah memanggil fungsi wp_remote_post untuk membuat koneksi kembali ke dirinya sendiri, di URL wp-cron.php. Dengan membuat permintaan HTTP tambahan ini, ia memulai proses PHP lain untuk melakukan semua pekerjaan yang sebenarnya. Permintaan yang dibuat di sini adalah non-pemblokiran, dengan batas waktu 0,01 detik. Jadi, itu tidak benar-benar mendapatkan hasil apa pun di sini. Tujuan dari permintaan ini hanyalah untuk memulai proses baru di latar belakang. Setelah ini selesai, itu hanya kembali, sehingga pengguna yang melihat tidak pernah memiliki penundaan.
Proses wp-cron.php adalah apa yang benar-benar berfungsi, dan pembaruan, dan yang lainnya. Banyak proses di WordPress ditangani oleh sistem cron. Penerbitan posting terjadwal, pemrosesan ping, perbarui cek, apa pun yang perlu terjadi di luar aliran normal dapat dijadwalkan dan kemudian berjalan sesuai kebutuhan.
Tapi ya, hit normal ke situs itu memang harus terjadi untuk memulai proses. Dan tidak, WordPress.org tidak menghubungi situs Anda secara langsung untuk memulai sesuatu, situs Anda harus menerima beberapa bentuk lalu lintas untuk memulainya. Segala bentuk lalu lintas akan dilakukan.
sumber
Sebenarnya, pembaruan otomatis didorong dari
wp.org
. Proses pembaruan masih berjalan di situs Anda, tetapi di latar belakang viawp-cron
.Ketika pembaruan kecil baru dirilis, orang-orang di WordPress mulai meluncurkan pembaruan. Proses pembaruan aktual dimulai setelah situs Anda memeriksa
wp.org
pembaruan, pembaruan tersedia secara teoritis, dan situs Anda dipilih secara acak untuk diperbarui.Karena setiap situs memeriksa
wp.org
versi baru (biasanya menggunakan dua kali sehariwp-cron
), rolloutserver tahu berapa banyak situs yang memerlukan pembaruan.Kemudian peluncuran dimulai, mulai perlahan - 1 dari 128 situs diperbarui secara otomatis. Ini sedang dipantau, dan jika berturut-turut menunjukkan tidak ada masalah dengan peluncuran, lebih banyak situs mendapatkan pembaruan otomatis (biasanya langkah berikutnya adalah 1 dari 64, dan terus meningkat seperti itu) sampai semua pembaruan otomatis dikirim.
Ini memungkinkan pengembang untuk menghentikan peluncuran jika ada masalah, tetapi pembaruan terakhir dari
3.8
ke3.8.1
memiliki tingkat keberhasilan 100%.Situs yang dipilih
1 out of 128
sebenarnya acak. Yah, tidak juga, tetapi jika Anda ingin tahu, itu berfungsi seperti ini:Url situs yang membutuhkan pembaruan akan di-hash menggunakan
MD5
. Menggunakan hanya tiga karakter pertama dari hash ini dan mengubahnya menjadibase10
, ini menghasilkan 4096 kemungkinan. Pembaruan dimulai untuk situs yang memiliki angka yang dihitung antara 0 dan 31 (4096/32 = 128).Oke, saya kira itu cukup acak;)
Dalam kasus saya, ketika saya menjalankan banyak situs WordPress, pembaruan membutuhkan waktu 1 hari - cukup lucu untuk melihat ketika semua halaman diperbarui.
Kalau-kalau Anda bertanya-tanya: D
btw, berikut ini artikel di make.wordpress.org yang menjelaskan prosesnya, seperti yang terjadi.
sumber
Dalam istilah yang sangat luas, ketika pengguna mengunjungi situs wordpress memeriksa waktu kedaluwarsa dan jika kedaluwarsa terdeteksi, permintaan lain dikirim ke server untuk "menjalankan" tindakan yang terkait dengan peristiwa kedaluwarsa. Inilah sebabnya mengapa pengguna tidak merasakan keterlambatan nyata dalam memuat halaman, karena server menjalankan tindakan yang sebenarnya (upgrade dalam hal ini) dalam proses terpisah.
Ini berfungsi tetapi waktunya tidak terlalu akurat. Semakin banyak lalu lintas situs Anda semakin akurat.
Orang yang ingin mendapatkan kinerja yang lebih baik dan pengaturan waktu yang lebih akurat dapat memblokir "proses" cron internal yang dimiliki wordpress, dan menggunakan proses cron OS untuk memicu pengecekan pengatur waktu.
sumber