国产又猛又爽又黄视频|在线观看人成视频免费|少妇高潮太爽了在线视频|911国产免费无码专区|特黄做受又大又粗又长大片|欧美一级二级免费在线观看|日日夜人人澡人人澡人人看免|欧洲午夜精品一级毛片在线播放

WordPress在部分windows服務(wù)器下變得很卡的原因淺析

2022-04-02 12:39 欄目:技術(shù)開發(fā) 查看(6526)

WordPress作為一款知名的CMS管理系統(tǒng),在全球范圍內(nèi)廣泛部署,據(jù)說全球超過四分之一的網(wǎng)站基于WordPress創(chuàng)建,比如美國白宮官網(wǎng)也是基于WordPress創(chuàng)建的。WordPress具備很多優(yōu)點,比如使用簡單、資源豐富;但作為一款標準的CMS系統(tǒng),由于需要考慮很多場景需求,因此從性能上來講,原版的WordPress性能上并沒有優(yōu)勢。

近期,某客戶網(wǎng)站是多年前基于WordPress創(chuàng)建的官網(wǎng),之前是運在linux服務(wù)器上,最近他們單位自己機房使用的是windows服務(wù)器。結(jié)果遷移上去后,明顯變得卡不少,原來基本上是秒開,現(xiàn)在還要進度條轉(zhuǎn)一兩秒。

一般來講,只要水平不是太差的開發(fā)人員,自研的程序在性能上是優(yōu)于這些現(xiàn)成的CMS系統(tǒng)的,因此除官網(wǎng)外我們微構(gòu)網(wǎng)絡(luò)基本采用自研開發(fā)的網(wǎng)站程序(現(xiàn)在官網(wǎng)項目也基本采用自研程序)。在通常WordPress卡主要原因是有如下幾個原因:

1、前端引用了google等境外服務(wù)器的資源,比如谷歌字體文件。

這個因素基本在國內(nèi)采用WordPress的網(wǎng)站都不存在了,因為如果存在網(wǎng)站將卡得沒法用,因為這些資源被防火墻攔截了,是無法訪問的。因此大家,都是在創(chuàng)建項目后基本上就屏蔽或者用國內(nèi)的鏡像資源替代這些資源了。

2、數(shù)據(jù)庫操作造成的卡頓。

雖然WordPress的數(shù)據(jù)庫操作,性能確實不高,但WordPress的定位就是博客程序,所以從這個程序設(shè)計上就不是定位高性能,隨便一個頁面就是幾十次查詢操作。但即便是這樣,在并發(fā)不高的網(wǎng)站,基本上不會因為這個原因造成的卡。

接下來就開始排查流程了,首先要排除上述兩個常見因素。被攔截的前端資源這個因素不存在,因為在linux服務(wù)器上是沒問題的;數(shù)據(jù)庫操作問題理論上也不是,因為這種官網(wǎng)訪問量并不高,而且在原來服務(wù)器上也沒問題。

然后刪除所有代碼,進行程序空載測試。也就是所有的自定義代碼全部刪除,僅僅只加載WordPress核心程序。結(jié)果發(fā)現(xiàn)竟然還是要1秒以上。

QQ截圖20220402120807

當然WordPress空載的時候,核心程序也會進行數(shù)據(jù)庫操作,監(jiān)測的sql語句如下3條:

QQ截圖20220402121031

在加上通過調(diào)試wp-blog-header.php這個核心入庫文件發(fā)現(xiàn),即便禁止程序進行后續(xù)輸出操作,頁面執(zhí)行時間也超過一秒。也就是只要執(zhí)行wp-blog-header.php中的

require_once( dirname(__FILE__) . '/wp-load.php' );

就要一秒以上,這顯然非常不正常。繼續(xù)追蹤溯源調(diào)試,最后發(fā)現(xiàn)是這樣的鏈路:

//文件:/wp-load.php
require_once( ABSPATH . 'wp-config.php' );
//文件:/wp-config.php
require_once(ABSPATH . 'wp-settings.php');
//文件:/wp-settings.php
require_wp_db();
//文件:/wp-includes/load.php
$wpdb = new wpdb( DB_USER, DB_PASSWORD, DB_NAME, DB_HOST );
//文件:/wp-includes/db.php
mysqli_real_connect( $this->dbh, $host, $this->dbuser, $this->dbpassword, null, $port, $socket, $client_flags );

也就是最終造成卡的就是mysqli_real_connect這個方法了,而這個方法是php自帶的一個方法,作用是建立數(shù)據(jù)庫鏈接。從中可以看出還是程序與數(shù)據(jù)庫之間存在問題,為了驗證這個問題。我們編寫了一小段不基于任何框架或程序的測試代碼,代碼如下:

<?php
$t1=microtime(true);
$h=mysqli_init();
$r=mysqli_real_connect( $h, 'localhost', 'root', 'password', null, '3306' );
var_dump($r);
$t2=microtime(true);
var_dump($t2-$t1);

這段代碼的意義就是在于建立一個數(shù)據(jù)庫鏈接,然后查看建立這個鏈接所需要花的時間,測試結(jié)果如下:

QQ截圖20220402123137

也就是僅僅建立一個數(shù)據(jù)庫鏈接所需要的時間就是1秒多,因此造成前面所說的卡的主要原因就是在進行建立數(shù)據(jù)庫鏈接時所花費的時間。通過查找相關(guān)資料得知,造成這個原因一個常見問題就是由于在配置數(shù)據(jù)庫鏈接的時候,host填寫的是localhost而不是127.0.0.1,只需要修改為127.0.0.1即可。

QQ截圖20220402123705

使用127.0.0.1時所話的時間都是個位數(shù)毫秒級,這個時間幾乎可以忽略不計。當然很多標準的程序默認數(shù)據(jù)庫配置信息就是填寫localhost,而為什么某些情況就不行呢??梢詤⒖嘉覀儼l(fā)布的下一篇文章。

與我們的項目經(jīng)理聯(lián)系
掃二維碼與項目經(jīng)理溝通

我們在微信上24小時期待你的聲音

解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流

轉(zhuǎn)載請注明出處:WordPress在部分windows服務(wù)器下變得很卡的原因淺析 - 微構(gòu)網(wǎng)絡(luò)
分享: