테마와 플러그인을 로드하지 않고 WordPress WP-API를 더 빠르게 만듭니다.
WordPress API에 더 빨리 요청하고 싶습니다.내 API는 플러그인에서 구현됩니다(route 등록에는 register_rest_route를 사용합니다).단, 플러그인이기 때문에 모든 것이 플러그인(자테마 및 테마)으로 로딩되며 기본적으로 이 API에 대한 쿼리에 0.5초 정도 걸립니다.이러한 불필요한 부분이 로딩되어 있기 때문입니다.
WordPress API는 다른 방법으로 사용할 수 없습니까?WP-API를 사용하는 대부분의 플러그인은 다른 플러그인을 로드할 필요가 없기 때문에 테마는 더더욱 필요 없습니다.어떻게 그걸 놓칠 수 있는지 이해가 안 돼요.
이걸 할 수 있는 방법이 있나요?
네, 가능합니다.최소한의 WordPress 코어(플러그인과 테마가 없는 DB)가 필요한 플러그인 중 하나는 다음과 같습니다.
<?php
define('SHORTINIT', true); // load minimal WordPress
require_once PATH_TO_WORDPRESS . '/wp-load.php'; // WordPress loader
// use $wpdb here, no plugins or themes were loaded
PATH_TO_WORDPRESS과 같이 예를 들어 플러그인에서는 다음과 같이 표시됩니다.
require_once dirname(__FILE__) . '/../../../wp-load.php'; // backwards 'plugin-dir/plugins/wp-content'
★★SHORTINIT로로 합니다.true확실히 퍼포먼스에 도움이 됩니다.
★★★★★★★★★★★★★★★★ WP_DEBUG비활성화 WordPress 부트스트랩에 걸리는 시간은 다음과 같습니다.
- SHORTINIT 사용 안 함: 최대 0.045초
- SHORTINIT 사용 시: 0.0015초
퍼포먼스를 필요로 하는 사이트라면 OpCache를 활성화함으로써 이 기능을 조금 높일 수 있습니다(예: 최신 버전의 APC 또는 PHP OpCache).
위의 두 로 정의될 수 있다고 생각합니다.SHORTINIT요구하다wp-load.php네가 찾고 있는 거야
이 파일은 플러그인의 일부이지만 WordPress 자체와는 독립적으로 호출됩니다(Ajax를 통해 직접 호출).플러그인이나 WP 자체의 다른 부분에서 포함되거나 사용되지 않습니다.
편집: OP는 WordPress가 아닌 WP-API에 관한 것이므로 실제 질문에 대응하기 위해 추가하겠습니다.다른 사람에게 도움이 될 수 있도록 원래의 답변 내용을 남겨 두겠습니다.
WP API로 테스트를 진행했는데, @David가 답변한 것처럼 다른 문제일 수 있습니다.
rest api 외에 12개의 플러그인과 꽤 큰 "대형" 플러그인을 로드했습니다.로컬 설치에는 25개의 테마가 설치되어 있습니다(물론 액티브한 것은 1개).WordPress의 'WordPress를 했습니다.index.php 및 된 파일microtime(true)모든 것이 언제 시작되었는지 기록한 다음 REST 컨트롤러 중 하나를 편집하여 시작부터 API 끝점까지 걸리는 시간을 계산합니다.
에 있는 되게 약하다.0.0462-0.0513(PHP OpCache는 모든 퍼포먼스에 을 주지 않는 것 .따라서 WordPress를 모두 부트스트래핑해도 성능에 거의 영향을 주지 않는 것으로 보입니다.
요청에 0.5초가 걸리는 경우 병목 현상이 다른 곳에 있으므로 플러그인과 테마를 차단하는 것은 최소한의 영향을 미칩니다.적어도 이게 내가 찾은 거야.
당신이 잘못된 문제에 집중하고 있는 것 같아요.
php 파일을 로드하는 것은 db에서 읽는 것만큼 느리지 않으며, 이는 500ms의 로드 시간이 될 수 있습니다.어쨌든 이것을 줄이는 것을 검토해야 합니다(cache wp-options 등). 그러나 API와 관련하여 제가 제안하는 것은 mu-plugin을 사용하여 출력을 캐시하는 것입니다.exit를 사용하면 파일에서 출력을 로드하여 즉시 처리할 수 있습니다.
1. : 1. 폴더 만들기: 1. 폴더 만들기mu-plugins 수 )wp-content 폴더(wp-content)에 있습니다.
을
api-cache.php파일에 다음 코드를 입력합니다.
function get_api_cache(){ //dont run if we are calling to cache the file (see later in the code) if( isset($_GET['cachecall']) && $_GET['cachecall'] === true) return; $url = "$_SERVER[REQUEST_URI]"; //do a little error checking $uri= explode('/',$url); //we have a array (1st key is blank) if( $uri[1] !== 'wp-json' || $uri[2] !== 'wp' || $uri[3] !== 'v2'){ return; } //lock down the possible endpoints we dont want idiots playing with this... $allowed_endpoints= array( 'posts' ); $endpoint= array_pop($uri); // not sure if this is valid or not, is there more structure to some api calls? if( !in_array( $endpoint, $allowed_endpoints) ){ return; } //ok reasonably confident its a api call... $cache_folder= get_stylesheet_directory().'/api_cache/'; // prob best if not within php server but to get you going if(! file_exists ( $cache_folder ) ){ mkdir($cache_folder); //warning 777!! } /* * Need to choose a method of control for your cached json files * you could clear out the folder on update post/ taxonomies etc * or cron clear out hourly/weekly whatever freq you want */ if( file_exists($cache_folder.$endpoint.'.json') ){ $json= file_get_contents($cache_folder.$endpoint.'.json'); header('Content-Type: application/json'); echo $json; exit;// we need nothing else from php exit } else { //make sure there will be no errors etc.. $ch = curl_init(); $url= "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]?cachecall=true"; $timeout= 5; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); $json = curl_exec($ch); curl_close($ch); file_put_contents($cache_folder.$endpoint.'.json', $json); } } get_api_cache();
이제 두 번째 부하에서의 부하 시간에 큰 차이가 있음을 알 수 있습니다(이번에는 처음으로 출력을 캐시합니다).
몇 가지 면책 사항:
- 코드의 코멘트를 읽어주세요.
- 컬이 필요해요.
- 캐시 폴더는 777이므로 테마 폴더와 가급적 http 접근 가능한 파일 밖으로 옮기기를 강력히 권장합니다.
- 캐시할 데이터를 캡처하기 위한 모든 후크가 없었기 때문에 콘텐츠를 캡처하기 위해 컬을 사용했습니다.이것은 나중에 변경될 수 있으며, 후크/필터를 사용하면 캐시 파일을 작성할 때 처리 시간이 다소 단축됩니다.
- 캐시 파일을 갱신하는 방법은 포함되어 있지 않습니다.갱신 빈도를 결정해야 합니다.매일 많은 투고를 받고 방문자가 많은 사이트에서는 cron 작업을 수행하여 파일을 삭제하는 경우가 있습니다(예를 들어 하루에 3회, 매시간, 매 10분 등).업데이트 시간의 적절한 트레이드오프는 무엇입니까?또는 후크를 추가하여 게시물이 변경되었을 때만 갱신할 수 있습니다.
- 어레이에 엔드포인트를 추가합니다(if 문을 삭제하여 모든 엔드포인트를 허용할 수 있지만 404가 캐시되는 상황이 발생할 수 있습니다).
이거 한번 먹어보세요.Post-Type, 페이지 및 기타 상황에서 특정 플러그인을 활성화/비활성화할 수 있는 플러그인입니다.
테마 파트는 당신이 썼다면 함수에 무언가를 넣기 쉬울 것이다.php: API 요청 시 후크 또는 필터를 연결하지 않도록 합니다.
사이드노트로서 직접 de DB를 조회할 수 없습니까?
이것이 당신에게 도움이 된다면 제가 영어를 잘 못해서 죄송합니다.
root wordpress install에 플러그인 폴더를 넣습니다.
/public_html/my-plugin/my-plugin.php
and include wordpress main file.
require dirname( dirname( __FILE__ ) ).'/wp-load.php';
또는 플러그인 폴더에서 직접 액세스
/public_html/wp-content/plugins/my-plugin/my-plugin.php
require_once dirname(__FILE__) . '/../../../wp-load.php';
wp-load 확인 전.php 파일이 올바르게 포함되어 동작하고 있습니다.
wp-displictwp-syslog.php 파일은 전체 코어, 플러그인 및 테마 파일을 로드합니다. 워드프레스는 첫 번째 mu-plugins 파일(wp-content/mu-plugins/)을 로드하고 액션 후크 muplugins_loaded를 제공합니다.로드된 다른 모든 파일을 종료하려면 이 작업을 트리거합니다.또한 muplugins_loaded 전에 제공되는 작업 후크를 찾아 다른 파일 및 스크립트 실행을 중지할 수도 있습니다.
constant SHORTINIT를 정의한 경우 wp-load를 포함합니다.php 파일에는 DB, 플러그인 또는 기본 기능이 포함되어 있습니다.이러한 방법으로 플러그인과 테마 파일을 로드하는 것뿐만 아니라 코어 파일을 더 많이 로드하고 싶을 때 해결책을 찾을 수 있습니다.
// file my-plugin.php
//call before include file wp-load.php
global $wp_filter;
$wp_filter = array(
// pass wp hook where to want exit extra wp loaded
'muplugins_loaded' => array(
// prority
1 => array(
// callback function register
'wp_extra_loaded_exit' => array(
'function' => 'wp_extra_loaded_exit',
'accepted_args' => 1
)
)
)
);
function wp_extra_loaded_exit(){
exit;
}
require dirname( dirname( __FILE__ ) ).'/wp-load.php';
// plugin code here.
muplugins_loaded hook이 워드프레스를 정의하는지 확인합니다.또한 muplugins_loaded 전에 정의되는 훅을 찾을 수 있습니다.또한 워드프레스 파일을 로드한 후에 이 포인트를 정지할 수 있습니다.-
스크립트를 테스트하려면 파일 wp-settings를 엽니다.php 및 muplugins_loaded 문자열을 찾은 후 echo 문을 확인합니다.
echo "Wordpress loaded in this point before";
do_action( 'muplugins_loaded' );
echo "After this wordpress not loading"; // Output fail bcz we exit
언급URL : https://stackoverflow.com/questions/36349568/make-wordpress-wp-api-faster-by-not-loading-theme-and-plugins
'programing' 카테고리의 다른 글
| 어떻게 하면 ng-view가 아닌 ui-view에서 ng-animate를 사용할 수 있나요? (0) | 2023.03.06 |
|---|---|
| Redx 상태 및 URL 해시 태그 매개 변수를 동기화하는 방법 (0) | 2023.03.06 |
| 페이지 내용을 가져오는 올바른 방법 (0) | 2023.03.06 |
| React의 동적 속성JS (0) | 2023.03.06 |
| Typescript | 함수의 반환 유형 누락에 대한 경고(ESLint (0) | 2023.03.06 |