WordPress は遅い CMS です
この投稿は 2014 年に初めて公開されました。WordPress は遅い CMS - 2014
私は何度も、「WordPress は遅いのか?」という議論に巻き込まれたことがあります。まあ、WordPress に関わっている人たちからの唯一の反応が、アクセス数が多く、WordPress を使用しているサイトがあり、そのパフォーマンスが最適であるということだけであれば、それほど議論の余地はありません。彼ら自身は、バブルソートアルゴリズムでさえ、強力なコンピュータで「実行」されれば、過度に大きなサンプルに対して適切に動作することを忘れているようです。ただし、計算の複雑さを見ると、それが必ずしも効率的なアルゴリズムであるとは限りません (実際にはそうではありません)。 WordPress でも同じことが起こります。同じ量の情報を得るには、他の CMS よりもはるかに強力なホスティングが必要になります。それだけではなく、これからわかるように、情報量が多いかどうかに関係なく、すでに遅い CMS です。
これは WordPress が悪いという意味ではありません。これ以上真実からかけ離れたものはありません。車と同じように、スピードがすべてではありません。 CMSの世界でも同じことが起こります。実際、私の Web プロジェクトの大部分はこれを使用しています。ただし、プロジェクトはそれぞれ異なるため、執着ではなく頭で適切に最適なツールを選択する方法を知る必要があります。
私は技術者なので、私の議論は技術的な側面に基づいて行われます。特に WordPress がそのデザインのせいで遅いと理解しているときはそうです。反対する人は全員、その理由を添えてコメントを残してください。
すべてが 1 つのテーブルにあります。
Web プロジェクトのデータベース スキーマを作成するとき、実用的な方法を採用するか、効率的な方法を採用するかという問題が生じます。 WordPress の場合、実用性を重視して投稿、カスタム投稿、リソース、バージョンを同じテーブル wp_posts にグループ化しました。このアクションには、コードと検索が簡素化されるという利点があります (これは、別の投稿で説明するように、WordPress に欠けているもう 1 つの点ですが) が、その一方で、WordPress の効率を大幅に低下させます。理解するためのいくつかの例:
500 件の投稿があり、それぞれに 4 つの異なるレビュー (現在の 1 つとさらに 3 つ) がある場合、あたかも 2,000 件の投稿を処理しているようなものです。
Woocommerce で 500 個の製品があり、それぞれに注目の画像が 1 つと、その製品のギャラリーとして 4 つある場合、CMS が 3,000 個の製品を処理する必要があるようなものです。
35 ページの小さな Web サイトがあり、そこには外部リンクまたは内部リンクを含む約 35 のメニュー項目があるとします。私たちのコンテンツ マネージャーは、あたかも 70 ページがあるかのように機能します。各メニュー項目は CMS のエントリまたはページであるかのようにカウントされるためです。この例では、それは大したことではありませんが、影響を与える別の要因がわかるようにこれを入れています。
500 個の製品と 4 つの言語がある場合、WordPress はあたかも 2,000 個の製品で動作したかのようになります。
それでは、要約として実際の例を見てみましょう: 500 個の製品を含む Web サイトがあり、それぞれの製品に注目の画像、4 つの製品ギャラリー画像、および各製品の技術情報を含む PDF があるとします。 。さらに、このサイトには 200 件のエントリーがあり、それぞれに対応する注目の画像が含まれるブログもあります。また、3 つの言語をサポートし、投稿ごとにレビューが 2 つだけになるようにウェブサイトを作成した場合。 WordPress がデータベースに対してクエリを実行するたびに、5,500 を超える要素の中から検索する必要があります。私はメニュー項目、ページ、カスタム投稿などを軽蔑します。ヒント:
レビューの数を 2 つに制限するか、レビューを完全に無効にします:
//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 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undress AI Tool
脱衣画像を無料で

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

PHP変数スコープの一般的な問題とソリューションには次のものが含まれます。1。グローバル変数は関数内でアクセスできず、グローバルキーワードまたはパラメーターを使用して渡す必要があります。 2。静的変数は静的で宣言され、1回のみ初期化され、値は複数の呼び出し間で維持されます。 3. $ _GETや$ _POSTなどのハイパーグローバル変数は、任意の範囲で直接使用できますが、安全なフィルタリングに注意を払う必要があります。 4.匿名関数は、使用キーワードを使用して親スコープ変数を導入する必要があり、外部変数を変更する場合は、参照を渡す必要があります。これらのルールを習得すると、エラーを回避し、コードの安定性が向上するのに役立ちます。

