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

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

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

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

    • 原文來(lái)源于:詳情
    將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)求看起來(lái)略有不同。由于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ā)送過(guò)來(lái)的請(qǐng)求不同admin-ajax.php,REST API不會(huì)通過(guò)加載WordPress管理部分/wp-admin/admin.php,也不會(huì)觸發(fā)admin_init動(dòng)作掛鉤。基于此,任何不依賴于管理員特定功能(但使用admin-ajax.php)的插件或主題都可能會(huì)通過(guò)切換到REST API來(lái)獲得輕微的性能提升。

    基準(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)求沒(méi)有被緩存。

    為了執(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ì)加起來(lái),尤其是當(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)站可以通過(guò)REST API看到更大的性能提升,但這完全取決于正在運(yùn)行哪些插件以及如何對(duì)其進(jìn)行編碼。

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

    從性能的角度來(lái)看,顯然有一點(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)求,尤其是將來(lái)有更多插件采用REST API時(shí)。但是,由于使用REST API的插件較少,因此目前應(yīng)該更可靠。

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

    Typecho

    Mirages - 簡(jiǎn)潔的Typecho博客主題

    2020-2-15 23:17:00

    教程

    B2主題日志頁(yè)底部“贊”美化 - WordPress美化

    2020-8-23 12:01:42

    ??
    Npcink上的部份代碼及教程來(lái)源于互聯(lián)網(wǎng),僅供網(wǎng)友學(xué)習(xí)交流,若您喜歡本文可附上原文鏈接隨意轉(zhuǎn)載。
    無(wú)意侵害您的權(quán)益,請(qǐng)發(fā)送郵件至 1355471563#qq.com 或點(diǎn)擊右側(cè) 私信:Muze 反饋,我們將盡快處理。
    0 條回復(fù) A文章作者 M管理員
      暫無(wú)討論,說(shuō)說(shuō)你的看法吧
    ?
    個(gè)人中心
    購(gòu)物車
    優(yōu)惠劵
    今日簽到
    有新私信 私信列表
    搜索
    主站蜘蛛池模板: 日韩爆乳一区二区无码| 亚洲蜜芽在线精品一区| 韩日午夜在线资源一区二区 | 美女视频黄a视频全免费网站一区| 精品一区二区三区水蜜桃| 国产日韩高清一区二区三区| 亚欧在线精品免费观看一区 | 国产精品女同一区二区| 北岛玲在线一区二区| 91精品国产一区| 国产在线精品一区二区高清不卡| 亚洲av日韩综合一区久热| 国产精品一区二区久久国产| 国产精品亚洲一区二区三区| 国产精品久久久久久麻豆一区| 亚洲老妈激情一区二区三区| 精品中文字幕一区二区三区四区| 精品深夜AV无码一区二区老年| 亚洲欧洲∨国产一区二区三区| 亚洲一区二区三区免费| 精品国产一区二区三区免费看| 亚洲日本乱码一区二区在线二产线| 国产av天堂一区二区三区| 精品一区二区高清在线观看| 精品国产一区在线观看| 亚洲一区二区三区丝袜| 亚洲一区二区三区不卡在线播放| 亚洲午夜福利AV一区二区无码| 国产综合无码一区二区三区| 国产成人一区二区动漫精品 | 精品久久久久久无码中文字幕一区 | 人妻夜夜爽天天爽一区| 日韩国产免费一区二区三区| 亚洲中文字幕在线无码一区二区| 无码一区二区三区在线观看| 国产免费一区二区视频| 在线成人一区二区| 精品欧洲av无码一区二区| 亚洲熟女综合色一区二区三区| 理论亚洲区美一区二区三区| 国产日韩AV免费无码一区二区三区|