2016-08-14 6 views
0

私はこの質問について混乱しています。 Djangoの開発を行うときに、pyファイルまたは静的ファイルを変更すると、ビルドインサーバーがリロードされます。しかし、PHPアプリケーション開発では、ファイルを変更した場合、Apache Serverはリロードする必要はなく、変更されたコンテンツがブラウザに表示されます。WSGI Serverが修正されたのにPHPが必要ないのはなぜですか?

なぜですか?

+0

Apacheは各リクエストでファイルを読み込みます。 –

+0

アプリケーションを提供する方法は2通りあります。 Pythonの場合、コンパイルされた状態で実行されるスタンドアロンのアプリケーションです(通常、1つのdjangoサーバーと1つのdjangoプロジェクト)。 PHPは(たいていの場合)より一般的な方法を使用しています。そのスクリプトを即座に解釈し、すべてのスクリプトに一般的なキャッシュを使用します。それは多くのプロジェクトに役立つことができます。ここではPythonとPHPの間に疑問はありませんが、開発の歴史はまったく異なります。 PHPは "website-page-script language"として始まりますが、Pythonはもともと一般的な目的の言語として設計されており、既存の言語の共通の欠点はありません。私見では。 – Wizard

答えて

1

Djangoは、CGIが動的Webアプリケーションを実行する最も一般的な方法であったときに、同じことをやっていました。すべてのファイルを即時にロードする、各リクエストに新しいPythonプロセスを作成します。しかし、PHPは、このようなユースケースのために高速起動時間で最適化されていますが、汎用言語としてのPythonはそうではありません。かなりのパフォーマンス上の欠点があります。 WSGI(およびその前のFastCGI)は、永続的なバックグラウンドプロセスでPythonコードを実行することによって、このパフォーマンスの問題を解決します。

WSGIは多くのメリットをもたらしますが、「欠点」の1つは、プロセスが(再)開始されたときにのみコードを読み込むため、変更を有効にするためにプロセスを再起動する必要があることです。開発中、これはDjangoのmanage.py runserverコマンドのようなオートローダを使うことで簡単に解決できます。

環境の準備が整うまで、再起動を延期する理由は数多くあります。たとえば、移行を含むコードの変更をデータベースのフィールドに追加する場合、移行を実行する前に新しいバージョンのコードを実行することはできません。このような場合、必要なすべての移行を実際に実行するまで、新しいコードを実行する必要はありません。

関連する問題