もしそうなら、利点は何ですか?(Webサーバーの再起動を回避することを確認してください)。しかし、それはパフォーマンスのボトルネックではありませんか? 本番用に、web2py をバイトコード スキップ インタプリタ ステージ (キャッシング) から直接実行することは可能ですか (最初のリクエストを除く)?
2 に答える
web2py では、デフォルトで、モデル、ビュー、コントローラー内のすべてのコード (web2py コードではなく、モデル、ビュー、コントローラーによってインポートされたモジュール内のコードではありません) がすべてのリクエストで解釈されます。これにより、サード パーティの Web サーバー (Apache など) を使用しても、再起動せずにすぐに反映されたコードの変更を確認できます。PHP も同じように動作します。コードを解析する時間はコードを実行する時間よりも短いため、パフォーマンスの低下は無視できます。
いずれにせよ、管理者インターフェースには、コードをバイトコード コンパイルし、アクションごとにビュー階層 (拡張ビューとインクルード ビュー) を 1 つのファイルにまとめて、パフォーマンス ペナルティを取り除く「コンパイル」ボタンがあります。また、ソースを公開せずにコンパイルされたコード バイトコードを配布することもできます。ライセンスはそれを許可します。
特に web2py については知りませんが、他のほとんどの Python フレームワークと同様に WSGI 経由で実行されます。これは、コードがプロセスの開始時にのみ解釈され、それ以外の場合はメモリに保持されることを意味します。プロセスは Web サーバー自体によって動的に開始および強制終了されますが、通常は複数の要求に対して持続します。
いずれにせよ、Python インタープリターは通常、.pyc
コードが最初に読み取られるときに、バイトコード ファイル を作成します。これは、他の場所と同じように Web サーバー環境で機能します。
ただし、最後に、コードの解析は特にボトルネックではないと一般的に考えられています。バイトコードへの変換は非常に高速です。Web アプリケーションでは、ボトルネックはほぼ確実に別の場所 (おそらくデータベースへの接続) にあります。