WordPress Heartbeat API: Interval, admin-ajax, dan Beban PHP Worker

8 menit baca
WordPress Heartbeat API: Interval, admin-ajax, dan Beban PHP Worker

Panduan WordPress Heartbeat API ini menjelaskan kenapa saran mematikan Heartbeat itu berbahaya sebelum kamu mengikutinya.

Dasbor Terbuka, admin-ajax Terus Berulang

Buka tab network di browser, saring dengan kata admin-ajax.php, lalu biarkan satu tab dasbor terbuka tanpa disentuh. Setiap beberapa puluh detik muncul satu baris POST baru dengan action heartbeat. Tutup semua tab admin dan baris itu berhenti. Buka lagi dan baris itu kembali.

Itulah tick Heartbeat: sinyal hidup yang dikirim browser ke server selama layar admin terbuka. WordPress memakainya untuk menjaga kunci tulisan, menyimpan draf otomatis, dan memberi tahu saat sesi login hampir kedaluwarsa. Selama action-nya memang heartbeat dan asalnya dari tab yang kamu buka sendiri, request itu normal.

Masalahnya bukan keberadaannya, melainkan volumenya. Tiap tab mengirim tick sendiri, tiap tick adalah satu request PHP penuh, dan dasbor yang dibiarkan terbuka seharian mengirim ratusan request kosong. Bagian berikut menunjukkan apa yang dijaga tick itu, kenapa intervalnya tidak satu angka, dan kenapa mencabut API-nya merusak editor.

Heartbeat Bukan Cron dan Bukan Serangan

Heartbeat adalah saluran tick dari browser ke server yang hanya hidup selama layar admin terbuka di tab kamu. Browser mengirim data kecil, server menjawab dengan status kunci tulisan, nonce autosave, dan sisa waktu sesi. Tab ditutup, tick berhenti, server kembali sepi.

Cron bekerja sebaliknya. Cron mengerjakan tugas terjadwal seperti menerbitkan post terjadwal dan mengecek pembaruan, meski tidak ada satu pun orang di dasbor. Artikel disable WP-Cron WordPress membahas jadwal itu dalam satu kalimat pendek: cron mengerjakan jadwal, Heartbeat menjaga layar yang sedang terbuka.

Tick juga bukan serangan. Pola request berulang ke admin-ajax.php memang mirip bot, tetapi action heartbeat dari tab admin milikmu adalah lalu lintas sah. Yang patut dicurigai adalah action lain pada berkas yang sama dari IP yang tidak kamu kenal, dan itu pemeriksaan yang berbeda.

Interval Editor Lebih Rapat daripada Dasbor

WordPress tidak memakai satu interval untuk semua layar. Layar sunting tulisan mengetuk paling sering karena kunci tulisan hanya berguna bila segar. Dasbor dan halaman admin lain mengetuk lebih jarang karena sebagian besar tick-nya kosong.

Halaman depan adalah kasus ketiga. Pengunjung biasa tidak mengirim tick sama sekali, kecuali tema atau plugin yang memang meminta Heartbeat di front-end. Angka detik pastinya wajib dicek ke source core, karena core menolak interval di luar batas minimum dan maksimum.

LayarSeberapa rapatKalau terlalu jarangKalau terlalu rapat
Editor tulisanPaling rapat di antara layar adminKunci tulisan dan autosave terlambatTab editor ikut memenuhi pool
Dasbor dan halaman admin lainLebih jarang daripada editorHampir tidak terasaBanyak tab dasbor mengirim tick kosong
Front-endSering tidak aktif, kecuali fitur yang memang memintaFitur live di halaman depan tidak dapat tickPengunjung anonim ikut mengirim admin-ajax.php
Diagram tiga baris layar WordPress dengan ketukan Heartbeat berbeda, editor mengetuk rapat, dasbor mengetuk jarang, halaman depan tanpa ketukan kecuali ada fitur live

Akibatnya dua arah. Editor yang terlalu jarang membuat kunci tulisan basi. Dasbor yang terlalu rapat hanya mengirim tick kosong yang menduduki anak PHP. Interval per layar adalah jawabannya.

Setiap Tick Menduduki Satu Anak PHP

Setiap tick wordpress heartbeat admin-ajax adalah satu request POST ke admin-ajax.php yang dieksekusi PHP sampai selesai. Selama skrip itu berjalan, satu anak PHP tidak bisa mengerjakan request lain. Inilah sisi wordpress heartbeat cpu yang nyata: bukan angka persen, melainkan slot kapasitas yang terisi.

