Apakah menggunakan AJAX secara ekstensif meningkatkan kinerja server?

10

Jelas AJAX meningkatkan antarmuka pengguna tetapi apakah ini juga mengurangi beban server? Anda akan berpikir itu terjadi karena seluruh halaman tidak harus dilayani setiap kali, tetapi mungkin ada variabel lain yang tidak saya pertimbangkan.

pembuat kode
sumber

Jawaban:

14

Itu tergantung pada apa yang Anda lakukan dan bagaimana Anda melakukannya.

  • Jika Anda mengganti beban halaman penuh dengan permintaan AJAX (yaitu hanya melakukan panggilan AJAX ketika pengguna mengklik apa yang seharusnya menjadi beban halaman penuh) maka AJAX akan mengurangi beban server karena Anda (mungkin) melakukan lebih sedikit pemrosesan dan mengembalikan lebih sedikit data.

  • Di sisi lain, jika Anda menambahkan pembaruan otomatis tipe AJAX yang melakukan polling server setiap beberapa detik maka itu dapat meningkatkan beban tergantung pada pengguna (itu mungkin tidak meningkatkan beban server jika pengguna terus menekan F5 untuk menyegarkan secara manual, tetapi kebanyakan orang biasanya tidak melakukannya selama berjam-jam)

  • Pengoptimalan AJAX lainnya adalah dengan hanya memuat lebih banyak data saat Anda menggulir. Dalam hal ini jika pengguna tidak menggulir sepenuhnya ke bawah, itu adalah proses yang sia-sia.

Tentu saja sebenarnya implementasi dapat membuat hasil menjadi miring, ini adalah hasil yang khas dengan asumsi implementasi yang cukup baik.

Davy8
sumber
Pertanyaan sebenarnya di sini adalah apa yang berubah ketika Anda pindah ke cara AJAX dalam melakukan sesuatu? Apakah Anda dapat menghilangkan pekerjaan yang terbuang sebelumnya dengan pindah ke AJAX, atau hanya memecahnya menjadi potongan-potongan kecil? (dan menambahkan overhead dalam proses)
SplinterReality
3

Tentu saja berfungsi untuk mengurangi beban server. Lihatlah presentasi ini @ jsconf'09 - untuk bagaimana Facebook menggunakan ajax untuk melakukan itu.

Ajax adalah async. komunikasi server - dan Anda dapat menggunakannya dalam berbagai cara. Orang-orang menggunakannya untuk memuat JSON sederhana ke Web waktu nyata, dan semua yang ada di antaranya.

Ingat - tantangan sebenarnya adalah keseimbangan antara klien dan server. Berusaha keras untuk membuat setiap pihak bekerja dengan baik sehingga sistemnya dioptimalkan dan Anda mendapatkan manfaat yang jelas dari Perceived Responsiveness dan Speed ​​nyata.

treecoder
sumber
3

Ada faktor-faktor lain yang tidak Anda pertimbangkan - dalam kebanyakan kasus, AJAX akan meningkatkan beban server. Dalam skenario tipikal, non-ajax, pengguna memuat satu halaman besar setiap beberapa detik atau beberapa menit. Ya, satu halaman itu lebih berfungsi untuk server, tetapi memiliki banyak waktu antara permintaan untuk memulihkan dan melayani permintaan lainnya. Dalam skenario AJAXified, pemuatan satu halaman sekarang menjadi lusinan hit kecil, terus-menerus memalu server dan menunggu tanggapan.

Ini seperti kematian dari 1000 luka - tidak ada permintaan yang sebesar itu, tapi berat totalnya adalah seorang pembunuh. Terutama ketika Anda mulai mempertimbangkan bahwa permintaan kecil ini hanya semahal untuk melayani permintaan satu halaman penuh. Dalam kedua kasus, Anda mungkin menjalankan seluruh saluran aplikasi web, memukul database dan menunggu jawaban sambil duduk di koneksi HTTP yang berharga.

Berikut adalah contoh bagaimana ajax bisa menjadi jelek di server dengan sangat cepat. Mari kita ambil "dasbor eksekutif" khas yang menampilkan 4 slot untuk widget. Katakanlah CEO menyukai laporan penjualan penuh di sisi kanan, daftar top 10 penerima di tengah dan laporan harga saham perusahaan di sebelah kanan. Dan katakanlah kita akan melakukan ini melalui permintaan remote ajax sederhana. Tanpa memperhitungkan lembar gaya akun, gambar, dan aset lainnya, halaman Anda sekarang membutuhkan 4 round trip HTTP (halaman utama, masing-masing laporan dasbor) terhadap server. Masing-masing membutuhkan tumpukan web lengkap untuk dieksekusi - Anda akan memukul database dan rendering HTML menggunakan kerangka kerja web Anda, kan? Sekarang gandakan CEO tunggal dengan 2000 pengguna jarak jauh beberapa di antaranya memiliki koneksi jerawatan.

Sebaliknya, Anda bisa memiliki satu halaman sisi server yang mengeksekusi dan mengembalikan kerangka HTML serta data (termasuk dalam JSON dalam-halaman) untuk menyajikan laporan. Koneksi tunggal, lebih besar tetapi lebih sedikit mengalahkan pada server web secara total karena Anda tidak menangani 4 permintaan dan memutar 4 pipa, dll.

