將WordPress REST API性能與admin-ajax.php進(jìn)行比較

    研究典型的REST請(qǐng)求以及提出的類似請(qǐng)求admin-ajax.php以了解它們之間的比較情況

    自引入WordPress REST API以來,許多插件開發(fā)人員已開始將其插件轉(zhuǎn)換為使用REST API而不是較舊的AJAX API(admin-ajax.php)。除了REST API只是一種較新的技術(shù)外,有傳言說REST API也比舊的端點(diǎn)更快,更可靠,原因是在典型的REST請(qǐng)求期間沒有加載太多的WordPress。

    在本文中,我們將研究典型的REST請(qǐng)求以及提出的類似請(qǐng)求admin-ajax.php以了解它們之間的比較情況。

    將WordPress REST API性能與admin-ajax.php進(jìn)行比較
    將WordPress REST API性能與admin-ajax.php進(jìn)行比較

    admin-ajax.php請(qǐng)求的壽命

    讓我們首先分解一下當(dāng)我們向發(fā)出典型的AJAX請(qǐng)求時(shí)會(huì)發(fā)生什么admin-ajax.php。當(dāng)您的瀏覽器對(duì)該文件發(fā)出請(qǐng)求時(shí),它會(huì)加載其他一些核心WordPress文件,以便能夠在加載了核心功能的情況下滿足請(qǐng)求:

    /wp-load.php
    /wp-config.php
    /wp-settings.php?(它會(huì)加載大多數(shù)核心文件,所有活動(dòng)的插件和主題以及REST API)
    /wp-admin/admin.php
    /wp-admin/includes/ajax-actions.php

    加載這些文件后,WordPress將調(diào)用該admin_init掛鉤,幾個(gè)核心功能都將掛鉤。在WordPress 4.5.3的此鉤子上調(diào)用了以下核心功能:

    register_admin_color_schemes
    send_frame_options_header
    _wp_check_for_scheduled_split_terms
    _wp_admin_bar_init
    _maybe_update_core
    _maybe_update_plugins
    _maybe_update_themes

    調(diào)用完這些函數(shù)后,WordPress最終將調(diào)用$_GET[‘a(chǎn)ction’]$_POST[‘a(chǎn)ction’]變量中提供的AJAX操作。

    REST API請(qǐng)求的生命周期

    admin-ajax.php請(qǐng)求相比,典型的REST請(qǐng)求看起來略有不同。由于REST端點(diǎn)是由WordPress重寫API處理的,因此請(qǐng)求將傳遞到/index.php,然后正常加載其余WordPress。

    /index.php
    /wp-blog-header.php
    /wp-load.php
    /wp-config.php
    /wp-settings.php?(它會(huì)加載大多數(shù)核心文件,所有活動(dòng)的插件和主題以及REST API)

    與發(fā)送過來的請(qǐng)求不同admin-ajax.php,REST API不會(huì)通過加載WordPress管理部分/wp-admin/admin.php,也不會(huì)觸發(fā)admin_init動(dòng)作掛鉤。基于此,任何不依賴于管理員特定功能(但使用admin-ajax.php)的插件或主題都可能會(huì)通過切換到REST API來獲得輕微的性能提升。

    基準(zhǔn)測(cè)試

    既然我們已經(jīng)看到了幕后發(fā)生的事情,那么讓我們建立一個(gè)可以輕松進(jìn)行基準(zhǔn)測(cè)試的場(chǎng)景。為此,我們將創(chuàng)建一個(gè)可以在admin-ajax.php或REST API上運(yùn)行的簡(jiǎn)單函數(shù):

    function benchmark_request() {
        $result = array( 'time' => time() );
        echo json_encode( $result );
        exit;
    }
    
    add_action( 'wp_ajax_benchmark_request', 'benchmark_request' );
    add_action( 'rest_api_init', function() {
        register_rest_route( 'benchmark/v1', '/benchmark/', array(
            'methods'  => 'POST',
            'callback' => 'benchmark_request'
       ) );
    } );
    

    上面的函數(shù)只是返回JSON中的時(shí)間-這只會(huì)有助于使您更容易看到請(qǐng)求沒有被緩存。

    為了執(zhí)行實(shí)際的基準(zhǔn)測(cè)試,我們將使用ApacheBench,這是一個(gè)命令行基準(zhǔn)測(cè)試工具,它使您可以一次觸發(fā)多個(gè)請(qǐng)求以了解服務(wù)器的性能。

    讓我們admin-ajax.php先測(cè)試版本。

     ab -n 100 -c 1 -p ~/Desktop/post.data -g ~/Desktop/ajax.tsv -T application/x-www-form-urlencoded http://localhost/rest-api/wp-admin/admin-ajax.php
    

    上面的命令將100個(gè)POST請(qǐng)求發(fā)送到該/wp-admin/admin-ajax.php文件并記錄響應(yīng)時(shí)間。post.data引用的文件只是一個(gè)文本文件,其中包含要與請(qǐng)求一起發(fā)送的URL編碼的$ _POST值(在本例中為action=benchmark_request)。

    將WordPress REST API性能與admin-ajax.php進(jìn)行比較

    在100個(gè)請(qǐng)求下,在MAMP和PHP 7上全新安裝WordPress且未激活其他插件的情況下,平均響應(yīng)時(shí)間為253ms。這為基于REST API的相同測(cè)試提供了良好的基準(zhǔn):

    ab -n 100 -c 1 -p ~/Desktop/post.data -g ~/Desktop/rest.tsv -T application/x-www-form-urlencoded http://loc
    將WordPress REST API性能與admin-ajax.php進(jìn)行比較

    毫不奇怪,在此比較中,REST API的速度稍快,在100個(gè)請(qǐng)求中的平均響應(yīng)時(shí)間為217ms。顯然,這并不是一個(gè)很大的差異,REST API僅比傳統(tǒng)的AJAX API快15%,但是在許多請(qǐng)求中,這種微小的差異肯定會(huì)加起來,尤其是當(dāng)添加了更多插件時(shí)。

    讓我們運(yùn)行相同的基準(zhǔn)測(cè)試,但激活一些插件。對(duì)于這些測(cè)試,我激活了一些常見的插件,您可能會(huì)在典型的網(wǎng)站上找到它們:

    • ACF
    • Akismet
    • Black Studio TinyMCE小工具
    • WP遷移數(shù)據(jù)庫(kù)
    • WP超級(jí)緩存
    • Yoast SEO

    盡管總體響應(yīng)時(shí)間有所增加,但admin-ajax.php和REST API之間的性能差距仍然大致相同。隨著額外的插件加載,REST API,將約16%的速度,并有一個(gè)平均響應(yīng)時(shí)間490ms相比567ms以上admin-ajax.php

    具有大量插件的網(wǎng)站可以通過REST API看到更大的性能提升,但這完全取決于正在運(yùn)行哪些插件以及如何對(duì)其進(jìn)行編碼。

    因此,您應(yīng)該使用WordPress REST API嗎?

    從性能的角度來看,顯然有一點(diǎn)優(yōu)勢(shì)。添加自定義API端點(diǎn)非常簡(jiǎn)單,并且由于不必加載太多WordPress核心(包括管理區(qū)域和常用admin_init鉤子),因此它admin-ajax.php在大多數(shù)情況下可能會(huì)比使用更快。

    在可靠性方面,REST API仍取決于活動(dòng)插件或主題的質(zhì)量和完整性。編碼不良的插件仍可能輕易干擾REST請(qǐng)求,尤其是將來有更多插件采用REST API時(shí)。但是,由于使用REST API的插件較少,因此目前應(yīng)該更可靠。

    總體而言,至少考慮使用REST API絕對(duì)是一個(gè)好主意。添加自定義API端點(diǎn)非常簡(jiǎn)單,并且切換現(xiàn)有代碼也不需要很多。

    給TA贊賞
    共{{data.count}}人
    人已贊賞
    ??
    Npcink上的部份代碼及教程來源于互聯(lián)網(wǎng),僅供網(wǎng)友學(xué)習(xí)交流,若您喜歡本文可附上原文鏈接隨意轉(zhuǎn)載。
    無意侵害您的權(quán)益,請(qǐng)發(fā)送郵件至 1355471563#qq.com 或點(diǎn)擊右側(cè) 私信:Muze 反饋,我們將盡快處理。
    ?
    購(gòu)物車
    優(yōu)惠劵
    搜索
    主站蜘蛛池模板: 亚洲高清成人一区二区三区| 国产一区二区三区播放心情潘金莲 | 国产亚洲一区二区三区在线观看| 精品香蕉一区二区三区| 亚洲片一区二区三区| 亚洲另类无码一区二区三区| 伊人色综合一区二区三区| 国产主播一区二区三区在线观看| 久久精品无码一区二区WWW| 亚洲V无码一区二区三区四区观看 亚洲爆乳精品无码一区二区三区 亚洲爆乳无码一区二区三区 | 人妻互换精品一区二区| 亚洲国产韩国一区二区| 色妞色视频一区二区三区四区 | 亚洲一区二区三区播放在线| 精品国产一区二区三区在线观看 | 无码AV一区二区三区无码| 亚洲国产精品无码第一区二区三区| 91一区二区三区四区五区| 亚洲视频一区在线播放| 无码人妻视频一区二区三区| 国产视频一区在线观看| 国产av天堂一区二区三区| 麻豆精品久久久一区二区| 加勒比无码一区二区三区| 精品国产亚洲一区二区三区在线观看| 中文字幕亚洲一区二区三区| 插我一区二区在线观看| 一区精品麻豆入口| 国产午夜精品一区二区| 国产凹凸在线一区二区| 无码国产精品一区二区免费vr | 精品少妇人妻AV一区二区| 亚洲高清一区二区三区电影 | 亚洲av区一区二区三| 色多多免费视频观看区一区 | 日韩一区二区三区电影在线观看| 在线观看精品视频一区二区三区| 精品国产日韩亚洲一区91| 免费无码AV一区二区| 亚洲一区二区女搞男| 精品爆乳一区二区三区无码av|