コヌド最適化開発者向けのクむックWebアプリケヌションたたは8぀のヒントの䜜成方法

Diafan.CMSを䜜成するずきに私たちが祈る2぀の蚀葉は簡単で迅速です。 原子戊争の堎合の倧きなラむブラリはなく、必芁に応じお新しいものがすべお远加されたす。 システムの䞀般的なロゞックは長幎にわたっお改善および掗緎されおいるため、システムでは機胜を分岐および倉曎する䜙裕があり、コヌドを理解しやすく、CMSを簡単に開発できたす。 これはどのように達成されたすか いく぀かのヒントを䜜成したした。



私たちのシステムは、高速で最適化されたシステムのタむトルを繰り返し獲埗しおいたす。 研究に関するコメントでは、そのような結果がどのように達成されるかに぀いおの蚘事を曞くこずを玄束したした。 そしお、そのような蚘事を他のどこで公開するのでしょうか



Diafan.CMSに基づいお実際の䟋がレビュヌされおいるずいう事実にもかかわらず、以䞋のヒントは、サむト、個々のモゞュヌル、モバむルアプリケヌション、およびネットワヌクプログラムのWeb開発者にずっお有甚です。



1.ニヌズに応じおのみアプリケヌションをスケヌリングしたす。



シンプルから耇雑に移行したす。



プロゞェクトにSMS通知が必芁だずしたしょう。 SMS送信コヌドは数行で非垞にシンプルです。電話の怜蚌ずSMS送信サヌバヌぞのGETリク゚ストだけです。すぐに統合しおください。



たずえば、Diafan.CMSが泚文のために管理者ぞのSMS通知を必芁ずした堎合、泚文を圢成する関数のShopモゞュヌルにこの単玔なコヌドを盎接配眮したした。



次に、「フィヌドバック」および「ニュヌスレタヌ」モゞュヌルでSMS通知が必芁でした。 次に、別のファむルinclude / sms.phpのグロヌバル関数ずしおこの機胜を削陀し、次の圢匏でさたざたなモゞュヌルで静かに䜿甚したした。



include_once('includes/sms.php'); Sms::send($message, $to);
      
      





SMS通知を蚭定ずむンタヌフェむスで補完する必芁がある堎合、この機胜を別のモゞュヌルに移行したした。



たた、異なるバック゚ンドを接続する機胜が必芁な堎合、たずえば、異なるSMSオペレヌタヌず連携する必芁がある堎合は、モゞュヌルでこれを実行できたす。システムの䞀般的な構造ではこれが可胜です。



䞀番䞋の行は、最初の段階で新しい機胜を操䜜するための耇雑なラむブラリを開発する必芁がないこず、サむト管理者を混乱させ、ドキュメントの束を曞く必芁がある100,500の蚭定をする必芁がないこずです。 そしお、それは必芁ないかもしれたせん。 この段階で必芁なこずだけを行うこずをお勧めしたす。



システムに「コヌド-プラグむン関数-プラグむン」ずいう明確な階局がある堎合、これは雪だるた匏に぀ながりたせん。 アプリケヌションは、開発のあらゆる段階でシンプルか぀理解しやすいたたです。



開発の珟圚の段階で䜿甚されおいない䞍芁なコヌドを拒吊するず、1石で2矜の鳥を殺すこずができたす。





さらに、このアプロヌチは別の機胜に私たちを導いた。 倖郚コヌド、プラグむン、ラむブラリはほずんど䜿甚したせん。 「自転車」゚ラヌにもかかわらず、巚倧なサヌドパヌティラむブラリを含めるよりも、タスク甚に1぀の関数を蚘述する方が良いず考えおいたす。



2. URL凊理に泚意しおください



リンクのサヌバヌ解析は、サむトのすべおのペヌゞが通過するボトルネックです。 この堎所をサヌバヌにずっおできるだけ簡単にするようにしおください。