Wyatt Barnett
sumber
1
Bisakah Anda memberikan contoh permintaan kecil yang Anda perlukan di AJAX yang tidak Anda perlukan sebaliknya?
jhocking
1
Tentu - pernah memperhatikan bagaimana, di situs ini, itu bisa memberi tahu Anda jika seseorang sudah menjawab pertanyaan? Itu dilakukan melalui permintaan ajax kecil. . .
Wyatt Barnett
@ WyattBarnett AJAX tidak selalu berarti polling. Anda cukup mengganti beban halaman penuh dengan beban halaman parsial. Dalam banyak kasus ini dapat meningkatkan beban server tetapi saya tidak berpikir itu benar dalam "kebanyakan kasus".
Davy8
hm, contoh itu bagi saya lebih seperti sesuatu yang dapat Anda lakukan di AJAX yang tidak dapat Anda lakukan selain dari sesuatu yang membutuhkan lebih banyak permintaan server daripada sebaliknya. Saya kira OP tidak jelas apakah yang dia maksudkan "lebih banyak kinerja ketika melakukan hal yang sama persis" atau jika dia berarti "lebih banyak kinerja ketika mengambil keuntungan penuh dari AJAX"
jhocking
1
Perhatikan bahwa polling / polling panjang hanyalah subset dari AJAX (seperti yang disebutkan di sini), juga disebut sebagai "komet" . Websockets, yang memungkinkan push "polling" gratis atau sisi server (diprakarsai server) AJAX akan sangat mengurangi pemborosan sumber daya yang diperlukan untuk fitur semacam ini.
Alan H.
2

Jika Anda menggunakan AJAX untuk menggantikan pekerjaan yang seharusnya dilakukan server maka ya itu akan meningkatkan kinerja server. Namun, Anda mungkin telah merancang hal-hal sehingga server masih melakukan hal yang sama dan sekarang apa pun yang terjadi dengan AJAX berada di atas apa yang sudah dilakukan server.

Sebagian besar ini tentang hal-hal UI, karena Anda tidak boleh melakukan hal lain di sisi klien. Pada dasarnya, apa pun yang dilakukan server untuk mendukung UI (mis. Memuat ulang halaman dengan tata letak yang berbeda sebagai respons terhadap input pengguna) lakukan dengan JavaScript sebagai gantinya.

jhocking
sumber
0

Jika rendering HTML adalah bagian besar dari profil kinerja server aplikasi Anda, maka memindahkan rendering HTML ke klien dapat menjadi kemenangan kinerja pada server aplikasi.

Namun, jika rendering HTML adalah bagian kecil dari profil kinerja server aplikasi Anda, maka lebih banyak permintaan biasanya berarti lebih banyak perjalanan melalui tumpukan, lebih banyak permintaan, lebih banyak segalanya di server aplikasi, kehilangan kinerja.

Tentu saja, satu-satunya cara untuk mengetahui dalam kasus khusus Anda adalah dengan mencobanya.

yfeldblum
sumber
1
Saya mengalami kesulitan memikirkan contoh di mana menggunakan AJAX akan menyebabkan lebih banyak permintaan daripada melakukan hal yang sama tanpa AJAX. Bisakah Anda memberi contoh?
jhocking
1
HTML selalu ditampilkan di sisi klien.
Jonas
1
Agaknya dia salah bicara dan berarti "manipulasi" dan bukan "rendering"
jhocking
Mulai dari tampilan / templat, menggabungkannya dengan variabel, dan rendering HTML mentah dari itu.
yfeldblum
AJAX akan menyebabkan lebih banyak permintaan daripada melakukan hal yang sama tanpa AJAX dalam kasus-kasus seperti: tata letak utama Anda memiliki "lubang" tetapi dikirimkan dengan lubang itu ke browser, dan lubang itu "diisi" menggunakan AJAX. Lihat misalnya Facebook.
yfeldblum
0

Anda harus mempertimbangkan cara terbaik untuk mengimplementasikan solusi Anda. Bentuk sederhana yang tidak dinamis tidak perlu ajax dan menambahkannya sebenarnya dapat merusak kinerja. Jika masalah Anda adalah kueri buruk, semua pengoptimalan ajax di dunia tidak akan memberi Anda peningkatan kinerja yang dapat diterima.

Jika server Anda terlalu banyak bekerja, Anda perlu mencari tahu alasannya.

Jika Anda mendapatkan banyak hit maka ajax tidak akan memperbaiki masalah yang Anda butuhkan kapasitas lebih. Menambahkan ajax hanya akan meningkatkan jumlah permintaan yang harus ditangani server Anda.

Jika Anda memiliki halaman yang rumit, Anda harus melihat apakah ada yang bisa Anda lakukan di sisi klien untuk mengurangi beban di server Anda. Jika halaman Anda dinamis tetapi benar-benar memiliki cache paket data terbatas yang untuk penyesuaian sisi klien dapat membayar lebih baik.

Dan beberapa kali Ajax akan membantu. Ketika Anda memiliki formulir kompleks dengan data dinamis, ajax menang. Tetapi jika pertanyaan Anda rumit dan membutuhkan waktu lama untuk dijalankan, ajax tetap tidak akan menyelesaikan masalah Anda.

SoylentGray
sumber