問題描述

隨著新的 WordPress 和它的新功能,似乎 WordPress 的能力遠不止一個簡單的部落格引擎。但是 WordPress 的規模如何用 10k 來表示 – > 每天有 10 萬使用者?

有了很多使用者,它的很大一部分將是有一個良好的快取策略,但 WordPress 開發的幫助如何,使這很容易,併為您提供所需的控制。 Fx 能夠快取部分頁面,只能渲染使用者定製的部件,支援主/從資料庫設定和類似的東西?

最佳解決方案

顯然,沒有任何尺度以及由快速 Web 伺服器提供的靜態檔案以及任何必須確定要載入的內容,然後載入它的 CMS 將不會執行 WordPress 或其他方式。其中一個問題是每個 URL 請求需要的資料庫查詢數量,以及我以前在 Drupal 獨家工作的 2 年工作經驗,現在 2 年以上 WordPress 是 WordPress 在該部門要好多了。

也就是說,幾乎沒有任何權力將會擴大”out-of-the-box”; 這是關於您的可擴充套件性需求增長可以做什麼的?

在 「大量交通」 的低端,有很好的快取外掛和廉價 CDN 的整合,您可以在 no-IT 預算和低託管預算上做得相當不錯。這裡還有一些其他問題& 回顧回顧:

有可用於分析以查明效能瓶頸的選項:

一旦出現瓶頸,您可以使用 Transient API 進行本地化最佳化。這個 Q& A 給出了一個可以使用 Transients API 進行最佳化的示例,並顯示如何:

如果你真的想要拔出大槍,你可以配置 Memcached,HyperDB,Nginx 和/或更多的東西來加速 (似乎後者正在演變成從 WordPress 中獲得驚人的可擴充套件性的方式):

最後還有新興的 WordPress-focused webhosts 專門從事效能如 WP Engine,ZippyKid 等:

所以好訊息是所有的規模都非常好從極低的免費和輕鬆的技術複雜性和成本只有隨著流量大幅增長而增長。從 WordPress 開始,這將是巨大的。如果你的流量不斷增長,而且你的貨幣化程度相當不錯,那麼你會發現這是很有代價的。

至少 IMO 。 🙂

次佳解決方案

  1. 不要期望共享託管太多 – 如果您在共享主機上,不要責怪 WordPress 緩慢。共享主機可能會將 1000 個帳戶裝入一個伺服器。所以你可以花一整天最佳化每月 10 美元的賬戶,這並不重要。還要注意營銷流行語 – 只是因為它說”cloud” 並不意味著你沒有與 100 或 1000 人共享一臺伺服器。
  2. 在這一點上我不認為快取外掛是必要的。如果您檢視 WP 原始碼,則已經將高階快取放入核心。快取的快取快取的快取 – 注意,這可以適得其反。
  3. 減慢你的主要原因是緩慢的 MySQL 查詢和 WordPress out-of-the 盒不應該給你這裡麻煩。不過,我不得不”LIMIT” 我的評論查詢,因為我有 5 萬多條評論。 (這是固定的嗎?) 另外,如果你正在做任何非典型 (像 1000 個類別),也可能是一個問題。
  4. 我使用 Linode 512 與 NginX 和”top” 顯示 PHP 和 NginX 的工作在不到 1/100 秒的每個請求。幾乎所有的 CPU 時間都與 MySQL 繫結。您可以每月服務 100 萬頁,一個 20 美元的路易斯,但是一旦你開始新增外掛和照片,我想你將需要一個”1GB” 線性碼。從我的角度來看,它幾乎是線性的:如果瀏覽量是雙倍的,只是你的 Linode 的大小的兩倍。

免責宣告:我不為 Linode 工作。


更新 (〜 2 年後),因為你想用 PHP 快取頁面的一部分,這裡是一個簡單的解決方案,我使用這是非常快的。我在 1/100 秒內每頁快取幾個單獨的部分/部分。看起來像一個 ramdisk 可以使這更快,但它是很快我的需要:

$cache_file = "./cache/portion-1". $since; // maybe round() this $since timestamp
$cache_life = 1000; // seconds to keep this cached
$filemtime = filemtime($cache_file);  // returns FALSE if file does not exist
if (!$filemtime or (time() - $filemtime >= $cache_life)) {

    // heavy lifting starts
    $output = 'Heavy!';
    // heavy lifting ends

    if (!file_put_contents($cache_file,$output,LOCK_EX)) { echo 'error'; } // save the cache
    echo $output;

} else {

    // load from cache
    $output = file_get_contents($cache_file);
    echo $output;
}

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。