ขั้นตอนในการปรับ WordPress ให้เหมาะสมกับโหลดเซิร์ฟเวอร์?


81

นอกจากการติดตั้ง W3 Total Cache หรือปลั๊กอินการแคชอื่นฉันสามารถทำตามขั้นตอนใดบ้างเพื่อให้แน่ใจว่าชุดรูปแบบและไซต์ของฉันจะทำงานอย่างรวดเร็วที่สุด


หากคุณใช้งานเว็บไซต์ของคุณด้วย vps คุณควรลองแคชใหม่
ahmetlutfu

คำตอบ:


32

คุณสามารถติดตั้ง WordPress บน Nginx มีทรัพยากรจำนวนมากที่จะช่วย:

ข้อมูลประสิทธิภาพบางอย่างจากลิงค์สุดท้ายนั้น (ซึ่งดูเหมือนว่าจะแตกต่างจากการตั้งค่าเล็กน้อยอื่น ๆ )

ดังนั้นฉันจึงตัดสินใจวางพร็อกซีไว้หน้าเวิร์ดเพรสเพื่อแคชคงที่ให้มากที่สุด ทราฟฟิกที่ไม่ได้รับการรับรองความถูกต้องทั้งหมดจะได้รับบริการโดยตรงจากแคชไฟล์ nginx รับคำขอบางอย่าง (เช่นการสร้างฟีด RSS) จาก 6 หน้า / วินาทีถึง 7000+ หน้า / วินาที OOF Nginx จัดการจัดการการบันทึกและ gzipping โดยปล่อยให้อาปาเช่แบ็กเอนด์ที่หนักกว่าทำสิ่งที่ดีที่สุด: ให้บริการเพจเวิร์ดเพรสแบบไดนามิกเฉพาะเมื่อจำเป็น

...

ใน nginx - มันมีประสิทธิภาพมากมันน่ากลัว ฉันไม่เคยเห็นมาก่อนว่ามันใช้ RAM มากกว่า 10 ถึง 15 เมกะไบต์และมีซีพียูจำนวนหนึ่งแม้จะอยู่ภายใต้ภาระงานหนักที่สุดของเราก็ตาม กราฟ ganglia ของเราไม่ได้โกหก: เราลดความต้องการหน่วยความจำลงครึ่งหนึ่งทำให้ปริมาณงานผ่านเครือข่ายของเราเพิ่มขึ้นเป็นสองเท่าและลดภาระของเราโดยสิ้นเชิง เราไม่มีปัญหาโดยทั่วไปตั้งแต่เราตั้งค่านี้


ใครมีสถิติใด ๆ เกี่ยวกับการประหยัดความเร็วในการใช้ Nginx?
Mike Lee

ไมค์ฉันเพิ่มลิงค์อื่นและข้อมูลบางอย่างจากโพสต์นั้น
Travis Northcutt

ฉันย้ายบล็อกหลักของฉันจากเซิร์ฟเวอร์ 1G ที่ใช้ Apache ไปยังเซิร์ฟเวอร์ 512M ที่รัน Nginx ทำงานได้ราบรื่นขึ้นแม้จะมี RAM ลดลงก็ตาม เป็นที่ยอมรับว่าฉันมีบริการอื่น ๆ ที่ทำงานบนเซิร์ฟเวอร์ 1G (อีเมล, imap, mailman, เว็บไซต์อื่น ๆ ที่มีอัตราการเข้าชมต่ำ)
Dougal Campbell

NB ที่รัน WordPress บน nginx แตกต่างจากการใช้ nginx เป็นแคชพร็อกซีที่อยู่ด้านหน้า Wordpress
sam

26

ตั้งค่าการหมดอายุฝั่งไคลเอ็นต์สำหรับสิ่งต่าง ๆ เช่น css, รูปภาพ, JavaScript และอื่น ๆ ที่ไม่จำเป็นต้องดาวน์โหลดซ้ำสำหรับการดูหน้าเว็บแต่ละครั้ง นี่คือสิ่งที่สร้างความแตกต่างที่ใหญ่ที่สุดในการโหลดเว็บไซต์ของฉัน การดาวน์โหลดที่เร็วที่สุดคือการดาวน์โหลดที่ไม่เคยเกิดขึ้น ...

# 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