ほずんどの堎合、サむトペヌゞのアドレスナビゲヌションでは、サヌバヌのsite.ru/?PAGE=34の圢匏のサヌバヌアドレスの代わりに、サむトの各ペヌゞに文字列に適した矎しいアドレスがある堎合、いわゆる「CNC」人間が読めるURLが䜿甚されたす。 たずえば、site.ru / o_kompanii /で「䌚瀟に぀いお」ペヌゞが開きたす。 ここで、「o_kompanii」は、site.ru /url = o_kompaniiで解釈される文字列CNCです。これにより、CMSはデヌタベヌスでo_kompaniiずいう名前のペヌゞを怜玢し、そのコンテンツをサむトに衚瀺したす。 PAGE = 34で芁求するかのように。 ただし、ペヌゞの文字列名に加えお、䞀郚のパラメヌタヌはアドレスバヌを介しお枡すこずができ、倚くのパラメヌタヌが存圚する堎合がありたす。 このようなCNCの分析は非垞に困難です。



Diafan.CMSには、リンクを構築するためのテンプレヌトが1぀だけありたす/文字列CNC /数倀パラメヌタヌ3 /別の数倀パラメヌタヌ25 / 3、25-これらはパラメヌタヌの倀です。 ぀たり URLに数倀パラメヌタヌがある堎合、倉数に盎面しおいるこずを意味したす。いずれにしおも、これは最も䞀般的な構造です。



すぐにすべおの数倀パラメヌタヌを砎棄し、䜕かが残っおいる堎合は、デヌタベヌス内の文字列CNCずそれに察応するペヌゞを確認したす。 CNCでペヌゞが芋぀からない堎合は、1぀のパラメヌタヌをCNCに远加し始め、デヌタベヌスを再床調べたす。 はい、そのようなアルゎリズムはいく぀かの远加のSQLク゚リで構成されおいたすが、そのような特別なペヌゞたたは404ペヌゞにのみ䜿甚されたす。 それは、残りのすべおのおよびそれらのほずんどのペヌゞのベヌスをロヌドしたせん。



site.ru/?url=page:13&m=3&m2=25など、$ _GETデヌタを含むいリンクのみがこれよりも簡単です。



3.必芁な堎合にのみ機胜を実行する



サむトのペヌゞを開始するずきは、たず必芁な機胜のみをダりンロヌドしたす。99のケヌスで䜿甚されたす。 必芁な堎合にのみ、他のすべおを実行したす。



たずえば、評䟡をDiafan.CMSの補品に接続する必芁がある堎合、倉数$ this-> diafan-> _ ratingに倉曎するだけで、「評䟡」モゞュヌルの接続郚分党䜓が返されたす。 疑䌌倉数$ this-> diafan _ ***ぞの最初のアクセス以来、芁求されたモゞュヌルの存圚がチェックされ、クラスぞの正しい接続がクラスのむンスタンスずしお実行されたす。 䜿甚するず䟿利であり、スクリプト実行の珟圚の瞬間に䜙分な機胜を遮断したす。 ペヌゞの評䟡が䞍芁な堎合、たったく開始されたせん。



4.远加の負荷を䜜成する機胜、オプションで接続



远加機胜をすべおのモゞュヌルにグロヌバルに接続せず、オプションで有効にする機䌚を䞎えたす。

たずえば、コメントが䜿甚されるモゞュヌルでは、Diafan.CMSには「コメントの接続」オプションがありたす。 これは、補品に関するコメントが必芁であるがニュヌスでは䞍芁な状況を陀倖し、りェブマスタヌは単にニュヌステンプレヌトのコメント出力を非衚瀺にしたすが、CMSはSQLク゚リの実行、ニュヌスに関するコメントの怜玢、および必芁なすべおのデヌタの生成を続けたす。 蚀い換えれば、無駄なサヌバヌリ゜ヌスの無駄遣いです。



サヌバヌリ゜ヌスを最小限に䜿甚する他の機胜にも同じこずが圓おはたりたす。 ヒットカりンタヌ、ニュヌスの評䟡、メニュヌ項目の画像は必芁ありたせんか 蚭定ぞの接続を取埗し、デフォルトで切断したす。 これにより、リ゜ヌスが節玄されたす。



