"Аякс" займає 10 разів стільки, скільки повинен / міг


50

Я щойно потрапив у свою першу серйозну проблему з WordPress, і для когось, хто любить Ajax, це велика проблема.

У мене є запит Ajax, який займає 1,5 секунди для завершення використання API Ajax.

Якщо я беру такий самий точний код і запускаю його за допомогою спеціального сценарію (без WordPress), запит Ajax займає всього 150 мілісекунд. Це не перебільшення

Якщо ви подивитесь на перший коментар http://wp.smashingmagazine.com/2011/10/18/how-to-use-ajax-in-wordpress/ та наступну розмову, ви побачите, що ця повільність викликана тим, що за вашим запитом завантажується весь WP ...

Я сподіваюся, що існує рішення, яке дасть можливість робити запити Ajax, не завантажуючи всіх WordPress.

Який ваш досвід щодо прискорення запитів Ajax за допомогою WordPress?


3
Мені здається, що більш популярні плагіни кешування висвітлюють цю ситуацію.
Рафаель

@Raphael, я теж про це думав, але не бачив жодної згадки про це. Це було б ВЕЛИКО, якщо вони
Майк

Відповіді:


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 залежно від потреби запиту, але я хотів би побачити кілька створених вами прикладів.
Майк

6
@Mike це не широко відома, але в концепції дуже проста - якщо SHORTINITвстановити константу, WP не завантажує більшу частину ядра (немає більшості API / функцій, немає плагінів, немає теми). Я додам трохи коду для відповіді.
Рарст

1
Це виглядає нормально. Мені просто не подобається те, що нам доводиться використовувати вимагати '../../../../wp-load.php'; що робить це досить звичайним. Я також хвилююся, як легко реально задіяти потрібні вам ресурси, а з мого досвіду WordPress не дуже модульний.
Майк

@Mkeke правильно, але навіть з питаннями це набагато краще, ніж кінцева точка, яка взагалі не має поняття про WP. Це можна (і повинно) ще вдосконалити, але наразі це не актуальне завдання для мене.
Рарст

Чи є якісь методи визначення місця розташування 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' );
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.