คุณอาจ pre-gzip ทุกอย่างที่คุณสามารถทำได้ (7-zip เป็นเครื่องมือที่ดีสำหรับเรื่องนี้) และอัปโหลดในที่เดียวกับไฟล์ที่คุณเพิ่ง gzipped เปลี่ยน. htaccess เพื่อให้บริการไฟล์ก่อน gzipped ดังนี้ คำเตือนที่นี่คือคุณจำเป็นต้องจำอีกครั้ง gzip พวกเขาหาก / เมื่อคุณอัปเดตสิ่ง สิ่งนี้จะตัดโอเวอร์เฮดของ CPU ออกจากการแยก. 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]

นี่เป็นเพียงคำตอบดิบ ธีมนี้มีหลากหลายรูปแบบ ฉัน blogged เกี่ยวกับเรื่องนี้และเพิ่มค่อนข้างไม่กี่อ้างอิงไปยังบทความอื่น ๆ ในเชิงลึกที่http://icanhazdot.net/2010/03/23/some-wordpress-stuff/ อ่านและที่สำคัญกว่านั้นการอ้างอิงที่ฉันชี้ไป - เป็นแหล่งข้อมูลที่ดี

โปรดระวังว่าหากคุณคนจรจัดบ่อยครั้งผู้ใช้จะต้องรีเฟรชแคช

ปลั๊กอินผมพบว่ามีประโยชน์มากเกินไปWP-ลดขนาด สิ่งที่ควรรับชมคือคุณควรยกเว้นไอเท็มเฉพาะหน้า (แบบฟอร์มผู้ติดต่อตัวเลื่อนหน้าแรก ฯลฯ ) ดังนั้นคุณจะไม่ได้ดาวน์โหลดทั้งชุดของ CSS, JS และอื่น ๆ สำหรับแต่ละหน้า มันเป็นวิธีที่ดีในการย่อรวมและบีบอัด CSS พื้นฐานของคุณ JS ฯลฯ มันลดคำขอ HTTP จำนวนมาก Wp-minify เล่นได้ดีกับ supercache และส่วนหัวที่หมดอายุซึ่งฉันได้รายละเอียดไว้ด้านบน

ใช้ Yslow ใน Firebug (Firefox) หรือคล้ายกันเพื่อตรวจสอบคำขอ HTTP ของคุณและอะไรคือและไม่ถูกบีบอัด ดูที่ส่วนหัวที่หมดอายุด้วย คุณจะเห็นสิ่งที่คุณสามารถปรับปรุงได้ในไม่ช้า


2
ในกรณีที่มีคนวางแผนที่จะคัดลอก / วางการเขียนซ้ำของคุณมี "ReWrite" ที่ควรได้รับการแก้ไข
Jeremy L

2
ตัวอย่างใด
เจ้าหมอ CAD

@Nerdling คุณช่วยชี้ให้เห็นว่าอินสแตนซ์ใดที่ต้องแก้ไข? ฉันต้องการใช้รหัสด้านบน
helgatheviking

อาจเกี่ยวข้องกับ mod gzip ที่เลิกใช้ใน Apache รุ่นที่ใหม่กว่า ฉันต้องเปลี่ยนของฉันเป็น mod deflate เมื่อเร็ว ๆ นี้
CAD bloke

2
สำหรับชุดค่าเริ่มต้นที่ดีสำหรับ. htaccess โครงการ HTML5 Boilerplate จะมีเทมเพลต github.com/h5bp/html5-boilerplate/blob/master/dist/.htaccess
Paul Sheldrake

21

ลดจำนวนปลั๊กอินที่คุณเรียกใช้ให้เหลือเฉพาะสิ่งที่คุณต้องการจริงๆ โดยเฉพาะอย่างยิ่งให้ระวังปลั๊กอินที่เพิ่มจาวาสคริปต์และโค้ด CSS ในการโหลดหน้าเว็บทุกครั้งแม้ว่าจะไม่ได้ใช้รหัสนั้นในหน้าเว็บ

หากคุณกำลังสร้างธีมของคุณเองตั้งแต่เริ่มต้นให้แยก CSS ลงเพื่อให้คุณลักษณะที่จำเป็นเฉพาะสำหรับเทมเพลตหน้าหรือประเภทมุมมอง (โพสต์เดียวคลังเก็บหมวดหมู่และอื่น ๆ ) จะถูกโหลดเมื่อจำเป็นเท่านั้น

