Bagaimana Anda meningkatkan kinerja Drupal?

54

Drupal cepat berkembang, tetapi kinerjanya sangat buruk. Sulit mencapai 50 permintaan per detik.

Dan ada begitu banyak pertanyaan SQL dalam halaman web sederhana. Jika Anda menguji waktu permintaan dari formulir yang dikirimkan di Drupal.org, itu akan selalu memakan waktu beberapa detik untuk selesai.

Bagaimana Anda meningkatkan kecepatan situs web Anda?

Bruce Dou
sumber
3
Apakah Anda benar-benar mencari situs tersebut? Saya tidak bisa membayangkan ini belum pernah dibahas berulang kali sebelumnya.
Letharion
1
Periksa slide saya goo.gl/30yi39 akan membantu Anda
mikeytown2

Jawaban:

61

Caching, caching, dan caching.

Beberapa saran yang sebelumnya saya berikan untuk pertanyaan serupa tentang do

  1. Meletakkan Varnish atau proxy-terbalik di depan http-deamon Anda mungkin adalah satu-satunya hal terbaik yang dapat Anda lakukan.
  2. Selama DrupalCon Copehagen, Rasmus menyatakan bahwa menggunakan cache opcode php, seperti APC , adalah salah satu hal terbaik yang dapat Anda lakukan untuk mempercepat PHP secara umum. Performa meningkat dengan versi PHP yang lebih baru. Ada juga manfaat tambahan untuk memutakhirkan PHP ketika Anda memutakhirkan Drupal. Dari 6 hingga 8, Drupal akan mengalami perubahan besar ke arah orientasi objek, yang juga merupakan peningkatan kinerja paling banyak terjadi di versi PHP yang lebih baru.
  3. Memcache adalah pilihan populer untuk mempercepat cache, dengan meletakkan cache ke dalam memori alih-alih disk.
  4. Panel + Caching yang dikombinasikan dengan tindakan Cache dapat meningkatkan kinerja secara signifikan, bahkan untuk pengguna yang masuk, karena mendukung logika yang cukup rumit.
  5. The Entity Cache adalah bagus dan nol-conf meningkatkan kecepatan untuk siapa saja yang menggunakan Drupal 7.
  6. Situs tulis-berat memiliki lebih sedikit solusi "mapan". Beberapa opsi termasuk.
    1. Bergerak sering menulis seluruhnya, misalnya statistik, di tempat lain, seperti google analytics.
    2. Caching operasi penulisan yang sering dilakukan dengan solusi kustom dalam sesuatu seperti NodeJS yang akan menulis ke DB setiap Xth detik.
    3. Korbankan ACID yang sakral , dan gunakan database seperti MongoDB . (Lihat komentar Berdir di bawah)
    4. Mengelompokkan database SQL Anda. Apakah membaca dari satu database, menulis ke yang lain. Ini asli untuk D7 dan Pressflow dapat membantu dengan itu di D6.
Pelajaran
sumber
Semua ini telah ditambahkan, tetapi semua ini untuk caching baca, tidak baik untuk situs yang memiliki banyak penulisan.
Bruce Dou
Anda tidak mengatakan sesuatu yang spesifik tentang menulis. :) Saya akan menambahkan sesuatu tentang itu dalam jawaban saya.
Letharion
1
Klarifikasi tentang MongoDB. Anda tidak dapat mengalihkan basis data lengkap Anda ke MongoDB. MongoDB adalah sesuatu yang sama sekali berbeda dari DBMS seperti MySQL dan tidak misalnya menggunakan SQL. Anda hanya dapat mengganti komponen pluggable tertentu dan menggunakannya untuk menyimpan bagian dari data Anda di MongoDB, misalnya bidang, log, blok, dan sebagainya.
Berdir
@Letharion >> Klaster basis data SQL Anda. Apakah membaca dari satu database, menulis ke yang lain. Pressflow dapat membantu dengan itu. Bagaimana ini bisa dicapai?
GoodSp33d
1
Jawaban bagus! Pasti, definitif. Untuk menambah ini, lihat modul Advanced CSS / JS Aggregation karena pemahaman saya adalah bahwa agregasi mengurangi permintaan untuk file CSS dan JS tunggal sehingga membantu meningkatkan kinerja.
therobyouknow
23

