2016-08-14 61 views
0

我對這個問題感到困惑。 Django開發時,如果我修改了py文件或靜態文件,內置服務器將重新加載。但是在PHP應用程序開發中,如果我修改了這些文件,Apache服務器不需要重新加載,修改後的內容將顯示在瀏覽器上。爲什麼WSGI服務器在修改時需要重新加載Python文件,但PHP不需要?

爲什麼?

+0

Apache讀取每個請求上的文件, – 2016-08-14 00:51:31

+0

這是服務應用程序的兩種不同方式。在Python的情況下 - 它是分離的獨立應用程序,運行在編譯狀態(我通常是一個Django服務器 - 一個Django項目)。 PHP(大多數情況下)使用更通用的方式,即時解釋腳本併爲每個腳本使用通用緩存。它可以服務於許多項目。這裏沒有關於Python和PHP的問題,它只有不同的發展歷史。 PHP起始於「網站頁面腳本語言」,Python最初設計爲通用語言,沒有現有語言的普遍缺點。恕我直言。 – Wizard

回答

1

當CGI是運行動態Web應用程序的最常見方式時,Django用於做同樣的事情。它會爲每個請求創建一個新的python進程,這將會動態加載所有文件。但是,雖然PHP針對這種使用情況進行了優化,並且啓動時間很短,但作爲通用語言的Python並非如此,並且存在一些相當嚴重的性能缺陷。 WSGI(和之前的FastCGI)通過在持久後臺進程中運行Python代碼來解決此性能問題。

因此,雖然WSGI提供了很多好處,但其中一個「缺點」是它只在進程(重新)啓動時加載代碼,因此您必須重新啓動進程以使所有更改生效。在開發中,這可以通過使用自動加載器(如Django的manage.py runserver命令中的那個)輕鬆解決。

在生產中,爲什麼要延遲重啓直到環境準備就緒有很多原因。例如,如果您引入包含遷移的代碼更改以添加數據庫字段,則在運行遷移之前,您的代碼的新版本將無法運行。在這種情況下,除非實際運行了所有必要的遷移,否則不希望新代碼運行。

相關問題