กำหนดค่า W3TC เพื่อใช้ CDN (เช่น Amazon CloudFront หรืออื่น ๆ ที่รองรับโดย W3TC)

ดูว่าตัวเลือก Minify นั้นเหมาะกับคุณหรือไม่ (ปลั๊กอินบางตัวสร้าง js / css ที่ไม่ลดขนาดลงอย่างแน่นอนดังนั้นให้ทดสอบเว็บไซต์ของคุณหลังจากเปิดใช้งานคุณสมบัติลดขนาด)

หากคุณมีการควบคุมเซิร์ฟเวอร์ MySQL ของคุณอย่างเต็มที่ตรวจสอบให้แน่ใจว่าคุณเปิดใช้งาน query_cache ใช้สคริปต์ปรับแต่ง MySQLเพื่อค้นหาวิธีอื่น ๆ เพื่อปรับการตั้งค่าฐานข้อมูลของคุณให้เหมาะสม

หากใช้ CDN เป็นปัญหาด้วยเหตุผลบางอย่างให้กำหนดค่า mod_expires ในการตั้งค่า apache ของคุณ ตั้งเวลาหมดอายุตราบเท่าที่เหมาะสมสำหรับประเภทคงที่เช่นรูปภาพ, css, javascript, วิดีโอ, เสียง ฯลฯ


14

เรียกใช้memcachedและใช้แคชวัตถุเพื่อลดจำนวนการสืบค้นฐานข้อมูล สิ่งนี้แคชข้อมูลจากฐานข้อมูลไม่ใช่เพจ ไม่แน่ใจว่า w3-total-cache ทำเช่นนี้แล้วหรือไม่

ให้แน่ใจว่าคุณกำลังใช้แคช opcode เช่นAPC (มีอีกหลายอย่างที่ใช้ได้)


2
APC ทำให้เวิร์ดเพรสตอบสนองได้ดีขึ้นมากโดยเฉพาะหน้าผู้ดูแลระบบ แต่มีข้อขัดแย้งที่อาจเกิดขึ้นระหว่าง WP-SuperCache และ APC ดูเหมือนจะไม่มีผลกับแคช W3
WhIteSidE

มีการโพสต์ที่ดีเยี่ยมจากมาร์กจาควิ ธ เกี่ยวกับเรื่องนี้คือ: APC วัตถุแคชแบ็กเอนด์สำหรับ WordPress คุณสามารถใช้batcacheอย่างมีความสุขกับ APC
icc97

8

นอกเหนือจากการใช้ปลั๊กอินแคชดิสก์เช่น wp-cache ให้วางบล็อกของคุณบนไดรฟ์ข้อมูลโฮสต์ที่มีคุณสมบัติ "noatime" ตั้งอยู่ มิฉะนั้น SSH จะเข้าสู่โฮสต์ของคุณ (หากเว็บโฮสต์ของคุณระบุไว้) และเรียกใช้คำสั่งนี้เป็นประจำในไฟล์ของคุณทุกสองสามวัน:

chattr -R +A ~/*

เครื่องหมาย ~ / * หมายถึง "ไฟล์ของฉันภายใต้ไดเรกทอรีบ้านของฉัน" คุณสามารถเปลี่ยนเส้นทางนั้นตามที่เห็นสมควร นอกจากนี้คุณยังสามารถตั้งค่านี้ในงาน cron ใน cpanel หากเว็บโฮสต์ของคุณมี

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับอสังหาริมทรัพย์ atime ดูนี้ มันเพิ่มความเร็วในการอ่านดิสก์ Linux อย่างมาก

บางครั้งไซต์ของคุณกำลังถูกแมงมุมโจมตี คุณสามารถใช้เครื่องมือเช่น SpyderSpanker หรือ Chennai Central เพื่อกรองแมงมุมที่ไม่ช่วยเพิ่มอันดับหน้าของเว็บไซต์ของคุณและชะลอความเร็วลงจากนั้นจึงใช้สไปเดอร์ที่ดี (เช่น Google, Bing ฯลฯ ) HTTP 304 ไม่แก้ไขข้อความ

สิ่งที่ฉันเห็นก็คือปลั๊กอินที่เขียนไม่ดีเท่านั้น หากคุณเรียนรู้วิธีสร้างปลั๊กอินคุณจะเริ่มเห็นว่าปลั๊กอินบางตัวมีการเข้ารหัสอย่างไม่มีประสิทธิภาพหรือแม้แต่ค้นหาไทม์บอมเช่นตารางฐานข้อมูลที่เติมและเติมและไม่เคยถูกกำจัดออกเก็บสิ่งต่าง ๆ เช่นข้อมูลการเชื่อมต่อขาเข้า

นอกเหนือจากโซลูชันอื่น ๆ ทั้งหมดที่นี่คุณยังสามารถสร้าง WordPress เว็บฟาร์มของบล็อกของคุณโดยโฮสติ้งมันบนพีซีหลายเว็บโหนดที่เชื่อมต่อกลับไปยังฐานข้อมูลเดียวเดียวและดิสก์ไดรฟ์เดียวสำหรับไฟล์ (เช่นไดรฟ์ที่ติดตั้งผ่าน NFS ) ลองดูUltra Monkeyว่าจะทำอย่างไรให้ทุกอย่างดำเนินไปได้


7

คำตอบเล็กน้อยจากส่วนหัวของฉัน:

1) ลดจำนวนคำขอ HTTP ที่เบราว์เซอร์จะต้องทำกับโฮสต์ของคุณโดยเชื่อมต่อ JavaScript และ CSS เมื่อเป็นไปได้ / ใช้งานได้จริง

2) ลดการให้บริการภาพ / สื่อของคุณไปยัง CDN ของบุคคลที่สามให้มากที่สุดโดยเฉพาะอย่างยิ่งถ้าคุณใช้โฮสติ้งที่ใช้ร่วมกัน

3) ลองลดจำนวนโพสต์ที่คุณแสดงในหน้าแรกเพื่อลดเวลาในการเรนเดอร์ทั้งหมด

3a) ลองใช้ชุดรูปแบบที่นำเสนอโพสต์ที่โดดเด่นไม่กี่โพสต์ในหน้าแรกและโพสต์อื่น ๆ ทั้งหมดที่เก่ากว่าเป็นข้อความที่ตัดตอนมา


2
+1 สำหรับการลดจำนวนโพสต์สิ่งนี้ให้การสนับสนุนอย่างมากโดยไม่มีค่าใช้จ่าย ผู้คนไม่จำเป็นต้องเห็นโพสต์เก่า ๆ สิบอันฉันแค่ตั้งความมั่นใจไว้ที่แปด
ripper234

7

การแคชเมนู WordPress ยังช่วยเพิ่มประสิทธิภาพให้กับคุณ โดยเฉพาะอย่างยิ่งถ้าคุณมีหน้าหรือโครงสร้างเมนูขนาดใหญ่จำนวนมากสิ่งนี้ควรได้รับการพิจารณา

ทำได้ง่ายๆใน 2 ขั้นตอน ตอนแรกสร้างฟังก์ชั่นที่ได้รับหรือสร้างเมนูแทนการโทรwp_nav_menuโดยตรง

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

    }

}

ในรูปแบบของคุณแทนที่wp_nav_menuS get_cached_menuกับ ตอนนี้ทุกครั้งที่มีการเรียกเมนูคุณมีหนึ่งแบบสอบถามฐานข้อมูลแทนที่จะเป็นเมนูทั้งหมด

เมนูไม่เปลี่ยนแปลงบ่อยนัก - แต่คุณต้องขอให้wp_update_nav_menuดำเนินการเพื่อลบทรานแซคชันเก่า

ทำเช่นนี้:

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 ); 

}

เมนูจะถูกสร้างขึ้นในครั้งต่อไปที่มีการเรียกเพจ - และใช้เวอร์ชันแคชจนกว่าจะมีคนอัพเดตเมนูอีกครั้ง

อัปเดตเวอร์ชันแล้ว

ขอบคุณ @helgatheviking ที่ชี้ให้เห็นข้อผิดพลาดระหว่างตัวบุ้งและรหัส ฉันอัปเดตฟังก์ชั่นเพื่อให้ทำงานได้ทั้งกับtheme_positionและmenu(สำหรับการโทรโดยตรงของเมนู)

เมนูจะถูกบันทึกด้วยชื่อของเมนูไม่ใช่ตำแหน่งในธีม


ดูเหมือนว่าเป็นความคิดที่เจ๋งจริงๆ ฉันมีปัญหากับรหัสอย่างไรก็ตาม เมื่อเราลบล้างทรานแซกชัน$nav_menu_selected_idนั่นคือตัวเลขขณะที่เรียกget_cached_menu()the menu_idis เป็นตัวแปรสตริงเนื่องจากพารามิเตอร์นั้นกลายเป็น CSS ID สำหรับ<ul>องค์ประกอบ
helgatheviking

5

ใช้คลาสฐานข้อมูลที่ถูกตัดแต่งเพื่อปรับให้เหมาะสม เราสร้างประสบการณ์ที่ดีด้วยรหัสของตัวเองเพื่อลดการใช้หน่วยความจำและความเร็วในการเข้าถึงฐานข้อมูล ถัดจากนั้นคุณสามารถปรับโครงสร้างของฐานข้อมูลได้เองโดยการเปลี่ยนแปลงเล็ก ๆ น้อย ๆ ที่ทำได้ดีเช่นกัน

ส่วนของรหัสคลาสฐานข้อมูลสามารถพบได้ใน wordpress trac มันไม่ได้ทำให้มันกลายเป็นแกนหลัก ( # 11799 ตั๋วและที่เกี่ยวข้อง )


ทางออกที่น่าสนใจ นี่คือ URL ของตั๋ว Trac ในกรณีที่ใคร ๆ ก็สนใจเช่นกัน: core.trac.wordpress.org/ticket/11799
Mike Lee

4

สำหรับเว็บไซต์ที่มีการค้ามนุษย์สูงคุณควรปรับบัฟเฟอร์ MySQL ทั้งหมดสำหรับเนื้อหาที่มีอยู่ในตอนนี้ โดยไม่คำนึงถึงรุ่นของเวิร์ดเพรส, ชั้น MySQL สามารถมีการกำหนดค่าของการคำนวณ

ในความเป็นจริงถ้าคุณมีข้อมูล InnoDB โดยไม่เปิดใช้งาน innodb_file_per_table คุณจะต้องล้างข้อมูล InnoDB โดยแบ่งส่วนตารางแต่ละตารางให้เป็นตารางทางกายภาพจริง มันเป็นไปได้ที่จะทำการปรับแต่ง MySQL ดีแม้ว่าคุณจะมีฮาร์ดแวร์ จำกัด มีหลายสถานการณ์สำหรับการทำเพิ่มประสิทธิภาพ InnoDB ดังกล่าว

IMHO คุณไม่สามารถวางแผนการตั้งค่าที่ดีสำหรับ my.cnf โดยไม่ทราบจำนวนข้อมูลที่จะกำหนดค่า คุณจะต้องโหลดชุดข้อมูลปัจจุบันเป็นระยะ ๆ จากการผลิตลงในสภาพแวดล้อมการจัดเตรียมทำการปรับให้เหมาะสมและออกมาพร้อมกับตัวเลขเพื่อกำหนดค่าใน my.cnf ของเซิร์ฟเวอร์การผลิต


3

คุณสามารถเปิดใช้งานทั่วโลกบีบอัดเอาท์พุท สิ่งนี้จะ gzip ทุกอย่างออกไปโดยอัตโนมัติหากเบราว์เซอร์รองรับ สิ่งนี้จะลดขนาดไฟล์ที่ถ่ายโอนลงอย่างมาก แต่เพิ่มภาระซีพียูของคุณ


สิ่งนี้จะทำให้ไซต์ของคุณ "รู้สึก" ช้าลงมาก Yahoo! เอกสารทางเทคนิคแนะนำให้คุณล้างรหัสหลังจากสิ้นสุดส่วนหัวและก่อนส่วนต้นของเนื้อหาเพื่อให้สคริปต์และลักษณะสามารถเริ่มโหลดได้ โดยการบัฟเฟอร์หน้าทั้งหมดคุณจะป้องกันไม่ให้เกิดเหตุการณ์เช่นนี้และหน้า "รู้สึก" ช้าเพราะผู้ใช้ต้องรอให้ WordPress แสดงผลทั้งหน้าก่อนที่ผู้ใช้จะเห็นอะไร
WhIteSidE

Scott ไม่ได้พูดถึงการบัฟเฟอร์หน้าทั้งหมด แต่ใช้การบีบอัดเอาต์พุต apache นั่นเป็นสิ่งที่แตกต่างกันเฉพาะในกรณีที่คุณใช้การบีบอัดเอาต์พุต PHP ผ่านบัฟเฟอร์เอาต์พุตซึ่งจะมีข้อบกพร่องที่คุณอธิบายอย่างคลุมเครือ แต่ไม่ใช่ต่อกันเพราะในท้ายที่สุดเอาต์พุตบัฟเฟอร์จะทำให้สิ่งต่าง ๆ เร็วขึ้น สิ่งนี้เกี่ยวข้องกับ I / O บนเซิร์ฟเวอร์ของคุณ
hakre

3

ฉันเพิ่งได้พูดคุยเกี่ยวกับเรื่องนี้ได้ที่งาน Wordcamp ฮูสตัน คำแนะนำทั้งหมดข้างต้นนั้นยอดเยี่ยมและสิ่งสำคัญคือต้องแน่ใจว่าส่วนหน้าทั้งหมดนั้นได้รับการปรับให้เหมาะสมที่สุดจากนั้นคุณสามารถเริ่มทำงานกับปัญหาแคชและประสิทธิภาพของเซิร์ฟเวอร์

การแสดงผลแบบก้าวหน้าจะทำให้หน้าเว็บของคุณรู้สึกเร็วขึ้นเนื่องจากผู้ใช้จะเห็นเนื้อหาของหน้าเว็บก่อนที่จะโหลดแบบเต็ม ในการทำเช่นนี้ตรวจสอบให้แน่ใจว่ามีการปิดกั้น js ที่ด้านล่างสุดของหน้าและ css อยู่ที่ด้านบนสุด

นอกจากนี้หากคุณใช้ปุ่มโซเชียลมีเดียมากมายคุณสามารถปรับแต่งสคริปต์เพื่อให้โหลดใน iframe หลังจากโหลดเพจเสร็จแล้ว ฉันเขียนบทช่วยสอนเกี่ยวกับวิธีการใช้ปุ่มทวีตซ้ำทวีต (ตอนนี้ล้าสมัยตั้งแต่ Twitter ปล่อยปุ่มรีทวีตของตัวเอง) แต่ยังสามารถใช้กับปุ่มแชร์อื่น ๆ ได้

สำหรับประสิทธิภาพของเซิร์ฟเวอร์ให้ดูที่ Nginx เป็นพร็อกซีส่วนหน้าสำหรับเนื้อหาแบบคงที่ด้วย Apache ที่จัดการยก PHP และ MySQL อย่างหนัก


2

หนึ่งในขั้นตอนที่สำคัญที่สุดในการปรับปรุงประสิทธิภาพของเซิร์ฟเวอร์ร่วมกับการตั้งค่า LAMP คือการเปลี่ยนไปใช้เธรดของ apache และ mod_fcgid

ทำให้หน่วยความจำเพิ่มขึ้น 500MB บนเซิร์ฟเวอร์ส่วนตัวเสมือนของฉัน


ฉันเคยลองมาแล้ว แต่ฉันไม่เคยได้คนทำงาน apache ที่มีเสถียรภาพ + สภาพแวดล้อม fcgi ทำงาน หากใครรู้วิธีการตั้งค่าที่ดีสำหรับเรื่องนี้ภายใต้ Ubuntu โปรดโพสต์ไว้ ฉันจะขอบคุณเป็นพิเศษสำหรับคำแนะนำที่ให้รายละเอียดบางส่วนของคำสั่งการกำหนดค่า Apache ที่มีผลต่อพฤติกรรม FCGI และอธิบายว่า tweaking พวกเขาอาจส่งผลกระทบต่อการใช้หน่วยความจำประสิทธิภาพ ฯลฯ ตอนนี้ฉันกำลังใช้ apache แยกกับด้านหน้า nginx ในเซิร์ฟเวอร์แคชพร็อกซี
Dougal Campbell

กำหนดเสถียรภาพ การติดตั้งของฉันทำงานเสถียรมาก แต่คุณต้องใช้ RAM 2GB ในการกำหนดค่าของฉัน คุณเพียงแค่ต้องอ่านและปรับแต่ง เอกสารของ apache ใน fcgi นั้นค่อนข้างกว้างขวาง
meshfields

3
พยายามที่จะตรวจสอบvirtualmin.comมันมีเสถียรภาพมากและฟรี
Unsal Korkmaz

1

คำแนะนำสำหรับการตรวจสอบปลั๊กอินช้าลง

มีปลั๊กอินที่เรียบง่ายสวยงามเรียกว่าเวลาในการโหลดหน้าเว็บซึ่งเพิ่มตัวจับเวลาลงในส่วนท้ายของหน้าของคุณ จริง ๆ แล้วมันมีเพียงสี่บรรทัดของรหัส:

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

แล้ว:

  1. สร้างสเปรดชีต
  2. รายการปลั๊กอินที่ใช้งานอยู่ทั้งหมดของคุณและวางไว้ในนั้น
  3. รีเฟรชหน้าสามครั้งเพื่อสังเกตเวลาโหลดหน้าในแต่ละตา
  4. ผ่านปลั๊กอินของคุณทีละคนปิดการใช้งานพวกเขา
  5. ทำซ้ำขั้นตอนที่ 3
  6. สังเกตคำสั่งที่คุณปิดการใช้งานปลั๊กอิน

สเปรดชีตของคุณควรมีลักษณะเช่นนี้

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

ดังนั้นหากหลังจากปิดใช้งานปลั๊กอินเวลาตอบสนองของหน้าจะเพิ่มขึ้นอย่างมากจากนั้นคุณสามารถดูว่าคุณสามารถหลีกเลี่ยงปลั๊กอินนั้นได้หรือไม่

ผมพบว่าสองปลั๊กอินที่ทำให้เกิด 'สำคัญ' ชะลอตัวลงmqtranslateและ (ค่อนข้างเก่า แต่ดี) หลายระดับปลั๊กอินนำร่อง


มันจะเจ๋งจริงๆที่จะทำให้กระบวนการนี้เป็นแบบอัตโนมัติคือ phantomjs และ selenium (หรือบางอย่างที่คล้ายกัน) ดังนั้นมันจึงทำงานโดยอัตโนมัติและแยกรายงานออกเล็กน้อยในตอนท้าย
Paul Sheldrake

-1

ติดกับ ปลั๊กอินW3 Total Cacheสำหรับฟังก์ชั่นแคชใน WordPress เปิดใช้งานการแคชหน้าและการแคชฐานข้อมูลจากหน้าการตั้งค่าของปลั๊กอิน ตรวจสอบให้แน่ใจว่าคุณเลือก 'แคช PHP สำรอง (APC / APCu)' เป็นกลไกการแคช อย่าเปิดใช้งานการลดขนาดใด ๆ ใน W3 Total Cache เนื่องจากมีโอกาสมากมายที่คุณจะแยกลักษณะและ / หรือการทำงานของไซต์ออก เราจะทิ้งไว้ที่ Cloudflare

เมื่อเสร็จสิ้นการกำหนดค่าส่วนที่เหลือของฟังก์ชันปลั๊กอินให้ตั้งค่า Cloudflare สำหรับเว็บไซต์ของคุณ ตรวจสอบให้แน่ใจว่าคุณเปิดใช้งาน Cloudflare ในการตั้งค่าแคชรวมของ W3 ภายใต้ 'ส่วนขยาย'

Cloudflare เป็นเครือข่ายการจัดส่งเนื้อหาที่แคชเนื้อหาคงที่ทั้งหมด (ไฟล์รูปภาพ, CSS, JS, เอกสาร, ฯลฯ ) จากเว็บไซต์ของคุณและให้บริการแก่ผู้เข้าชมของคุณจากเซิร์ฟเวอร์ทั่วโลก วิธีนี้จะช่วยเร่งความเร็วในการโหลดหน้าเว็บและลดการโหลดบนเซิร์ฟเวอร์ของคุณ สำหรับรายการประเภทไฟล์ที่แคชไว้โดย Cloudlfare ชำระเงินรายชื่อนี้นี้ นอกจากนี้ Cloudflare มีแผนฟรี

ใน Cloudflare ให้ตั้งค่าระดับการแคชเป็นมาตรฐานและตั้งค่าการหมดอายุแคชของเบราว์เซอร์เป็นอย่างน้อยมากกว่า 20 ชั่วโมง เปิดใช้งาน Always Online ™เพื่อให้เซิร์ฟเวอร์ของคุณหยุดทำงาน Cloudflare จะให้บริการหน้าคงที่ของเว็บไซต์ของคุณจากแคช นอกจากนี้ยังเปิดใช้งานคุณสมบัติลดขนาดอัตโนมัติของพวกเขา (จำไว้ว่าทำไมฉันขอให้คุณไม่เปิดใช้งานการลดขนาดเป็น W3 Total Cache เพราะ Cloudflare ทำได้ดีกว่า!) จากนั้นตั้งค่า Rocket Loader ™เป็นอัตโนมัติ

นี่คือข้อความที่ตัดตอนมาจากสิ่งที่ Rocket Loader ทำ:

  • ลดจำนวนการร้องขอเครือข่ายด้วยการรวมไฟล์ JavaScript รวมถึงทรัพยากรบุคคลที่สามเพื่อหลีกเลี่ยงการชะลอการแสดงผลหน้าเว็บ

  • การโหลดสคริปต์แบบอะซิงโครนัสรวมถึงสคริปต์บุคคลที่สามเพื่อ
    ไม่ให้บล็อกเนื้อหาของหน้าเว็บของคุณโหลด
    ทันที

  • การแคชสคริปต์ในเครื่อง (ใช้ LocalStorage ซึ่งมีอยู่ใน
    เบราว์เซอร์และสมาร์ทโฟนส่วนใหญ่) ดังนั้นจึงไม่สามารถดึงข้อมูลออกมาได้อีกเว้นแต่
    จำเป็น

ข้อมูลเพิ่มเติมสามารถดูได้ที่นี่ที่นี่

ถ้าเป็นไปได้ให้สลับไปยังเฟรมเวิร์ก Genesis สำหรับ WordPress เพราะสะอาดโดยไม่มีอะไรเลยขยายGenesis ถูกสร้างขึ้นด้วยความเร็วและ SEO ในใจ ฉันทดสอบตัวเองแล้วและคะแนน PageSpeed ​​ของฉันก็ดี นอกจากนี้หากคุณใช้ Genesis อย่าลืมเปิดใช้งานแคชแฟรกเมนต์ในการตั้งค่าแคชรวม W3

ตั้งแต่ตอนนี้คุณกำลังใช้ Cloudlfare เป็น CDN คุณสามารถใช้ประโยชน์จากปลั๊กอินเช่น ' Imagify ' หรือ ' บีบอัดภาพ JPEG และ PNG ' โดย TingPNG เพื่อบีบอัดรูปภาพของคุณ ทั้งสองเป็นปลั๊กอินฟรีที่มีอยู่ในที่เก็บปลั๊กอิน WordPress.org นอกจากนี้ Imagify ยังสนับสนุนอัลกอริทึมการบีบอัดแบบ lossy

สุดท้ายให้ติดตั้งปลั๊กอิน' ลบ Query Strings จาก Static Resource ' จากที่เก็บ WordPress เพื่อที่จะลบสตริงการสืบค้นจากแหล่งข้อมูลคงที่เช่นไฟล์ CSS & JS นี่เป็นเพราะทรัพยากรที่มี“?” หรือ“ &” ใน URL ไม่ได้ถูกแคชโดยเซิร์ฟเวอร์แคชพร็อกซีบางตัว (จำไว้ว่า Cloudflare เป็นเซิร์ฟเวอร์แคชพร็อกซีด้วย)

จากนั้นติดตั้งปลั๊กอิน' ใช้ Google Libraries ' ปลั๊กอินนี้ช่วยให้ไซต์ WordPress ของคุณใช้ AJAX Library API CDN ของ Google แทนที่จะให้บริการไฟล์เหล่านี้จากการติดตั้ง WordPress ของคุณโดยตรง

ประโยชน์บางประการคือ:

  • เพิ่มโอกาสที่ผู้ใช้มีไฟล์เหล่านี้อยู่แล้วแคช
  • รับภาระพิเศษจากเซิร์ฟเวอร์ของคุณ
  • ใช้ไลบรารีเวอร์ชันที่บีบอัด (ถ้ามี)
  • เซิร์ฟเวอร์ของ Google ได้รับการตั้งค่าให้เจรจาต่อรองการบีบอัด HTTP กับเบราว์เซอร์ที่ร้องขอ

สุดท้าย แต่ไม่ท้ายสุดให้ใช้ปลั๊กอิน' WP-Optimize ' โดย Ruhani Rabin เพื่อทำความสะอาดและปรับฐานข้อมูลของคุณให้เหมาะสม

หวังว่านี่จะตอบคำถามของคุณเกี่ยวกับการปรับแต่ง WordPress เพื่อลดภาระของเซิร์ฟเวอร์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.