Ini adalah catatan dari pengalaman saya dan mungkin berbeda dari apa yang orang lain alami. Saya terutama menggunakan tumpukan LAMP dan telah mempertimbangkan hal yang sama dalam saran saya.

Aturan jempol untuk caching yang biasanya saya ikuti.

  1. Proses Sekali Gunakan Beberapa Kali.
  2. Hidup dengan data basi jika memungkinkan
  3. Hapus Cache jarang dan pertahankan sangat spesifik.
  4. Bila memungkinkan lakukan perubahan pada level terendah di stack. LAMP - DCCc: Linux, Apache, Mysql, PHP, Drupal Core, Contrib dan modul kustom.

Meningkatkan Kinerja Situs Drupal (Dalam urutan kompleksitas yang semakin meningkat)

  1. Biarkan inti diperbarui, modul kontrib dan tema diperbarui. Ya itu penting.

  2. Instal APC di server Anda. (Pindah ke atas berdasarkan saran dari Letharion)

  3. Caching Halaman: admin / config / pengembangan / kinerja Perbedaan antara masa hidup cache minimum dan Kadaluarsa halaman yang di-cache

  4. Blokir Singgahan https://drupal.org/project/blockcache_alter Opsi singgahan untuk semua blokir.
  5. Agregat file javascript dan css - Perbaikan Ujung Depan https://www.drupal.org/project/advagg
  6. Nonaktifkan modul yang tidak perlu. Setiap modul menambah jumlah kode yang perlu tersedia untuk memuat halaman. Dan itu juga meningkatkan jumlah pencarian. Jika memungkinkan, gunakan modul generik sebagai pengganti beberapa modul yang melakukan fungsi khusus.
  7. Konten Tampilan Cache - Caching sadar konten untuk Tampilan https://www.drupal.org/project/views_content_cache
  8. Nonaktifkan DB logging - Gunakan https://drupal.org/project/syslog_ng
  9. Kurangi 404 Kesalahan - http://www.brokenlinkcheck.com/
  10. Respons Cepat 404 - https://drupal.org/project/fast_404 - Cobalah menangani di tingkat server.
  11. Validasi Sisi Klien - https://www.drupal.org/project/clientside_validation
  12. Compress Image - https://www.drupal.org/project/imageapi_optimize
  13. Pemuatan Gambar Malas - Jangan memuat gambar yang tidak perlu - https://www.drupal.org/project/lazyloader
  14. Gunakan Sprite Sheets - https://www.drupal.org/project/spritesheets

  15. Setel Nilai Waktu Seumur Hidup Cache Minimum ke angka yang lebih tinggi dan gunakan modul pembersihan cache untuk menghapus cache untuk halaman tertentu - Setiap kali saya mengedit / memperbarui sebuah node, semua cache halaman untuk pengguna anonim hilang

  16. Gunakan Modul Devel untuk menonton pertanyaan.
  17. Menulis ulang Tampilan Pertanyaan / hindari Tampilan jika ini adalah kerja keras.
  18. XHProf - https://www.drupal.org/project/XHProf
  19. FPM, HHVM.
  20. Profiling dan Tuning DB - https://www.drupal.org/project/dbtuner
  21. Gunakan Boost , jangan Bootstrap DB jika tidak diperlukan. https://drupal.org/project/boost Untuk sebagian besar situs kecil dan menengah, Peningkatan cukup baik dan Anda mungkin tidak memerlukan Reverse Proxies atau lebih.
  22. Gunakan CDN - https://www.drupal.org/project/cdn Mudah diatur.
  23. Jika tabel cache Anda sangat besar gunakan Memcached - Jika Anda dapat menginstal memcached dan mengatur RAM untuk itu, itu tidak serumit kedengarannya.
  24. Etags - Konfigurasikan Etag dengan benar. https://developer.yahoo.com/blogs/ydnfiveblog/high-performance-sites-rule-13-configure-etags-7211.html
  25. Gunakan Reverse Proxy Server - Varnish (setidaknya untuk aset). Membantu banyak jika sebagian besar pengguna Anda anonim.
  26. Transfer terkompresi - Mengaktifkan kompresi gzip
  27. Keep Alive - Gunakan Koneksi Persisten jika memungkinkan.
  28. JPEG Progresif -
  29. CACHING IN CODE - Blog Eaton mengagumkan. http://www.lullabot.com/blog/article/beginners-guide-caching-data-drupal-7
  30. Terapkan Pemanasan Cache - https://www.drupal.org/project/cache_warmer - Cache Warming halaman sebelum pengguna akhir mengkliknya.
  31. Master Slave DB Config - https://www.drupal.org/project/autoslave memudahkan Anda untuk mengaturnya.
  32. Database Clusters - https://stackoverflow.com/questions/1163216/database-cluster-and-load-balancing
  33. Load Balancers - http://en.wikipedia.org/wiki/Load_balancing_(computing)
  34. Gunakan Pemanasan Cache heuristik - https://www.drupal.org/project/cache_graceful
  35. Caching Pengguna Terotentikasi - https://www.drupal.org/project/authcache
Gokul NK
sumber
Menulis ulang jawaban yang saya tulis untuk drupal.stackexchange.com/questions/118990/… . BTW itu ditutup mengatakan itu terlalu luas. Saya tidak yakin apakah ada banyak perbedaan dalam dua pertanyaan ini :)
Gokul NK
18

Modul Boost juga cukup berguna, ini menciptakan cache file statis dari halaman web Anda. Ini sebagian besar untuk situs web dengan banyak lalu lintas pengguna Anonim.

Boost menyediakan caching halaman statis untuk Drupal yang memungkinkan peningkatan kinerja dan skalabilitas yang sangat signifikan untuk situs yang menerima sebagian besar lalu lintas anonim. Untuk hosting bersama, ini adalah opsi terbaik Anda dalam hal meningkatkan kinerja. Pada server khusus, Anda mungkin ingin mempertimbangkan Varnish.

Apache didukung penuh, dengan Nginx, Lighttpd dan IIS 7 semi-didukung. Boost akan melakukan cache & gzip memampatkan html, xml, ajax, css, & javascript. Logika kedaluwarsa cache peningkatan sangat canggih; itu cukup sederhana untuk memiliki daya tahan cache yang berbeda untuk berbagai bagian situs Anda. Perayap bawaan memastikan konten kadaluarsa dengan cepat dibuat ulang untuk pemuatan halaman yang cepat.

Beebee
sumber
1
Boost berfungsi baik untuk Drupal 7 sekarang imao. Pada solusi shared hosting ini adalah cara terbaik untuk pergi (karena mereka sering tidak mengizinkan Varnish misalnya).
Sage
5

Perlu disebutkan, jika Anda menggunakan driver database SQLIte, Anda mungkin harus menonaktifkan sinkronisasi disk.

/**
 * Implements hook_init().
 */
function HOOK_init() {
  db_query('PRAGMA synchronous = OFF');
}

Pada beberapa konfigurasi server ini akan meningkatkan kinerja secara dramatis.

ya.teck
sumber
2
Karena ini dinonaktifkan pada setiap pemuatan halaman, saya berpikir jika ada cara yang lebih baik untuk menonaktifkannya secara permanen. Harus meluangkan waktu untuk memeriksanya.
Gokul NK
1
Dimungkinkan untuk melakukannya di situs / default / settings.php, dengan menambahkan elemen 'init_commands' ke array $ databases. Saya menemukan contoh untuk " PRAGMA
syncous
4

Rahasia kinerja Drupal adalah dalam caching dan mengikuti praktik yang baik. Saran:

Drupal back-end

  • Aktifkan caching di bagian Kinerja .
  • Periksa modul Kinerja dan Kinerja dan Skalabilitas Daftar Periksa .
  • Periksa Opsi Pengoptimalan Kinerja Drupal 7 dan Daftar Periksa .
  • Nonaktifkan modul yang tidak terpakai dan non-produksi (seperti Devel, UI Tampilan, UI Aturan, dll.).
  • Nonaktifkan modul yang tidak stabil.
  • Nonaktifkan statistik .
  • Nonaktifkan modul inti dblog dan ganti dengan syslog .
  • Nonaktifkan modul inti Update Manager .
  • Cron: Gunakan cron bawaan Drupal, bukan poormanscron (pertimbangkan Elysia atau Ultimate cron).
  • Tampilan: Gunakan cache untuk tampilan di berbagai lapisan (kueri basis data, markup, berbasis waktu).
  • Blok: Gunakan caching blok jika tampilan Anda adalah blok (per halaman, pengguna, dll.).
  • Blok: Pertimbangkan mengubah pengaturan cache per blok dengan modul Blok Cache Alter .
  • Panel: Gunakan cache sebanyak mungkin (untuk D7 periksa modul PCC & PHC ).
  • Entity: Aktifkan cache Entity .
  • Saat menggunakan beberapa lingkungan, pertimbangkan modul yang hilang yang dapat meningkatkan pemuatan halaman.
  • Aktifkan caching halaman pengguna terotentikasi dengan modul Authcache .
  • Hindari pengalihan yang memperlambat pengalaman pengguna.
  • Tingkatkan validasi cache dengan menggunakan modul Expire .
  • Gunakan profil PHP sebelum produksi (mis. XDebug ).

Front-end drupal

  • Minimalkan Permintaan HTTP dengan:
    • Aktifkan agregasi JS / CSS di bagian Kinerja .
    • Gunakan CSS Sprite untuk mengurangi jumlah permintaan gambar.
    • Gunakan gambar kecil sebagai data sebaris (URI dalam lembar gaya).
    • Gunakan Peta gambar untuk menggabungkan beberapa gambar menjadi satu gambar.
    • Juga pertimbangkan untuk menggunakan pemuatan gambar yang malas (lihat: Image Lazyloader ).
    • Instal modul BigPipe untuk mengurangi waktu muat.
    • Pertimbangkan pemuatan malas vs evaluasi malas.
    • Lihat: Penggunaan Tembolok Peramban - Terkena!
  • Pertimbangkan untuk membuat JavaScript dan CSS Eksternal (dalam beberapa kasus ini lebih cepat).
  • Perkecil JavaScript dan CSS (lihat: Modul Speedy ). Hindari sebaris.
  • Saat mereferensikan JS, gunakan salah satu deferatau asyncatribut.
  • Minimalkan jumlah iframe.
  • Optimalkan gambar, font, CSS Sprite, buat favicon menjadi cacheable kecil dan kurangi ukuran cookie.
  • Kurangi jumlah elemen DOM dan referensi cache ke elemen yang diakses.
  • Jadikan 404 halaman Anda dimuat lebih cepat dengan menggunakan modul Fast 404 .
  • Aktifkan agregasi sumber daya front-end dan caching dengan Advanced CSS / JS Aggregation .
  • Letakkan stylesheet di bagian atas dan skrip di bagian bawah.
  • Tambahkan Kedaluwarsa atau header Kontrol-Cache , juga ETag untuk mengurangi respons.
  • Gunakan DAPATKAN untuk AJAX dan buat itu bisa di-cache.
  • Preload dan Post-load komponen untuk memanfaatkan waktu browser idle.
  • Terkadang memecah komponen di seluruh domain dapat memaksimalkan unduhan paralel.
  • Jangan skala gambar dalam HTML dan simpan komponen di bawah 25k.
  • Hindari Filter, Ekspresi CSS, elemen HTML dengan src kosong atau href.
  • Gunakan reverse proxy untuk men-debug permintaan web Anda (mis. Charles ).
  • Gunakan alat seperti Y-Slow dan PhantomJS untuk pemeriksaan kinerja dasar.
  • Gunakan alat Google PageSpeed untuk menganalisis dan mengoptimalkan situs web Anda.
  • Baca tentang spesifikasi W3C Navigation Timing ( GitHub ).

PHP

  • Aktifkan caching PHP (mis. OpCache , APC ) dan pengaturan tweak.
  • Pertimbangkan untuk menggunakan PHP-FPM, bukan mod_php plus Nginx, bukan Apache.

Basis data

Server

Situs web dengan lalu lintas tinggi

Jika Anda mengharapkan beban tinggi untuk situs web Anda, gunakan Varnish. Pertimbangkan juga menggunakan CDN.

