首頁 後端開發 php教程 WordPress 是一個緩慢的 CMS

WordPress 是一個緩慢的 CMS

Sep 05, 2024 pm 04:31 PM

WordPress es un CMS lento

這篇文章最初於 2014 年在 WordPress 中發布,是一個緩慢的 CMS - 2014

我不只一次陷入這樣的爭論:WordPress 慢嗎?好吧,當附加到 WordPress 的人的唯一反應是有很多訪問量的網站擁有它並且它們的性能是最佳的時,這並沒有太大的爭論。他們自己似乎忘記了,如果在功能強大的計算機上“運行”,即使冒泡排序演算法對於過大的樣本也表現良好。然而,如果我們看看它的計算複雜度,這並不意味著它一定是一個有效的演算法(事實上,它不是)。同樣的事情也發生在 WordPress 上。對於相同數量的信息,它需要比其他 CMS 更強大的託管。不僅如此,正如我們將看到的,無論它是否有大量信息,它都已經是一個緩慢的 CMS。

這並不代表 WordPress 不好。事實並非如此。就像汽車一樣,速度並不是一切。同樣的事情也發生在 CMS 領域。事實上,我的網路專案很大一部分都是用它來完成的。然而,每個項目都是不同的,因此,你必須知道如何用你的頭腦而不是執著來適當地選擇最好的工具。

由於我是一名技術人員,我的論點將基於技術面。特別是當我了解到 WordPress 由於其設計而速度緩慢時。我邀請所有不同意的人給我留言並說出他們的理由。

一切都在一張桌子上。

當我們為 Web 專案建立資料庫模式時,會出現一個問題:是追求實用還是追求高效能。就 WordPress 而言,他們選擇了實用性,並將貼文、自訂貼文、資源和版本分組在同一個表中:wp_posts。這個動作的優點是簡化了程式碼和搜尋(儘管這是 WordPress 所缺少的另一件事,我們將在另一篇文章中看到),但另一方面它大大降低了 WordPress 的效率。一些理解的例子:

  • 如果我們有 500 個帖子,每個帖子都有 4 個不同的評論(當前的一個和另外三個),就好像我們正在處理 2,000 個帖子。

  • 如果我們在 Woocommerce 上有 500 種產品,而每一種都有一張特色圖片和四個作為該產品的圖庫,就好像我們的 CMS 必須處理 3,000 種產品。

  • 如果我們有一個 35 個頁面的小網站,上面有大約 35 個選單項,帶有外部或內部連結。我們的內容管理器將像我們有 70 個頁面一樣運作。因為每個選單項目都被視為我們 CMS 中的一個條目或一個頁面。在這個例子中,這並不多,但我這樣做是為了讓您可以看到另一個影響因素。

  • 如果您有 500 種產品和四種語言,那麼您的 WordPress 就好像它適用於 2,000 種產品。

  • 現在讓我們看一個真實的例子作為總結:如果您有一個包含500 個產品的網站,並且每個產品都有一個特色圖片、四個產品圖庫圖片和一個包含每個產品技術資訊的pdf 。此外,該網站還有一個博客,其中有 200 個條目,每個條目都有相應的特色圖像。另外,如果您的網站支援三種語言,並且每個貼文只有兩則評論。每次 WordPress 對資料庫發起查詢時,它都必須在 5,500 多個元素中進行搜尋。我鄙視其他的東西,例如菜單項目、頁面和自訂帖子。小提醒:

  • 將評論數量限制為兩個或完全禁用評論:

    //Limita las revisiones a dos:
    define( 'WP\_POST\_REVISIONS', 2 );
    //Desactiva totalmente las revisiones:
    //define( 'WP\_POST\_REVISIONS', false );
  • 不時刪除所有修訂。您可以透過啟動以下 sql 查詢來完成此操作:
    DELETE a,b,c FROM wp_posts a
    LEFT JOIN wp\_term\_relationships b ON (a.ID = b.object_id)
    LEFT JOIN wp\_postmeta c ON (a.ID = c.post\_id)
    WHERE a.post_type = 'revision'
  • 對網站上的圖片保持嚴肅態度。另外,請勿將您不會使用的圖像新增至您的 CMS。

  • 如果不是必要的,請避免使用過多的選單。刪除您不打算使用的選單項目。

  • 如果您因為客戶的堅持而別無選擇,除了在中型或大型專案中使用 WordPress 之外,請嘗試建立輔助表,從而盡可能減輕 wp_posts 的負載

你的 WordPress 患有老年癡呆症

WordPress 不惜一切代價尋求彈性,甚至不惜犧牲速度。也許,因為一開始它只是一個部落格系統,在這種情況下,如此大的靈活性不會造成如此大的傷害。然而,當我們開始將它用作 CMS 時,靈活性導致的效能問題就開始出現了。

