ホームページ  >  記事  >  バックエンド開発  >  PHP 静的変数をキャッシュとして使用するチュートリアルの例

PHP 静的変数をキャッシュとして使用するチュートリアルの例

WBOY
WBOYオリジナル
2016-07-25 08:52:41858ブラウズ
  1. /**

  2. * ユーザーのパスワードリセットリクエストの受信者
  3. */
  4. function requestResetPassword() {
  5. //ユーザーが存在するかどうかを確認します
  6. if( !checkUserExists( $_GET['userid'] ) ) {
  7. exit ( '申し訳ありませんが、ユーザーは存在しません。ユーザー アカウントを確認してください。');
  8. }
  9. resetPassword( $_GET['userid'] );
  10. //最後にユーザーにメールを送信します
  11. sendEmail( $_GET[' userid'], 'パスワードのリセットに成功しました', '新しいパスワードは xxxx です' );
  12. exit('新しいパスワードがメールに送信されました。');
  13. }

  14. /* *

  15. * ユーザーがパスワードをリセットできるようにします
  16. */
  17. function restartPassword( $userid ) {
  18. //ユーザーが存在するかどうかを確認します
  19. if( !checkUserExists( $userid ) ) {
  20. return false;
  21. }

  22. / /ユーザーパスワードのリセット操作

  23. //短い...
  24. return true;
  25. }

  26. /**

  27. * ユーザーにメールを送信します
  28. */
  29. function sendEmail( $userid, $title, $content ) {
  30. / /ユーザーが存在するか確認
  31. if( !checkUserExists( $userid ) ) {
  32. return false;
  33. }

  34. //メール送信操作

  35. //省略…
  36. return true;
  37. }

  38. /**

  39. * ユーザーが存在するかどうかを確認します
  40. */
  41. function checkUserExists( $userid ) {
  42. $user = getUserInfo( $userid );
  43. return !empty( $user );
  44. }
  45. /**

  46. * ユーザーのデータを取得します
  47. */
  48. function getUserInfo( $userid ) {
  49. //データベースをクエリしてデータを返すために使用されるクエリ関数があるとします
  50. $ user = query( "SELECT * FROM `user` WHERE `uid`=" . intval( $userid ) );
  51. return is_array( $user ) ;
  52. }

コードをコピー

問題: これら 3 つの関数はすべて、ユーザーが存在しないことを確認するために checkUserExists 関数を同時に使用するため、追加のオーバーヘッドが発生します。 3つの中のcheckUserExistsを削除したい場合は可能と思われます。ただし、後から一部の関数がresetPasswordまたはsendEmailを呼び出し、ユーザーが存在しない場合、システムでエラーが発生する可能性があります。

もう 1 つの解決策は、resetPassword のロジックを requestResetPassword に書き込み、少し後に sendEmail のロジックも同様に書き込むことです。このようにして、関数呼び出しが減り、データベース クエリが 1 回になり、パフォーマンスが向上します。ただし、パスワードのリセットと電子メールの送信の機能は再利用できず、単一責任の原則に違反し、コードの複雑さも増加します。

ただし、関数の分離と再利用性は非常に優れているため、実際のパフォーマンスに影響がある場合は、キャッシュの使用を検討してデータベース クエリを減らし、共有の checkUserExists 関数を変更することを検討できます。

  1. /**

  2. * ユーザーが存在するかどうかを確認します
  3. */
  4. function checkUserExists( $userid ) {
  5. //ユーザーのチェック結果を記録するキャッシュを追加します
  6. static $cache = array() < ;/p>
  7. //現在のユーザーが一度チェックしたかどうかを確認します

  8. if( isset( $cache[ $userid ] ) ) {
  9. return $cache[ $userid ];
  10. }

    $user = getUserInfo( $userid );

  11. // 結果をキャッシュに記録します
  12. $cache[ $userid ] = !empty( $user );

  13. [ $userid ];

  14. }

コードをコピーします
同じ方法を使用して getUserInfo 関数を変更することもできます。

コードの再利用性が高まると、パフォーマンスを向上させるのが非常に簡単になり、パフォーマンスのボトルネックを見つけて変更するのも簡単になります。

たとえば、データを走査するとき、再利用のために走査を関数にカプセル化し、それを複数回使用することがあります。 これらの費用は予想されたほどプロジェクトに大きな影響を与えず、最小限で済みました。 したがって、パフォーマンスを少しでも無駄にすることにこだわるのではなく、コードの再利用性と保守性を向上させることに重点を置くことができます。 実際のパフォーマンスが要件を満たしていない場合は、ハードウェア構成を増やすことも検討できます。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。