PHPコメントコードには3つの一般的な方法があります。1。//#を使用して1行のコードをブロックすると、//を使用することをお勧めします。 2。使用/.../複数の行でコードブロックをラップするには、ネストすることはできませんが交差することができます。 3. / if(){}を使用するなどの組み合わせスキルコメントロジックブロックを制御するか、エディターショートカットキーで効率を改善するには、シンボルを閉じることに注意を払い、使用時にネストを避ける必要があります。

PHPコメントを書くための鍵は、目的と仕様を明確にすることです。コメントは、「何が行われたのか」ではなく「なぜ」を説明する必要があり、冗長性や単純さを避けてください。 1.読みやすさとツールの互換性を向上させるために、クラスおよびメソッドの説明にdocblock(/*/)などの統合形式を使用します。 2。JSジャンプを手動で出力する必要がある理由など、ロジックの背後にある理由を強調します。 3.複雑なコードの前に概要説明を追加し、手順でプロセスを説明し、全体的なアイデアを理解するのに役立ちます。 4. TodoとFixmeを合理的に使用して、To Doアイテムと問題をマークして、その後の追跡とコラボレーションを促進します。優れた注釈は、通信コストを削減し、コードメンテナンスの効率を向上させることができます。

tolearnphpefctivially、startbysettingupalocalserverenvironmentusingtoolslikexamppandacodeeditorlikevscode.1)instalxamppforapa Che、mysql、andphp.2)useocodeeditorforsyntaxsupport.3)testyoursetup withasimplephpfile.next、Learnpbasicsincludingvariables、ech

to installphpquickly、usexampponwindowsorhomebrewonmacos.1.onwindows、downloadandinstallxampp、selectcomponents、startapache、andplacefilesinhtdocs.2

PHPでは、四角い括弧または巻き毛装具を使用して文字列固有のインデックス文字を取得できますが、正方形のブラケットをお勧めします。インデックスは0から始まり、範囲外のアクセスはnull値を返し、値を割り当てることができません。 MB_SUBSTRは、マルチバイト文字を処理するために必要です。例:$ str = "hello"; echo $ str [0];出力h; MB_Substr($ str、1,1)などの漢字は、正しい結果を得る必要があります。実際のアプリケーションでは、ループする前に文字列の長さをチェックする必要があり、ダイナミック文字列を有効性のために検証する必要があり、多言語プロジェクトはマルチバイトセキュリティ関数を均一に使用することをお勧めします。

PHPでソーシャル共有機能を構築するコア方法は、各プラットフォームの要件を満たす共有リンクを動的に生成することです。 1.最初に現在のページまたは指定されたURLおよび記事情報を取得します。 2。urlencodeを使用してパラメーターをエンコードします。 3.各プラットフォームのプロトコルに従って、共有リンクをスプライスおよび生成します。 4.ユーザーがクリックして共有できるように、フロントエンドにリンクを表示します。 5.ページ上のOGタグを動的に生成して、コンテンツディスプレイの共有を最適化します。 6. XSS攻撃を防ぐために、必ずユーザーの入力を逃がしてください。この方法は、複雑な認証を必要とせず、メンテナンスコストが低く、ほとんどのコンテンツ共有ニーズに適しています。

ユーザー音声入力がキャプチャされ、フロントエンドJavaScriptのMediareCorder APIを介してPHPバックエンドに送信されます。 2。PHPはオーディオを一時ファイルとして保存し、STTAPI(GoogleやBaiduの音声認識など)を呼び出してテキストに変換します。 3。PHPは、テキストをAIサービス(Openaigptなど)に送信して、インテリジェントな返信を取得します。 4。PHPは、TTSAPI(BaiduやGoogle Voice Synthesisなど)を呼び出して音声ファイルに返信します。 5。PHPは、音声ファイルをフロントエンドに戻し、相互作用を完了します。プロセス全体は、すべてのリンク間のシームレスな接続を確保するためにPHPによって支配されています。