Baca selengkapnya di: Pengalaman dunia nyata dalam penskalaan dan penyetelan kinerja


Sumber lebih lanjut:

kenorb
sumber
3

Ada sebuah buku bernama High Performance Drupal yang memberikan praktik terbaik, contoh, dan penjelasan mendalam untuk menyelesaikan beberapa masalah kinerja dan skalabilitas. Anda akan belajar cara menerapkan teknik pengkodean dan infrastruktur ke internal Drupal, kinerja aplikasi, database, server web, dan analisis kinerja.

Dalam artikel Kinerja dan Skalabilitas di Drupal 7 Anda dapat menemukan beberapa contoh tentang Drupal 6 dan Drupal 7 dan daftar berikut:

Proyek-proyek kinerja dan skalabilitas Drupal 7 yang perlu diperhatikan:

Adrian Cid Almaguer
sumber
2

Ada banyak penyesuaian untuk mengoptimalkan kinerja situs Drupal Anda - tetapi tidak semua sangat penting. Kami harus mencari alternatif dan teknik tertentu yang akan mengarah pada platform optimal Drupal. Cache, ya, ini adalah cara untuk mengoptimalkan situs web melalui cara yang berbeda tetapi beberapa tambahan dan tips dapat meningkatkan dan menyempurnakan situs web Anda tanpa proses bebas repot untuk melakukan.

Kami telah menerbitkan artikel serupa ke situs web kami baru-baru ini yang saya percaya dapat membantu Anda dalam melakukan beberapa pekerjaan tweak.

Sumber: http://www.cloudreviews.com/blog/drupal-performance-optimization-tips

Sabih
sumber
2

Ada beberapa kemungkinan untuk meningkatkan kecepatan Drupal untuk tingkat yang wajar dengan tanpa memasang modul baru. Ya, Drupal memiliki konfigurasi kinerja.

  1. Anda dapat mengatur ini dengan masuk ke: YourSiteDomain / admin / config / development / performance
  2. Aktifkan 'Halaman cache untuk pengguna anonim' di bawah Chaching
  3. Usia cache minimum: 1 hari (Jika Anda tidak melakukan pembaruan rutin)
  4. Kedaluwarsa halaman yang di-cache: 1 hari (Jika Anda tidak melakukan pembaruan rutin)
  5. Aktifkan 'Kompres halaman yang di-cache'
  6. Aktifkan 'Agregat dan kompres file CSS'
  7. Aktifkan 'Agregat file JavaScript'

  8. Setelah konfigurasi ini diatur, Pergi ke: YourSiteDomain / admin / laporan / status

  9. Periksa apakah ada masalah izin untuk direktori 'css' dan 'js'
  10. Perbaiki izin sebagaimana didefinisikan pada halaman Laporan Status

Dan sekarang Anda selesai dengan optimasi kecepatan untuk situs drupal 7 Anda.

Ada beberapa alat pengujian kecepatan online untuk memeriksa kecepatan. Pastikan untuk menggunakan salah satu alat pemeriksa cepat dan menjalankan tes sebelum memperbarui pengaturan di atas. Dan sekali setelah Anda memperbarui pengaturan kinerja jalankan tes kecepatan lagi. Anda pasti akan melihat peningkatan.

Pingdom dan HTTP Fox (plugin FireFox) adalah alat terbaik untuk memeriksa kecepatan situs.

Pengaturan di atas tidak hanya membuat cache halaman Anda untuk pengguna anonim, tetapi juga mengkompres file CSS dan JS. Contoh jika situs Anda memuat 80 file, posting pengaturan ini jumlah permintaan akan dikurangi setidaknya 50%, Jadi di sini Anda memiliki peningkatan 2x kecepatan di situs Drupal Anda.

AnAnD
sumber
2

Sebagai pengembang backend selalu ada ruang untuk meningkatkan kode Anda untuk meningkatkan kinerja situs web. Beberapa pedoman untuk pengembang backend dapat berupa:

1) Bersihkan meja pengawas Anda

2) Jangan menyalahgunakan API variabel

3) Buat Permintaan HTTP Lebih Sedikit atau Lebih Baik

4) Jaga "modul dot" Anda tetap pendek

