將WordPress REST API性能與admin-ajax.php進行比較

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

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

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

    將WordPress REST API性能與admin-ajax.php進行比較
    將WordPress REST API性能與admin-ajax.php進行比較

    admin-ajax.php請求的壽命

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

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

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

    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

    調用完這些函數后,WordPress最終將調用$_GET[‘action’]$_POST[‘action’]變量中提供的AJAX操作。

    REST API請求的生命周期

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

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

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

    基準測試

    既然我們已經看到了幕后發生的事情,那么讓我們建立一個可以輕松進行基準測試的場景。為此,我們將創建一個可以在admin-ajax.php或REST API上運行的簡單函數:

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

    上面的函數只是返回JSON中的時間-這只會有助于使您更容易看到請求沒有被緩存。

    為了執行實際的基準測試,我們將使用ApacheBench,這是一個命令行基準測試工具,它使您可以一次觸發多個請求以了解服務器的性能。

    讓我們admin-ajax.php先測試版本。

     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個POST請求發送到該/wp-admin/admin-ajax.php文件并記錄響應時間。post.data引用的文件只是一個文本文件,其中包含要與請求一起發送的URL編碼的$ _POST值(在本例中為action=benchmark_request)。

    將WordPress REST API性能與admin-ajax.php進行比較

    在100個請求下,在MAMP和PHP 7上全新安裝WordPress且未激活其他插件的情況下,平均響應時間為253ms。這為基于REST API的相同測試提供了良好的基準:

    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進行比較

    毫不奇怪,在此比較中,REST API的速度稍快,在100個請求中的平均響應時間為217ms。顯然,這并不是一個很大的差異,REST API僅比傳統的AJAX API快15%,但是在許多請求中,這種微小的差異肯定會加起來,尤其是當添加了更多插件時。

    讓我們運行相同的基準測試,但激活一些插件。對于這些測試,我激活了一些常見的插件,您可能會在典型的網站上找到它們:

    • ACF
    • Akismet
    • Black Studio TinyMCE小工具
    • WP遷移數據庫
    • WP超級緩存
    • Yoast SEO

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

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

    因此,您應該使用WordPress REST API嗎?

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

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

    總體而言,至少考慮使用REST API絕對是一個好主意。添加自定義API端點非常簡單,并且切換現有代碼也不需要很多。

    軟件

    PicGo - 基于 Electron 的圖片上傳工具

    2020-1-8 0:02:00

    小鵝通豎排三欄切換區塊 - WordPress區塊

    2020-12-10 1:01:56

    ??
    Npcink上的部份代碼及教程來源于互聯網,僅供網友學習交流,若您喜歡本文可附上原文鏈接隨意轉載。
    無意侵害您的權益,請發送郵件至 1355471563#qq.com 或點擊右側 私信:Muze 反饋,我們將盡快處理。
    0 條回復 A文章作者 M管理員
      暫無討論,說說你的看法吧
    ?
    個人中心
    購物車
    優惠劵
    今日簽到
    有新私信 私信列表
    搜索
    主站蜘蛛池模板: 日韩亚洲一区二区三区| 蜜桃无码一区二区三区| 3d动漫精品一区视频在线观看| 精品国产免费一区二区三区| 精品国产香蕉伊思人在线在线亚洲一区二区 | 鲁大师成人一区二区三区| 国产伦精品一区二区三区免费下载| 影院无码人妻精品一区二区| 亚洲夜夜欢A∨一区二区三区| 91精品福利一区二区三区野战| 成人精品视频一区二区| 中文字幕不卡一区| 日韩精品中文字幕无码一区| 韩国一区二区三区| 日韩精品一区二区三区大桥未久 | 69福利视频一区二区| 国产在线精品一区二区在线看| 制服中文字幕一区二区| 国产精品视频一区麻豆| 一区二区三区在线| 国产乱码精品一区二区三区中| 麻豆精品一区二区综合av| 亚洲高清美女一区二区三区| 精品视频一区二区| 国产香蕉一区二区在线网站| 精品一区二区三区色花堂| 亚洲AV无码一区二区三区电影| 国产av福利一区二区三巨| 亚洲一区二区三区丝袜| 久久久久人妻一区精品果冻| 亚洲一区二区三区成人网站| 国产成人无码一区二区在线观看| 亚洲丰满熟女一区二区哦| 久久精品国产一区| 合区精品久久久中文字幕一区| 中文乱码字幕高清一区二区| 免费av一区二区三区| 无码毛片一区二区三区中文字幕 | 国产成人一区二区动漫精品| 久久精品亚洲一区二区| 日韩在线一区二区三区免费视频|