Déjame decirte una mala noticia: tu gestor de contenidos tiene alzheimer. Se le olvida todo de una petición a otra. Tendrás que repetirle en cada una de ellas los customs posts, los sidebars, o los menús que vas a usar. No te queda otra porque a él se le olvida. Es por ello, que si quieres añadir una entrada al menú del panel, por ejemplo, se lo tendrás que decir cada vez que se vaya a mostrar. Sí, da una enorme flexibilidad pero obliga a PHP y al CMS a procesar lo mismo una vez y otra vez, dando lugar a una perdida de eficiencia. Lo mismo le pasa a los plugins y es por ello que muchos plugins pueden ralentizar sobremanera tu sitio web. No por el sistema de plugins en sí ( que es magnifico como está pensado y programado ), sino por la obligación de los plugins de decir lo mismo una y otra vez y, por tanto, la necesidad de WordPress de recorrerlos completamente en cada petición.

Un CMS enfocado al rendimiento lo hubiera hecho de otra manera. Por ejemplo, haciendo que durante la activación del tema éste dijera que sidebars, custom posts o cualquier otro elemento necesita. WordPress lo registraría y se ajustaría adecuadamente de manera interna. Y lo mismo para los plugins. Pero, como digo anteriormente, un proceder así restaría mucha flexibilidad al CMS, algo que no les interesa.