Ketika datang ke font-end dan pembangun situs jauh lebih bisa dicapai tetapi penting untuk mempertimbangkan kinerja dari setiap sudut pandang.

Sumber: Optimalkan sebelum Anda ditayangkan

targoo
sumber
2

Situs Drupal 7 yang tidak dioptimalkan dengan 2 GB RAM dapat melayani sekitar 20-25 permintaan per detik dengan memuaskan. Jika Anda ingin melampaui itu, situs akan memerlukan beberapa penyesuaian. Apa yang Anda sesuaikan tergantung pada apakah sebagian besar pengguna di situs tersebut anonim atau dikonfirmasi. Berikut adalah hal-hal utama yang dapat Anda lakukan untuk peningkatan kinerja:

Situs melayani sebagian besar pengguna anonim:

1) Pasti menginstal dan mengkonfigurasi APC, memcache dan entitascache.

2) Letakkan proxy Varnish di depan server web. Diperlukan sekitar 30 menit untuk menginstal dan mengonfigurasi tetapi secara dramatis akan menurunkan waktu pemuatan halaman Anda. Bahkan, Varnish dapat menangani sekitar 300 permintaan per detik pada mesin 2 GB jika semua halaman di-cache. Gunakan modul Kedaluwarsa untuk hanya kedaluwarsa halaman yang dipilih pada pembaruan / penghapusan konten.

3) Gunakan modul Advanced CSS / JS Aggregation untuk mengagregasi file CSS dan JS. Coba pindahkan semua file JS ke bagian bawah halaman. Tetapi perhatikan bahwa ini dapat merusak situs Anda, jadi implementasikan ini pada produksi setelah pengujian menyeluruh. Juga bereksperimen dengan inlining CSS kritis. Dalam pengalaman saya, ini akan mengurangi waktu pemuatan halaman sekitar setengah detik.

4) CSS / JS / gambar harus memiliki header kedaluwarsa yang jauh di masa depan. Ini akan memastikan bahwa browser tidak akan meminta CSS / JS / gambar yang sama lagi dan lagi.

5) Pastikan server web melayani halaman terkompresi / CSS / JS.

Setelah menerapkan 5 langkah di atas, server RAM 2 GB Anda harus dapat mem-server 50 permintaan per detik dengan cukup mudah.

Situs melayani sebagian besar pengguna terautentikasi:

Mengoptimalkan situs semacam itu lebih kompleks. Situs-situs tersebut termasuk dalam salah satu dari dua sub-kategori untuk keperluan optimasi:

(a) Sebagian besar halaman di situs identik kecuali 1 atau 2 blok yang memiliki informasi spesifik pengguna. Untuk misalnya situs Drupal Commerce.

(B) Sebagian besar halaman sepenuhnya disesuaikan untuk pengguna. Untuk misalnya situs Drupal Commons.

Jika situs Anda termasuk dalam kategori (a), maka terapkan sebagian besar teknik yang kami diskusikan untuk situs yang melayani sebagian besar pengguna anonim. Satu-satunya perbedaan adalah bahwa untuk halaman non-admin, Varnish perlu menghapus cookie SESSION dari header dan melayani halaman dalam cache. Gunakan modul Blok AJAX ke blok server dengan informasi khusus pengguna menggunakan AJAX. Dengan cara ini sebagian besar halaman akan disajikan dengan sangat cepat menggunakan Varnish dan kemudian informasi spesifik pengguna akan dilayani melalui AJAX.

Jika situs Anda termasuk dalam kategori (b), maka gunakan modul Authcache. Saya lebih suka tidak menggunakannya sebanyak mungkin karena memerlukan sedikit konfigurasi dan pemeliharaan. Tapi itu bekerja dengan sangat baik. Ini tidak akan secepat menggunakan Varnish tetapi akan dapat menangani 50 permintaan per detik yang Anda cari.

Jika Anda ingin melampaui apa yang telah kami bahas di sini, lihat Daftar Periksa Pengoptimalan Kinerja Drupal . Pengungkapan: Ini ditulis oleh saya. Itu mengutip daftar lengkap hal-hal yang dapat Anda lakukan untuk membuat situs Drupal Anda menyala cepat.

Neerav Mehta
sumber