Ajax ใช้เวลา 10 เท่าตราบเท่าที่ควร / สามารถทำได้


50

ฉันเพิ่งจะตีปัญหาร้ายแรงครั้งแรกของฉันกับ WordPress และสำหรับคนที่ชอบ Ajax นี่เป็นเรื่องใหญ่

ฉันมีคำขอ Ajax ที่ใช้เวลา 1.5 วินาทีจึงจะเสร็จสมบูรณ์ในขณะที่ใช้ Ajax API

ถ้าฉันใช้รหัสที่แน่นอนเหมือนกันและเรียกใช้ด้วยสคริปต์ที่กำหนดเอง (ไม่มี WordPress) คำขอ Ajax ใช้เวลาเพียง 150 มิลลิวินาที นี่ไม่ใช่การพูดเกินจริง

หากคุณดูความคิดเห็นแรกของhttp://wp.smashingmagazine.com/2011/10/18/how-to-use-ajax-in-wordpress/และการสนทนาที่ตามมาคุณจะเห็นว่าความช้านี้เกิดขึ้น จากข้อเท็จจริงที่ว่าตามคำขอของคุณโหลด WP ทั้งหมด ...

ฉันหวังว่าจะมีวิธีแก้ไขปัญหาที่จะทำให้สามารถทำการร้องขอ Ajax ได้ในขณะที่ไม่โหลด WordPress ทั้งหมด

ประสบการณ์ของคุณในการเร่งการร้องขอ Ajax กับ WordPress คืออะไร?


3
ฉันสงสัยว่าปลั๊กอินแคชที่นิยมไม่ครอบคลุมสถานการณ์นี้
Raphael

@ ราฟาเอลฉันก็คิดเช่นกัน แต่ก็ไม่เห็นมีการพูดถึง นั่นจะเป็นสิ่งที่ดีหากพวกเขาทำ
Mike

คำตอบ:


57

ใช่นี่เป็นปัญหาที่น่ารังเกียจที่จะต้องมีสภาพแวดล้อม WordPress แบบเต็มคุณต้องใช้เวลาในการโหลดมากพอสมควร

ฉันต้องการประสิทธิภาพที่ดีขึ้นมาก (สำหรับคุณลักษณะการค้นหาที่เพิ่มขึ้นแบบไดนามิกมาก) สำหรับการทำงานและสิ่งที่ฉันไปด้วยคือ:

  1. ไฟล์ที่กำหนดเองเป็นตัวจัดการ Ajax
  2. ค่าคงที่ SHORTINITสำหรับการโหลดแกน WP ที่ จำกัด
  3. ส่วนที่เลือกสรรมาอย่างมากมายของคอร์เท่านั้นที่จำเป็นสำหรับงาน

สิ่งนี้มีสภาพแวดล้อมที่ จำกัด มาก แต่ประสิทธิภาพ$wpdbยังคงรักษาระดับความเข้ากันได้กับ WP (เริ่มต้น) ได้ดีกว่าและสมเหตุสมผล

นี่คือการเริ่มต้นไฟล์โหลดของฉันไม่สวย แต่ทำงานได้กับความต้องการเฉพาะ:

<?php

ini_set('html_errors', 0);
define('SHORTINIT', true);

require '../../../../wp-load.php';
require( ABSPATH . WPINC . '/formatting.php' );
require( ABSPATH . WPINC . '/meta.php' );
require( ABSPATH . WPINC . '/post.php' );
wp_plugin_directory_constants();

// stuff goes here

1
SHORTINIT หมายถึงอะไร คุณสามารถให้ตัวอย่างได้หรือไม่ ฉันจินตนาการว่าฉันจะต้องตั้งค่าตัวจัดการของตัวเองด้วยโหลด WP ที่แตกต่างกันไปขึ้นอยู่กับความต้องการของคำขอ แต่ฉันต้องการเห็นตัวอย่างที่คุณสร้างขึ้น
Mike

6
@ ไมค์ไม่เป็นที่รู้จักอย่างกว้างขวาง แต่มีแนวคิดเรียบง่ายจริงๆ - ถ้าSHORTINITค่าคงที่ตั้งไว้ WP จะไม่โหลดคอร์ส่วนใหญ่ (ไม่มี APIs / ฟังก์ชั่นส่วนใหญ่ไม่มีปลั๊กอินไม่มีธีม) ฉันจะเพิ่มรหัสเพื่อตอบ
Rarst

1
นั่นดูโอเค ฉันไม่ชอบความจริงที่ว่าเราจำเป็นต้องใช้ '../../../../wp-load.php'; ที่ทำให้เรื่องนี้ค่อนข้างกำหนดเอง ฉันยังกังวลว่ามันง่ายเพียงใดในการดึงแหล่งข้อมูลที่คุณ "ต้องการ" จริง ๆ b / c จากประสบการณ์ของฉัน WordPress ไม่ได้เป็นแบบแยกส่วน
Mike

@ ไมค์ถูกต้อง แต่ถึงแม้จะมีปัญหาก็ดีกว่าจุดปลายที่ไม่มีเงื่อนงำเกี่ยวกับ WP เลย สิ่งนี้สามารถ (และควร) ได้รับการปรับปรุงให้ดีขึ้นอีกบ้าง แต่มันก็ไม่ใช่งานเร่งด่วนสำหรับฉันในขณะนี้
Rarst

มีวิธีการตรวจสอบตำแหน่งของ wp-load.php จากภายใน WordPress หรือไม่? ตัวอย่างเช่นฉันสามารถเขียนไฟล์สแตติกที่มีพา ธ ที่ตั้งเป็นตัวแปรภายในโหลดปลั๊กอินแล้วรวมไฟล์นั้นในไฟล์ตอบกลับ Ajax แบบสแตนด์อะโลนได้หรือไม่
hereswhatidid

0

ฉันพบสิ่งนี้และมันเร่งความเร็วอาแจ็กซ์ของฉัน

function my_deregister_heartbeat() {
    global $pagenow;

    if ( 'post.php' != $pagenow && 'post-new.php' != $pagenow ) {
         wp_deregister_script('heartbeat');
         wp_register_script('heartbeat', false);
     }
}
add_action( 'admin_enqueue_scripts', 'my_deregister_heartbeat' );
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.