Consejos:

  • Limita el número de plugins

  • Escoge temas minimalistas o que sólo tengan lo que necesites

  • Te recomendarán que uses un plugin de caché, yo no. Úsalo sólo en el caso que tu sitio web vaya extremadamente lento y siempre con pinzas. Hablaré de ello en otra entrada (edit: ya está disponible: No uses plugins de caché con WordPress , aunque básicamente es porque cortarás todo el funcionamiento interno de WordPress basado en hooks. Es decir, forzarás a trabajar a WordPress de una manera, que como hemos visto, no es la que han decidido para él.

Todo siempre a tu disposición

WordPress, como casi todo el mundo sabe, empezó como un sistema de blogs que se basaba en otro sistema anterior. No estaba pensado para proyectos grandes es por eso que su diseño tendió a lo simple. No clases, sólo funciones. Como cualquier aspecto de diseño, eso no tiene que ser algo necesariamente malo ( sino que se lo digan a los que usan escritorios realizados con GTK ), a no ser que busques la flexibilidad. Entonces, es cuando empiezan los dolores de cabeza.

Si vienes del mundo PHP, seguramente te sorprendas que con WordPress no has tenido ni que hacer requires, ni includes ni usar namespace. Es algo sencillo de entender, el motivo es que WordPress siempre carga todo su arsenal de librerías. Sí, siempre, las uses o no. Si lo sumamos a que tiene alzheimer, uff. Líneas de código que se tienen que leer si o si en cada petición. Un pasote. Pero, claro, piensa que es por la flexibilidad. Puedes usar una función del core sin tener que hacer un include a un fichero que puede que el día de mañana tenga otro nombre o esté en otro path.

A partir de PHP 5.6 hay soporte completo de namespace de funciones. Quizás esa sea una solución para WordPress. Pero en ese caso tendrán que tomar la difícil decisión de crear incompatibilidad hacia atrás. No sé lo que harán.

Nada puedes hacer para mejorar esto, ya que es parte del diseño de WordPress. Tan sólo te queda hacer tu parte, es decir, que tu código no siga esa línea. Si te decides a hacerlo, aquí mis consejos:

  • Crea funciones anónimas para los "actions" y que no sean más que un include a ficheros externos dónde tengas tu código. Así, si esa acción no llega nunca a lanzarse tampoco PHP tendrá que parsear todo el código. Ejemplo:
    add\_action('admin\_init', function() {
        include(\_\_DIR\_\_."/zonas/panel/init.php");
    });

    add\_action('admin\_menu', function() {
        include(\_\_DIR\_\_."/zonas/panel/menu.php");
    });
  • Para widgets, shortcodes y filtros, usa clases con namespace. Además, que estás clases se instancien mediante autocarga.
    //Recomendable usar mejor: spl\_autoload\_register() 

    function __autoload($classname) {
        $file = str\_replace('', DIRECTORY\_SEPARATOR, $classname);

        include_once(BASE_PATH.$file.'.php');
    }

    add_shortcode( 'block', array('misshortcodesBlock', 'load') );
    //...mis otros shortcodes, filtros y widgets, ....

Como resumen, hemos visto que WordPress tiene como principios de diseño a la simplicidad y flexibilidad, pero de una forma que le resta eficiencia. Hay que pensar que ninguna herramienta de desarrollo es buena para todo. Si alguien te lo presenta así es porque te está engañando o te vende una navaja suiza que no sirve para nada. WordPress cojea en su velocidad, pero para sitios webs escaparates es algo que no hay que darle mayor importancia. Para sitios en los que el negocio es la web se debería de plantear otras alternativas. Lo mismo para sitios con bastante tráfico. Si aún así queremos WordPress por su facilidad de uso y flexibilidad hemos de saber que habremos de compensarlo con un buen alojamiento, mucho cuidado con la selección de plugins y un tema de calidad y ajustado a nuestras necesidades.

以上是WordPress 是一個緩慢的 CMS的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1604
29
PHP教程
1510
276
PHP變量範圍解釋了 PHP變量範圍解釋了 Jul 17, 2025 am 04:16 AM

PHP變量作用域常見問題及解決方法包括:1.函數內部無法訪問全局變量,需使用global關鍵字或參數傳入;2.靜態變量用static聲明,只初始化一次並在多次調用間保持值;3.超全局變量如$_GET、$_POST可在任何作用域直接使用,但需注意安全過濾;4.匿名函數需通過use關鍵字引入父作用域變量,修改外部變量則需傳遞引用。掌握這些規則有助於避免錯誤並提升代碼穩定性。

在PHP中評論代碼 在PHP中評論代碼 Jul 18, 2025 am 04:57 AM

PHP註釋代碼常用方法有三種:1.單行註釋用//或#屏蔽一行代碼,推薦使用//;2.多行註釋用/.../包裹代碼塊,不可嵌套但可跨行;3.組合技巧註釋如用/if(){}/控制邏輯塊,或配合編輯器快捷鍵提升效率,使用時需注意閉合符號和避免嵌套。

撰寫PHP評論的提示 撰寫PHP評論的提示 Jul 18, 2025 am 04:51 AM

寫好PHP註釋的關鍵在於明確目的與規範,註釋應解釋“為什麼”而非“做了什麼”,避免冗餘或過於簡單。 1.使用統一格式,如docblock(/*/)用於類、方法說明,提升可讀性與工具兼容性;2.強調邏輯背後的原因,如說明為何需手動輸出JS跳轉;3.在復雜代碼前添加總覽性說明,分步驟描述流程,幫助理解整體思路;4.合理使用TODO和FIXME標記待辦事項與問題,便於後續追踪與協作。好的註釋能降低溝通成本,提升代碼維護效率。

快速PHP安裝教程 快速PHP安裝教程 Jul 18, 2025 am 04:52 AM

ToinstallPHPquickly,useXAMPPonWindowsorHomebrewonmacOS.1.OnWindows,downloadandinstallXAMPP,selectcomponents,startApache,andplacefilesinhtdocs.2.Alternatively,manuallyinstallPHPfromphp.netandsetupaserverlikeApache.3.OnmacOS,installHomebrew,thenrun'bre

學習PHP:初學者指南 學習PHP:初學者指南 Jul 18, 2025 am 04:54 AM

易於效率,啟動啟動tingupalocalserverenverenvirestoolslikexamppandacodeeditorlikevscode.1)installxamppforapache,mysql,andphp.2)uscodeeditorforsyntaxssupport.3)

PHP調用AI智能語音助手 PHP語音交互系統搭建 PHP調用AI智能語音助手 PHP語音交互系統搭建 Jul 25, 2025 pm 08:45 PM

用戶語音輸入通過前端JavaScript的MediaRecorderAPI捕獲並發送至PHP後端;2.PHP將音頻保存為臨時文件後調用STTAPI(如Google或百度語音識別)轉換為文本;3.PHP將文本發送至AI服務(如OpenAIGPT)獲取智能回复;4.PHP再調用TTSAPI(如百度或Google語音合成)將回復轉為語音文件;5.PHP將語音文件流式返回前端播放,完成交互。整個流程由PHP主導數據流轉與錯誤處理,確保各環節無縫銜接。

如何用PHP搭建社交分享功能 PHP分享接口集成實戰 如何用PHP搭建社交分享功能 PHP分享接口集成實戰 Jul 25, 2025 pm 08:51 PM

在PHP中搭建社交分享功能的核心方法是通過動態生成符合各平台要求的分享鏈接。 1.首先獲取當前頁面或指定的URL及文章信息;2.使用urlencode對參數進行編碼;3.根據各平台協議拼接生成分享鏈接;4.在前端展示鏈接供用戶點擊分享;5.動態生成頁面OG標籤優化分享內容展示;6.務必對用戶輸入進行轉義以防止XSS攻擊。該方法無需複雜認證,維護成本低,適用於大多數內容分享需求。

如何用PHP結合AI實現文本糾錯 PHP語法檢測與優化 如何用PHP結合AI實現文本糾錯 PHP語法檢測與優化 Jul 25, 2025 pm 08:57 PM

要實現PHP結合AI進行文本糾錯與語法優化,需按以下步驟操作:1.選擇適合的AI模型或API,如百度、騰訊API或開源NLP庫;2.通過PHP的curl或Guzzle調用API並處理返回結果;3.在應用中展示糾錯信息並允許用戶選擇是否採納;4.使用php-l和PHP_CodeSniffer進行語法檢測與代碼優化;5.持續收集反饋並更新模型或規則以提升效果。選擇AIAPI時應重點評估準確率、響應速度、價格及對PHP的支持。代碼優化應遵循PSR規範、合理使用緩存、避免循環查詢、定期審查代碼,並藉助X

See all articles