Caching bootstrap Drupal

10

Saya ingin tahu apakah ada yang melakukan "cache" proses bootstrap di Drupal.

Biasanya, Drupal akan menjalankan 7 fase bootstrap pada setiap permintaan, tetapi mungkin pada sistem produksi yang digunakan, seseorang dapat "menghapus" dengan beberapa atau semua ini?

Saran yang mungkin saya pikirkan bisa jadi

  1. Melakukan serialisasi status bootstrap dan menempelkannya ke memcache
  2. Sebuah skrip dapat menghasilkan tambalan untuk bootstrap.inc yang akan meng-hardcode informasi tertentu ke dalam file.
  3. Saya percaya David Strauss telah mencoba untuk membuat Drupal bootstrap berjalan di libevent.
  4. Kegilaan lainnya?

Upaya apa yang ada, dan yang diketahui (agak) dapat diandalkan?

Pelajaran
sumber
Ini entah bagaimana terkait dengan pertanyaan saya tentang kompilasi Drupal: drupal.stackexchange.com/q/11738/2916
Refineo

Jawaban:

12

PHP adalah arsitektur apa-apa yang dibagikan. Itu memiliki kelebihan dan kekurangan.

Salah satu kelemahannya adalah tidak mudah melakukan hal seperti ini. Tidak banyak keadaan yang bisa disimpan di suatu tempat.

Saya melakukan beberapa tes cepat dan ketika login, maka boostrap tampaknya memakan waktu ~ 17% dari total waktu dan lebih dari 50% dari yang sebenarnya memuat semua file .module dan .inc. Itu bukan sesuatu yang bisa Anda simpan di memcache. Selain itu, tampaknya tidak terlalu menjadi masalah jika saya menggunakan memcache atau cache basis data.

Saya mencoba untuk mendapatkan beberapa hasil ketika memiliki cache halaman diaktifkan, tetapi Xhprof tampaknya tidak mengembalikan hasil yang dapat dipercaya kemudian; semuanya sepertinya terlalu cepat. Tetapi bahkan kemudian, bagian terbesarnya melibatkan mengeksekusi init / hooks keluar dan memuat file tampaknya. Saya menemukan masalah yang menarik di sana: Sepertinya modul Pengguna secara serius memperlambat respons halaman yang di-cache karena memicu registri karena pengontrol entitas dalam file .module.

Yang mengatakan, David Strauss menunjukkan beberapa karya eksperimental di Kopenhagen di mana ia membuat snapshot memori setelah bootstrap dan kemudian kembali ke itu setelah halaman disajikan. Dia menggunakan Drupal 6 untuk itu. Setelah melihat angka-angka di atas, saya membayangkan bahwa keuntungan kinerja melakukan ini di Drupal 7 akan sedikit lebih kecil. Salah satu alasan untuk ini adalah bahwa koneksi database malas dimuat (Dan Anda bisa mendapatkan cukup jauh di bootstrap saat menggunakan misalnya Memcache sebelum Anda perlu menjalankan permintaan pertama) dan ada banyak yang di-cache.

Apa yang benar - benar buruk di Drupal 7 adalah lapisan render dengan array besar ini dan perulangan dan loop tak berujung. Itu cukup banyak membatalkan semua pekerjaan kinerja yang masuk ke Drupal 7. Mari kita lihat tampilannya di Drupal 8, jika Twig membuatnya menjadi inti.

Terakhir, tentang kelebihan yang disebutkan. Satu keuntungan besar adalah bahwa leek memori agak tidak relevan karena semuanya dibebaskan setelah setiap permintaan. Saya telah melihat banyak aplikasi Java di mana penggunaan memori terus meningkat dan perlu restart secara teratur.

Berdir
sumber
4
Saya sangat suka memiliki Anda di situs @Berdir;)
Letharion
Alex Bronstein menyebutkannya selama sprint bahwa agak lambat untuk memasukkan file tpl.php bahkan dengan APC memerlukan stat - tetapi Twig mengkompilasi ke kelas sehingga akan menjadi kemenangan di halaman seperti simpul + banyak komentar. Kita lihat.
Saya kira Anda bisa membuat sistem di mana, untuk halaman yang di-cache, Anda menghasilkan banyak aturan penulisan ulang dan meletakkannya di .htaccess, disertai dengan halaman html untuk mem-bypass PHP sepenuhnya. Mungkin tidak sepadan dengan masalahnya: IIS, nginx, pengguna yang masuk, ...
Bart
1
@Bart: Kamu baru saja menciptakan kembali Boost: drupal.org/project/boost :)
Berdir
5

Tidak, itu David Strauss yang sedang bereksperimen dengan peristiwa-kargo (sekarang disebut Kellner) di https://code.launchpad.net/~fourkitchens/pressflow/6-ditemukan tetapi saya ragu ada yang serius keluar dari sana.

Drupal 7 memang memiliki banyak bootstrap yang sudah di-cache, ada tempat cache_bootstrapsampah untuk itu. Anda bisa menempelkannya ke memcached.

Anda dapat berlebihan dan mengurangi pemuatan kode dengan memindahkan beberapa / banyak kode Drupal ke C. Damien dan dhthwy membuat ekstensi PHP di http://drupal.org/project/drupal_php_ext tidak banyak yang dilakukan dengan itu. Atau lakukan hiphop. Saya tidak tahu keadaan hiphop & Drupal 7 saat ini.

Namun, pada akhirnya, Anda perlu mencermati biaya rekayasa, katakanlah, mendapatkan pekerjaan hiphop dengan Drupal 7 (dan semua kontribusinya!) Dan membandingkannya dengan menyewa beberapa server lagi. Jika Anda dapat menyimpan, katakanlah 5% dari server Anda dan Anda memiliki 100.000 server, lakukan saja, tetapi apakah Anda Facebook? Berhati-hatilah dan hemat dengan optimisasi.


sumber
Terima kasih, saya telah memperbarui pertanyaan dan menghapus nama Anda. :) Saya menyadari bahwa untuk banyak kasus, ada cara yang jauh lebih efisien untuk menangani kinerja, saya sebagian besar penasaran.
Letharion