異なるナヌザヌゲスト、ナヌザヌ、卞売業者などのサむトのさたざたな特定の玠材に察するアクセス制限を柔軟に構成する必芁がある堎合、「アクセス暩」などの隠し蚭定にも同じこずが圓おはたりたす。远加



...珟圚のナヌザヌが芁求されたマテリアルにアクセスできるかどうかを確認するために、 a.element_id = 'id_material' ANDe.access = 'yes' AND a.role = 'role_current_user'ずしお 、 LEFT JOINアクセスしたす 。



そしお、すべおのナヌザヌがすべおのニュヌスを芋お、これらの状況がはるかに倚い堎合、なぜこの負荷が必芁なのでしょうか このLEFT JOINをオプションでSQLク゚リに远加するこずは理にかなっおいたす。 Diafan.CMSでは、この蚭定のオン/オフは管理者の参加なしで自動的に行われたす。 ぀たり、䞀郚のマテリアルでアクセスを制限する必芁がある堎合、チュヌニングずデヌタベヌスク゚リが耇雑であるこずに泚意するだけで十分です。 そうでない堎合、芁求は単玔です。



5.デヌタベヌスク゚リの数を最小限に抑える



準備機胜を䜿甚したす。



あるモゞュヌルの機胜が別のモゞュヌルで䜿甚されるこずがありたす。 ストアモゞュヌルには10個の補品があり、画像モゞュヌルの各画像があるず想像しおください。 初心者が犯す最も䞀般的な間違いは、出力サむクルで画像テヌブルに远加のリク゚ストが行われた堎合です。



 $rows = SELECT * FROM shop; //  foreach ($rows as $row) { echo "".$row['id']; //    $img = SELECT * FROM img WHERE shopid=$row['id']; //     foreach ($img) { echo "  ".$img["link"]; //     } }
      
      





*ここず以䞋で、コヌドは条件付きであり、アルゎリズムの明確さず意味の䌝達のためです。



したがっお、1 + 10 = 11のSQLサヌバヌぞの個別のSELECTク゚リが取埗されたす。 ただし、商品をリク゚ストし、受け取った商品のすべおのIDを芚えおから、SQLク゚リを1぀だけ䜜成するのが最善ですすべおの商品のすべおの画像を䞀床に遞択したす。 11ではなく、2぀のSELECTク゚リのみを取埗したす。



 $rows = SELECT * FROM shop; //  foreach ($rows as $row) { $goods[] = $row['id']; //     } $img = SELECT * FROM img WHERE shopid IN implode($goods[]); //     foreach ($img) { $images[] = $img['link']; //     } foreach ($goods[]) { echo "".$goods[]; //    echo "  ".$images[$goods[id]]; //    }
      
      





しかし、ここでの問題は、ルヌプのロゞックに違反し、コヌドが䞍快になるこずです。 䜿いやすく、サヌバヌに最適な゚レガントな゜リュヌションである準備機胜を芋぀けるこずができたした。 コヌドは次のずおりです。



 $rows = SELECT * FROM shop; //  foreach($rows as $row) { $this->diafan->_images->prepare($row['id'], 'shop'); //  } foreach($rows as $row) { $images[$id] = $this->diafan->_images->get($row['id'], 'shop'); //    get echo "".$row['id']; //  echo "  ".$images['id']; //    }
      
      





prepare関数は、写真を取埗するすべおの芁玠を単玔に蚘憶したす。 たた、get関数の特性は、最初の呌び出しでSQLク゚リが実行され、結果も蚘憶されるこずです。 このルヌプからの他のすべおのget呌び出しは、初めお受信したデヌタで機胜したす。



したがっお、リンク構築のためのCNC芁求、タグ芁求、評䟡芁求など、あらゆる機胜に察しお行われおいたす。したがっお、Diafan.CMSでは、SQLサヌバヌぞの呌び出しは最小限です。



6.キャッシングを䜿甚する



キャッシュアルゎリズムを蚘述し、サヌバヌ偎のアルゎリズムを䜿甚したす。



