「セッションロック (Dev docs)」の版間の差分

提供:MoodleDocs
移動先:案内検索
編集の要約なし
編集の要約なし
5行目: 5行目:


== セッションロック問題のデバッグ  ==
== セッションロック問題のデバッグ  ==
もし「遅いページ」があり、あなたがそれをプロファイリングして、当該ページがロックの解放を待っているのだと判明した場合、これは全体のパフォーマンスを向上させるために簡単に修正できる可能性があります。
もし「遅いページ」があり、あなたがそれをプロファイリングして、当該ページがロックの解放待ちだと判明した場合、これは全体のパフォーマンスを向上させるために以下のように簡単に修正できる可能性があります。
  $CFG->debugsessionlock = 5; // 秒
  $CFG->debugsessionlock = 5; // 秒
セッションがN秒以上ロックされた場合、ロックを保持している他のページの詳細に関してデバッグコールが実行されます。
セッションがN秒以上ロックされた場合、ロックを保持している他のページの詳細に関してデバッグコールが実行されます。
== セッションロック解除 ==
== セッションロック解除 ==
■■■■■■■■■■■■■■■■■■■■■
デフォルトではcoreは$SESSIONオブジェクトを変異させる必要があるかもしれないと想定されているため、ページが終了してシャットダウンハンドラがセッションロックを解放するまでセッションロックを保持することになります。
デフォルトではcoreは$SESSIONオブジェクトを変異させる必要があるかもしれないと想定されているため、ページが終了してシャットダウンハンドラがセッションロックを解放するまでセッションロックを保持することになります。
もし、あなたが長時間実行される可能性のあるページで作業している場合、セッションを変異させる可能性のある早期に実行されるロジックと長時間実行されるprocessinコードとを明確に分離して、セッションロックを解除する必要があります。
もし、あなたが長時間実行される可能性のあるページで作業している場合、セッションを変異させる可能性のある早期に実行されるロジックと長時間実行されるprocessinコードとを明確に分離して、セッションロックを解除する必要があります。
30行目: 31行目:
         '''<nowiki>'readonlysession' => true, // セッションは修正しません。</nowiki>'''
         '''<nowiki>'readonlysession' => true, // セッションは修正しません。</nowiki>'''
     ),  
     ),  
== セッションなし No session at all ==
== セッションなし ==
If your script doesn't actually need $SESSION in the first place then save even more processing and locks by declaring:
もし、あなたのスクリプトに$SESSIONが必要ではない場合、宣言でより多くの処理およびロックを節約できます:
もし、あなたのスクリプトに$SESSIONが必要ない場合、宣言でより多くの処理およびロックを節約できます:
  define('NO_MOODLE_COOKIES', true);
  define('NO_MOODLE_COOKIES', true);
== 設定不要 No config is needed ==
== 設定不要 ==
Going to the absolute extreme, if you do not even need the full moodle bootstrap to run then you can skip it via:
極端な話、あなたがmoodle bootstrapの完全な実行を必要としない場合、以下でスキップできます:
極端な話、あなたがmoodle bootstrapの完全な実行を必要としない場合、以下でスキップできます:
  define('ABORT_AFTER_CONFIG', true);
  define('ABORT_AFTER_CONFIG', true);


[[en:Development:Session_locks]]
[[en:Development:Session_locks]]

2023年6月3日 (土) 15:17時点における版

作成中です - Mitsuhiro Yoshida (トーク)

あなたが通常のmoodleページを作成してconfig.phpをインクルードした場合、デフォルトで大量のmoodleブートストラップが実行された後、$SESSIONグローバルが設定されます。 これは安全な出発点ですが、より高性能なコードを書きたい場合、可能な限り、セッションロックを減らすか排除した方が良いでしょう。

セッションロック問題のデバッグ

もし「遅いページ」があり、あなたがそれをプロファイリングして、当該ページがロックの解放待ちだと判明した場合、これは全体のパフォーマンスを向上させるために以下のように簡単に修正できる可能性があります。

$CFG->debugsessionlock = 5; // 秒

セッションがN秒以上ロックされた場合、ロックを保持している他のページの詳細に関してデバッグコールが実行されます。

セッションロック解除

■■■■■■■■■■■■■■■■■■■■■ デフォルトではcoreは$SESSIONオブジェクトを変異させる必要があるかもしれないと想定されているため、ページが終了してシャットダウンハンドラがセッションロックを解放するまでセッションロックを保持することになります。 もし、あなたが長時間実行される可能性のあるページで作業している場合、セッションを変異させる可能性のある早期に実行されるロジックと長時間実行されるprocessinコードとを明確に分離して、セッションロックを解除する必要があります。

\core\session\manager::write_close();

ページ内のリードオンリーセッション

この機能を使用するにはREADONLYセッションが有効にされている必要があり、同時にそれをサポートするコードも必要です。すべてのセッションではありません。

もし、あなたがセッションを決して変更せずに、それでも読めるようにする必要があると事前にわかっている場合、ページを読み取り専用を宣言できます。これはページが他のhttpリクエストでセッションをブロックしないことを意味します。

define('READ_ONLY_SESSION', true);

ウェブサービスの読み取り専用セッション

ウェブサービスでも同じことが可能です。あなたがウェブサービスを宣言する場合、セッションロックを必要としないよう指定できます:

    'core_message_get_unread_conversations_count' => array(
        'classname' => 'core_message_external',
        'methodname' => 'get_unread_conversations_count',
        'classpath' => 'message/externallib.php',
        'description' => '指定したユーザの未読会話数を取得します。',
        'type' => 'read',
        'ajax' => true,
        'services' => array(MOODLE_OFFICIAL_MOBILE_SERVICE),
        'readonlysession' => true, // セッションは修正しません。
    ), 

セッションなし

もし、あなたのスクリプトに$SESSIONが必要ではない場合、宣言でより多くの処理およびロックを節約できます:

define('NO_MOODLE_COOKIES', true);

設定不要

極端な話、あなたがmoodle bootstrapの完全な実行を必要としない場合、以下でスキップできます:

define('ABORT_AFTER_CONFIG', true);