Lima tab dasbor yang dibiarkan terbuka pada pool kecil bisa memenuhi antrean meski pengunjung biasa sedikit. Tiap tab mengetuk bergiliran, tiap ketukan menahan satu anak, dan pengunjung yang datang di saat yang salah ikut antre di belakang tick kosong. Pool yang dihitung pas untuk trafik pengunjung tiba-tiba terasa sempit di jam admin.

Koneksi database ikut terbuka hanya selama tick itu jalan, lalu ditutup kembali. Satu kalimat untuk konteks: anggaran koneksi di sisi database dibahas di artikel max_connections WordPress, tetapi penahannya tetap di sini, di jumlah tick per menit. Detail kapasitas anak PHP sendiri ada di artikel PHP worker WordPress.

Diagram empat tab browser admin yang masing-masing mengirim panah ke admin-ajax.php lalu ke kolam kecil anak PHP, dua slot terisi tick dan satu slot tersisa untuk pengunjung

Mematikan Total Menghilangkan Kunci Tulisan

Jangan dicabut total. Yang hilang pertama adalah kunci tulisan, sehingga dua penulis bisa saling menimpa tanpa peringatan. Yang hilang kedua adalah autosave, sehingga tulisan panjang hanya tersimpan saat tombol simpan ditekan manual.

Yang hilang ketiga adalah peringatan kedaluwarsa login. Tanpa tick, sesi bisa habis diam-diam dan tulisan yang baru selesai diketik gagal tersimpan saat dikirim. Sebagian plugin yang mendengarkan tick ikut berhenti: notifikasi real-time, sinkronisasi draf kolaboratif.

Mematikan Heartbeat menghilangkan penjaga editor. Yang perlu diubah adalah seberapa sering dasbor mengetuk server, bukan apakah ketukan itu boleh ada.

Catatan beda akibat: plugin yang hanya mencabut skrip di front-end tidak merusak apa-apa di admin, karena front-end memang jarang butuh tick. Mencabut di seluruh situs termasuk wp-admin adalah yang merusak kunci tulisan dan autosave. Kalau sebuah tutorial menyuruh menempel cuplikan penonaktif global, tolak langkah itu dan pakai filter interval sebagai gantinya.

Filter heartbeat_settings Cukup untuk Sebagian Besar Situs

Filter heartbeat_settings adalah cara resmi memperpanjang interval tanpa menyentuh file core. Satu filter kecil di tema anak atau plugin fungsionalitas cukup: dasbor diperpanjang, editor dibiarkan di bawah batas yang masih berguna untuk kunci tulisan. Tidak perlu plugin tambahan hanya untuk satu filter.

Batasnya dijaga core. Interval yang dipasang di luar rentang yang diterima akan dikembalikan ke batas minimum atau maksimum, jadi memasang angka raksasa agar tick berhenti sama saja tidak menulis apa-apa. Prinsipnya: perpanjang yang kosong, jaga yang penting, hormati batasnya.

Sebagian plugin cache dan optimasi sudah punya opsi interval Heartbeat di pengaturannya. Itu sah dipakai, asal opsinya benar-benar interval dan tidak ikut mematikan API di belakang layar. Cek setelah menyimpan: kunci tulisan masih muncul dan autosave masih berjalan, berarti API-nya hidup.

Heartbeat di Peta Beban Admin

Empat giliran klaster ini membentuk satu peta yang utuh. Artikel worker menghitung berapa anak PHP yang boleh sibuk, dan itulah kapasitasnya. Heartbeat yang dibahas di sini adalah salah satu pengisinya: tick dari tab admin yang menduduki slot satu per satu. Cron adalah pengisi lain yang bekerja menurut jadwal meski dasbor kosong, dan artikel disable WP-Cron memetakan jadwal itu.

Koneksi database adalah akibat samping dari request yang sedang jalan, bukan penyebab independen. Tick yang menahan anak PHP otomatis menahan satu koneksi selama eksekusinya, lalu melepasnya. Bukan penyebab TTFB halaman depan: halaman depan yang lambat untuk pengunjung anonim hampir selalu berasal dari cache, query, atau render, bukan dari tick yang bahkan tidak berjalan di sana.

Cara Memeriksa dan Memperpanjang Interval Heartbeat

Urutannya tetap: lihat requestnya dulu, baru ubah interval, lalu hitung lagi. Jangan mengubah apa pun sebelum tahu tick mana yang paling boros.

Temukan Tick di Network atau Log Akses

Saring admin-ajax.php dengan action heartbeat di tab network browser atau di log akses server. Catat dari layar mana tick itu berasal, editor atau dasbor, dan seberapa sering ia muncul per menit. Pola URL-nya selalu sama dan contoh berikut hanya ilustrasi bentuknya, bukan hasil server mana pun:

POST /wp-admin/admin-ajax.php
action=heartbeat&screen_id=dashboard
# ilustrasi pola request, bukan log server sungguhan

