it-swarm-id.com

Langkah-langkah untuk Mengoptimalkan WordPress dalam Mengenai Beban Server?

Selain menginstal W3 Total Cache atau plugin caching lain langkah apa yang dapat saya ambil untuk memastikan bahwa tema dan situs saya berjalan secepat mungkin.

80
Paul Sheldrake

Anda dapat menginstal WordPress di Nginx. Ada sejumlah sumber daya untuk membantu:

Beberapa informasi kinerja dari tautan terakhir (yang tampaknya sedikit berbeda dari yang lain):

Jadi saya memutuskan untuk meletakkan proxy di depan wordpress ke cache statis sebanyak mungkin. SEMUA lalu lintas yang tidak diautentikasi dilayani langsung dari cache file nginx, menerima beberapa permintaan (seperti pembuatan umpan RSS) dari 6 halaman/detik hingga 7000+ halaman/detik. Oof. Nginx juga menangani pencatatan dan gzipping, membuat cache backend yang lebih berat untuk melakukan yang terbaik: melayani halaman wordpress dinamis hanya jika diperlukan.

...

Pada nginx - sangat efisien hingga menakutkan. Saya belum pernah melihatnya menggunakan lebih dari 10 hingga 15 mc RAM dan blip CPU, bahkan di bawah beban terberat kami. Grafik ganglia kami tidak berbohong: kami membagi dua persyaratan memori kami, menggandakan throughput jaringan keluar kami dan benar-benar meningkatkan beban kami. Kami pada dasarnya tidak memiliki masalah sejak kami mengatur ini.

31
Travis Northcutt

Atur expiries sisi klien untuk hal-hal seperti css, gambar, JavaScript dll yang tidak perlu diunduh ulang untuk setiap tampilan halaman. Sejauh ini, ini membuat perbedaan terbesar pada waktu pemuatan situs saya. Unduhan tercepat adalah unduhan yang tidak pernah terjadi ...

# BEGIN Expire headers
<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresDefault "access plus 7200 seconds"
  ExpiresByType image/x-icon "access plus 2592000 seconds"
  ExpiresByType image/jpeg "access plus 2592000 seconds"
  ExpiresByType image/png "access plus 2592000 seconds"
  ExpiresByType image/gif "access plus 2592000 seconds"
  ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
  ExpiresByType text/css "access plus 2592000 seconds"
  ExpiresByType text/javascript "access plus 2592000 seconds"
  ExpiresByType application/x-javascript "access plus 2592000 seconds"
  ExpiresByType text/html "access plus 7200 seconds"
  ExpiresByType application/xhtml+xml "access plus 7200 seconds"
</IfModule>
# END Expire headers

# BEGIN Cache-Control Headers
<IfModule mod_headers.c>
  <FilesMatch "\\.(ico|jpe?g|png|gif|swf|gz)$">
    Header set Cache-Control "max-age=2592000, public"
  </FilesMatch>
  <FilesMatch "\\.(css)$">
    Header set Cache-Control "max-age=2592000, public"
  </FilesMatch>
  <FilesMatch "\\.(js)$">
    Header set Cache-Control "max-age=2592000, private"
  </FilesMatch>
<filesMatch "\\.(html|htm)$">
Header set Cache-Control "max-age=7200, public"
</filesMatch>
# Disable caching for scripts and other dynamic files
<FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
Header unset Cache-Control
</FilesMatch>
</IfModule>
# END Cache-Control Headers

Anda dapat melakukan pre-gzip semua yang Anda bisa secara wajar (7-Zip adalah alat yang bagus untuk ini) & mengunggahnya di tempat yang sama dengan file yang baru saja Anda gzip. Ubah .htaccess untuk menyajikan file yang sudah di-gzip, seperti di bawah ini. Peringatan di sini adalah Anda harus ingat untuk melakukan gzip kembali jika/ketika Anda memperbarui sesuatu. Ini memotong overhead CPU, selain parsing .htaccess.

RewriteEngine on
#Check to see if browser can accept gzip files. If so and we have it - serve it!
ReWriteCond %{HTTP:accept-encoding} gzip
RewriteCond %{HTTP_USER_AGENT} !Safari
#make sure there's no trailing .gz on the url
ReWriteCond %{REQUEST_FILENAME} !^.+\.gz$
#check to see if a .gz version of the file exists.
RewriteCond %{REQUEST_FILENAME}.gz -f
#All conditions met so add .gz to URL filename (invisibly)
RewriteRule ^(.+) $1.gz [QSA,L]