オンラむンストアが萜ち着いおいお、新しい補品が远加されない堎合、毎回デヌタベヌスに連絡しお各顧客の補品のリストを䜜成するのはなぜですか SQLサヌバヌに䞀床アクセスし、ク゚リ結果をキャッシュフォルダヌ内のテキストファむルに保存しお、そこから取埗するだけで十分です。 リストに新しい補品が远加された堎合、たたは補品の゜ヌトされたリストなどの別のペヌゞが芁求された堎合、キャッシュファむルをリセットしお、デヌタベヌスを再床参照できたす。 ただし、キャッシュを曎新するために䞀床だけ。



サむトのすべおのペヌゞだけでなく、サむトのセクション、ブロック、リスト、カヌド、芁玠の䞡方をキャッシュできたす。 詳现



静的リ゜ヌスは動的リ゜ヌスよりもサヌバヌぞの負荷が1桁少ないこずを芚えおおくこずが重芁です。そのため、SQLずPHPむンタヌプリタヌの䜿甚はできるだけ少なくしおください。 デフォルトでは、Diafan.CMSはファむルキャッシュを䜿甚したすが、Memcacheを接続するこずもできたす。 デヌタのみをキャッシュしたす。 すべおのデザむンがキャッシュに入るわけではありたせん。 これにより、キャッシュの䞋のスペヌスを節玄でき、その結果、キャッシュをより高速に凊理できたす。



7.動的なデヌタ取埗を最小限に抑える



各ナヌザヌを埅぀よりも、サむト管理者を1回埅぀方が適切です。



たずえば、Diafan.CMSでは、1぀の補品が耇数の䟡栌を持぀こずができ、それぞれが異なる通貚でも割匕が蚭定されおいる堎合、割匕の柔軟なシステムがありたす。 各サむト蚪問者のサむトでの新しい䟡栌は蚈算したせん。 これは、サむトの管理郚分で割匕を蚭定するずきに行いたす。遞択した商品のすべおの異なる䟡栌オプションを怜蚎し、price_id蚘号の付いた別のshop_priceテヌブルに収集したす。 補品の元の䟡栌はid = price_idずしお定矩されたす。 id <> price_idの堎合、これは割匕たたはサむトのメむン通貚での䟡栌の倉動です。 たた、この衚は、この䟡栌が特定のナヌザヌグルヌプに蚭定されおいる堎合に、誰に察しおすぐに衚瀺されるかを瀺したす。



はい、倚くの商品がある堎合、割匕を远加たたは倉曎するずき、管理者は回転するホむヌルを芋ながら埅機したす。 しかし、サむトぞの蚪問者は埅぀必芁はありたせん。サむトに衚瀺するずき、怜玢、䞊べ替え、その他の容量のある操䜜を行うずき、システムは1぀のテヌブル、price_idから利甚可胜なすべおの䟡栌から最小のすべおを遞択するだけです。



8.テヌブルでDB正芏化ずむンデックスを䜿甚する



情報の耇雑な構造をさたざたな単玔なテヌブルに分散し、それらのむンデックスを䜿甚したす。 1぀の耇雑なINNER JOINを䜜成するよりも、2぀の単玔なク゚リを䜜成する方が有益です。



Diafan.CMSでは、基本的にすべおの隣接するテヌブルはほが同じ構造を持っおいたすid、element_id、element_type、module_name。 それらの芁求は非垞に簡単です。

SELECT * FROM WHERE element_id = 3 AND module_name = 'shop' AND element_type = 'element'

たた、指定されたすべおのフィヌルドには、むンデックスが必芁です。



おわりに



ご芧の堎合、新しいものは報告されおおらず、ほがすべおのポむントが明らかです。 ただし、倚くの人は理論を知っおいたすが、実際に垞に䜿甚されるわけではありたせん。 私たちのヒントが、あなたが集たっお怠け者になるのを止め、矎しく、高速で最適化されたアプリケヌションを䜜成するのに圹立぀こずを願っおいたす。



All Articles