Ulangi untuk tiap jenis layar yang biasa terbuka: satu tab editor, satu tab dasbor, satu tab halaman plugin. Layar dengan tick tersering dan isi respons paling kosong adalah kandidat pertama untuk diperpanjang intervalnya. Catat angka awalnya sebagai pembanding setelah filter dipasang.

Pasang heartbeat_settings per Layar

Cuplikan berikut memakai filter heartbeat_settings wordpress untuk memperpanjang interval dasbor sambil membiarkan editor lebih rapat. Ini ilustrasi yang nama field-nya dicocokkan ke dokumentasi developer.wordpress.org sebelum publish, bukan salinan dari tutorial mana pun:

add_filter( 'heartbeat_settings', function( $settings ) {
    // Ilustrasi: perpanjang interval dasbor, editor tetap rapat.
    if ( is_admin() && 'post' !== get_current_screen()->base ) {
        $settings['interval'] = 60;
    }
    return $settings;
} );
// Label ilustrasi: nama field dan batas nilai
// wajib dicocokkan ke source sebelum dipakai.

Simpan, buka ulang dasbor, dan pastikan tick masih berjalan tetapi lebih jarang. Buka editor dan pastikan kunci tulisan serta autosave tetap berfungsi. Kalau autosave berhenti, intervalnya kepanjangan dan harus dikembalikan.

Hitung Ulang Tick Sebelum Mengubah Pool PHP

Setelah interval diperpanjang, hitung ulang tick per menit dari log yang sama untuk semua tab admin yang biasa terbuka. Baru bandingkan dengan kapasitas pool dari artikel PHP worker WordPress.

Yang terlihatTindakan pertamaBukan tindakan pertamanya
admin-ajax.php action heartbeat tiap beberapa detik dari dasborPerpanjang interval dasbor lewat heartbeat_settingsCabut skrip Heartbeat di seluruh situs
Hanya editor yang terasa lambat saat dua orang menyuntingCek interval editor, jangan disamakan dengan dasborMatikan kunci tulisan
Pool PHP penuh meski tick sudah jarangBaru lihat kapasitas anak PHP (artikel worker)Terus memperpanjang interval sampai autosave mati

Tambah anak PHP hanya kalau tick yang tersisa plus trafik sungguhan masih memenuhi pool.

Rekomendasi Infrastruktur Saat Admin Penuh Tab

Toko dengan beberapa staf admin yang masing-masing membuka banyak tab paling cocok di Cloud Hosting Mordenhost. Dukungan teknisnya membedakan tick Heartbeat normal dari loop plugin yang rusak saat kamu melaporkan log admin-ajax.php yang ramai, tanpa klaim saklar khusus apa pun. Kamu fokus mengelola toko, tim teknis membaca lognya.

Agensi atau tim yang perlu menghitung sendiri butuh akses log yang lebih dalam. Managed VPS Mordenhost cocok untuk kasus ini: log akses dan pool PHP bisa dibaca bersama untuk menghitung berapa slot yang dimakan tick versus pengunjung. Fondasi cara server bekerja dijelaskan ringkas di artikel memahami cara kerja hosting.

Pertanyaan yang Sering Ditanya

Empat jawaban singkat soal menonaktifkan Heartbeat, tick yang berulang, bedanya dengan cron, dan CPU yang naik saat dasbor terbuka.

Apakah Heartbeat API boleh dimatikan semuanya?

Tidak kalau yang hilang adalah kunci tulisan dan autosave. Perpanjang interval di dasbor. Editor tetap butuh tick yang cukup rapat supaya dua penulis tidak saling menimpa.

Apakah admin-ajax berulang itu tanda situs diretas?

Tidak bila action-nya heartbeat dan requestnya datang dari tab admin yang memang terbuka. Action lain pada berkas yang sama perlu diperiksa sendiri, karena bukan tick ini dan bukan serta-merta tanda penyusupan.

Apakah Heartbeat sama dengan WP-Cron?

Tidak. Cron menjalankan tugas terjadwal meski tidak ada orang di dasbor. Heartbeat hanya berjalan selama browser masih membuka layar yang mengaktifkan tick itu, lalu berhenti ketika tab ditutup.

Kenapa CPU naik hanya saat dasbor terbuka?

Karena tick dikirim dari tab itu, bukan dari pengunjung. Makin banyak tab admin, makin banyak request yang menduduki anak PHP, meski halaman depan sedang sepi.

Butuh bantuan membaca log admin-ajax atau memilih paket yang pas? Hubungi WhatsApp Mordenhost dan tim kami membantu memetakan langkah berikutnya.

TM
Tim Mordenhost
Editorial