Ini hanya jawaban mentah. Ada banyak variasi pada tema ini. Saya membuat blog tentang ini dan menambahkan beberapa referensi untuk artikel yang lebih mendalam di http://icanhazdot.net/2010/03/23/some-wordpress-stuff/ . Baca itu dan, yang lebih penting, referensi yang saya tunjukkan - itu adalah sumber yang bagus.

Ketahuilah bahwa jika Anda sering mengotak-atik pengguna perlu menyegarkan cache mereka.

Plugin yang saya temukan sangat berguna adalah wp-minify . Yang perlu diperhatikan dengan hal ini adalah Anda harus mengecualikan item spesifik halaman (formulir kontak, slider halaman depan dll) sehingga Anda tidak mengunduh ulang seluruh set css, JS dll untuk setiap halaman. Ini adalah cara yang baik untuk meminimalkan, menggabungkan & mengompresi CSS dasar Anda, JS dll. Ini mengurangi banyak permintaan http. Wp-minify bermain baik dengan supercache dan juga dengan header kedaluwarsa yang saya perinci di atas.

Gunakan Yslow di Firebug (Firefox) atau yang serupa untuk memantau permintaan http Anda dan apa yang dikompresi dan tidak. Lihat header kedaluwarsa di sana juga. Anda akan segera melihat apa yang dapat Anda tingkatkan.

26
CAD bloke

Minimalkan jumlah plugin yang Anda jalankan hanya untuk apa yang benar-benar Anda butuhkan. Terutama perhatikan plugin yang menambahkan kode javascript dan CSS pada setiap halaman memuat, bahkan ketika kode itu tidak digunakan pada halaman.

Jika Anda membuat tema sendiri dari awal, pisahkan CSS Anda sehingga fitur yang hanya perlu untuk templat halaman tertentu atau jenis tampilan (posting tunggal, arsip, kategori, dll) hanya dimuat saat diperlukan.

Konfigurasikan W3TC untuk menggunakan CDN (seperti Amazon CloudFront, atau yang lainnya yang didukung oleh W3TC).

Lihat apakah opsi Minify berfungsi untuk Anda (beberapa plugin menghasilkan js/css yang tidak akan melakukan minify dengan baik, jadi pastikan untuk menguji situs Anda setelah mengaktifkan fitur minify).

Jika Anda memiliki kontrol penuh terhadap server MySQL Anda, pastikan Anda mengaktifkan query_cache. Gunakan skrip tuning MySQL untuk menemukan cara lain untuk mengoptimalkan konfigurasi basis data Anda.

Jika menggunakan CDN bermasalah karena beberapa alasan, konfigurasikan mod_expires di pengaturan Apache Anda. Atur waktu kedaluwarsa selama masuk akal untuk jenis statis seperti gambar, css, javascript, video, audio, dll.

21
Dougal Campbell

Jalankan memcached dan gunakan cache objek untuk mengurangi jumlah permintaan basis data. Ini cache data dari database, bukan halaman. Tidak yakin apakah w3-total-cache sudah melakukan ini.

Pastikan Anda menjalankan cache opcode seperti APC . (Ada beberapa lagi yang tersedia.)

14
Annika Backstrom

Selain menggunakan plugin caching disk seperti wp-cache, letakkan blog Anda di volume Host yang memiliki properti "noatime" di atasnya. Jika tidak, SSH ke Host Anda (jika hosting Anda menyediakannya) dan jalankan perintah ini secara rutin pada file Anda setiap beberapa hari:

chattr -R +A ~/*

~/* Berarti "file saya di bawah direktori home saya". Anda dapat mengubah jalur itu sesuai keinginan Anda. Anda juga dapat mengatur ini di pekerjaan cron di cpanel jika hosting Anda menyediakannya.

Untuk info lebih lanjut tentang properti atime, lihat ini . Ini mempercepat kinerja membaca disk Linux sangat.

Terkadang situs Anda dipalu oleh laba-laba. Anda dapat menggunakan alat seperti SpyderSpanker atau Chennai Central untuk memfilter laba-laba yang tidak membantu membawa peringkat halaman lebih banyak ke situs Anda dan hanya memperlambatnya, lalu mencekik laba-laba yang baik (seperti Google, Bing, dll.) Dengan mengirimkannya secara acak HTTP 304 Tidak Dimodifikasi pesan.

Hal lain yang saya lihat adalah plugin yang ditulis dengan buruk. Jika Anda belajar cara membuat plugin, Anda mulai melihat bagaimana beberapa plugin dikodekan dengan tidak efisien, atau bahkan menemukan bom waktu, seperti tabel database yang mengisi dan mengisi dan tidak pernah dibersihkan, menyimpan hal-hal seperti data koneksi yang masuk.

Di luar semua solusi lain di sini, Anda juga dapat membuat kebun web WordPress dari blog Anda dengan hosting di beberapa PC node web yang semuanya terhubung kembali ke satu database tunggal dan satu volume disk tunggal untuk file (seperti volume yang dipasang di atas NFS ). Lihat Ultra Monkey untuk mengetahui cara menjalankan semuanya.

8
Volomike

Beberapa jawaban dari atas kepala saya:

1) Minimalkan jumlah permintaan HTTP yang harus dilakukan browser ke Host Anda dengan menggabungkan JavaScript dan CSS jika memungkinkan/praktis.

2) Turunkan sebanyak mungkin gambar/media Anda ke CDN pihak ketiga, terutama jika Anda menggunakan hosting bersama.

3) Coba kurangi jumlah posting yang Anda tampilkan di halaman depan untuk mengurangi waktu render total.

3a) Coba gunakan tema yang menyajikan beberapa posting yang ditampilkan secara penuh di halaman depan dan semua posting lama lainnya sebagai kutipan.

7
ZaMoose

Caching Menu WordPress juga memberi Anda peningkatan kinerja. Terutama jika Anda memiliki banyak Halaman atau Struktur Menu raksasa, ini harus dipertimbangkan.

Lakukan dengan 2 langkah mudah. Pada awalnya, buat fungsi yang mendapat atau membuat menu, alih-alih memanggil wp_nav_menu secara langsung.

function get_cached_menu( $menuargs ) {

    if ( !isset( $menuargs['menu'] ) ) {

        $theme_locations = get_nav_menu_locations();
        $nav_menu_selected_id = $theme_locations[$menuargs['theme_location']];
        $termslug = get_term_by( 'id', $nav_menu_selected_id, 'nav_menu' );
        $transient = 'menu_' . $termslug->slug . '_transient';

    } else {

        $transient = 'menu_' . $menuargs['menu'] . '_transient';

    }


    if ( !get_transient( $transient ) ) { // check if the menu is already cached

        $menuargs['echo'] = '0'; // set the output to return
        $this_menu = wp_nav_menu( $menuargs ); // build the menu with the given $menuargs
        echo $this_menu; // output the menu for this run
        set_transient( $transient, $this_menu ); // set the transient, where the build HTML is saved

    } else {

        echo get_transient( $transient ); // just output the cached version

    }

}

Dalam tema Anda, ganti wp_nav_menus dengan get_cached_menus. Sekarang, setiap kali menu dipanggil, Anda memiliki satu Databasequery alih-alih seluruh Menubuilding.

Menu tidak sering berubah - tetapi Anda juga harus menghubungkan ke tindakan wp_update_nav_menu untuk menghapus transien lama.

Lakukan seperti ini:

add_action('wp_update_nav_menu', 'my_delete_menu_transients');

function my_delete_menu_transients($nav_menu_selected_id) {

    $termslug = get_term_by( 'id', $nav_menu_selected_id, 'nav_menu' );

    $transient = 'menu_' . $termslug->slug . '_transient';

    delete_transient( $transient ); 

}

Menu akan dibuat saat halaman berikutnya dipanggil - dan gunakan versi cache hingga seseorang memperbarui menu lagi.

Versi terbaru

Terima kasih @helgatheviking karena menunjukkan kesalahan antara siput dan ID. Saya memperbarui fungsi sehingga berfungsi baik dengan theme_position dan menu (untuk panggilan langsung menu).

Menu selalu disimpan dengan nama Menu, bukan posisi di Theme.

7
fischi

Gunakan kelas basis data yang dipangkas untuk optimasi. Kami membuat pengalaman yang baik dengan kode sendiri untuk mengurangi penggunaan memori dan kecepatan akses basis data. Di samping itu, Anda dapat mengoptimalkan struktur basis data itu sendiri dengan beberapa perubahan kecil yang juga banyak.

Bagian dari kode kelas database dapat ditemukan di wordpress trac, itu tidak membuatnya menjadi inti ( Tiket # 11799 dan terkait ).

5
hakre

Untuk situs yang sangat diperdagangkan, Anda harus menyetel semua buffer MySQL untuk konten yang ada sekarang. Terlepas dari versi WordPress, layer MySQL dapat dikonfigurasikan konfigurasinya .

Bahkan, jika Anda memiliki data InnoDB tanpa mengaktifkan innodb_file_per_table, Anda perlu membersihkan InnoDB dengan membagi setiap tabel ke dalam tablespace fisiknya sendiri . Dimungkinkan untuk melakukan penyetelan MySQL yang layak bahkan jika Anda memiliki perangkat keras yang terbatas . Ada banyak skenario untuk melakukan optimasi InnoDB seperti itu .

IMHO, Anda tidak dapat merencanakan pengaturan yang baik untuk my.cnf tanpa mengetahui jumlah data yang harus dikonfigurasi. Anda harus secara berkala memuat dataset saat ini dari produksi ke dalam lingkungan pementasan, melakukan optimisasi, dan mendapatkan angka-angka untuk dikonfigurasikan di my.cnf dari server produksi.

4
RolandoMySQLDBA

Saya baru-baru ini berbicara tentang hal ini di WordCamp Houston . Semua rekomendasi di atas bagus dan yang penting adalah untuk memastikan semua hal front-end sepenuhnya dioptimalkan maka Anda dapat mulai bekerja pada caching dan masalah kinerja server.

Render progresif akan membuat halaman Anda terasa lebih cepat karena pengguna akan melihat konten halaman sebelum dimuat penuh. Untuk melakukan ini, pastikan semua pemblokiran js ada di bagian paling bawah halaman dan css ada di bagian atas.

Juga jika Anda menggunakan banyak tombol media sosial, Anda dapat menyesuaikan skrip untuk membuatnya memuat dalam iframe setelah halaman dimuat penuh. Saya menulis tutorial tentang cara melakukannya dengan tombol TweetMeMe re Tweet (sekarang sudah usang karena Twitter merilis tombol retweet mereka sendiri) tetapi masih dapat diterapkan ke tombol share lainnya.

Untuk kinerja server, lihat Nginx sebagai proksi ujung depan untuk konten statis dengan Apache menangani PHP yang berat dan pengangkatan MySQL.

3
Chris_O

anda dapat mengaktifkan kompresi global output . ini akan membuat semuanya berjalan secara otomatis jika browser mendukungnya. Ini secara drastis mengurangi ukuran file yang ditransfer, tetapi meningkatkan beban CPU Anda.

3
Scott M.

Karena belum ada yang menyebutkannya, salah satu langkah paling penting untuk meningkatkan kinerja server bersama dengan pengaturan LAMP adalah beralih ke utas pekerja Apache dan mod_fcgid.

Ini membebaskan memori 500MB di server pribadi virtual saya.

2
nottinhill

Panduan untuk memeriksa plugin memperlambat

Ada plugin yang sangat sederhana bernama Page Load Time , yang menambahkan timer ke footer halaman Anda. Sebenarnya hanya empat baris kode:

<?php
function ur_pageload_footer() {
    printf(__('Page in %s seconds', 'pageload'), timer_stop());
}
add_action('wp_footer', 'ur_pageload_footer')

Kemudian:

  1. Buat spreadsheet
  2. Daftarkan semua plugin aktif Anda dan letakkan di sana
  3. Refresh halaman tiga kali dengan mencatat waktu pemuatan halaman setiap belokan
  4. Telusuri plugin Anda satu per satu untuk menonaktifkannya
  5. Ulangi langkah 3
  6. Perhatikan urutan bahwa Anda menonaktifkan plugin

Spreadsheet Anda akan terlihat seperti

+-------+-------+-------+-------+--------+
| Run 1 | Run 2 | Run 3 | Order | Plugin |

Jadi jika setelah menonaktifkan plugin waktu respons halaman meningkat secara signifikan maka Anda dapat melihat apakah Anda dapat menghindari plugin itu.

Saya menemukan dua plugin yang menyebabkan 'signifikan' memperlambat mqtranslate dan (yang agak lama tapi bagus) Plugin Navigasi Multi-level .

1
icc97