2015-12-15 81 views
2

我正在使用Smarty處理舊的舊版PHP應用程序。我不熟悉Smarty。因此我的問題。Smarty是否使用APC(或其他緩存解決方案)?

我知道Smarty模板已經編譯到PHP中。然後,他們被調用一些數據來生成輸出。生成的PHP將作爲此過程的一部分進行編譯。

APC(和其他緩存解決方案)避免在用戶請求之間重新編譯PHP。 i)如果我用一個原始模板調用Smarty,它會先將它編譯成PHP,然後再編譯成操作碼,對不對?

二)如果一個高速緩存系統,如APC在我的PHP應用程序已啓用,如果模板已經被調用(即,在過去的編譯):

一)將Smarty的足夠聰明,不重新編譯每個用戶請求將模板導入PHP?

b)編譯模板的PHP的操作碼是否會通過APC重新使用?

爲什麼我會問這些問題?這個遺留應用程序早已實施(2010年之前的一些部分)。他們已經實現了所有Smarty模板的預編譯系統,並將它們複製到應用程序的某個目錄中,以直接調用生成的PHP代碼。

我相信它可能在性能方面有意義,但現在,由於操作碼緩存解決方案仍然可用,它仍然有意義嗎?我們可以擺脫這種預編譯過程嗎?

回答

2

Smarty在首次使用時將所有.tpl文件編譯爲PHP,並將結果放入已配置的緩存目錄中。這些PHP文件就像其他任何PHP文件那樣是included,所以沒有什麼特殊的APC/OpCache需要爲它們調用。

在後續請求中,Smarty將檢查底層.tpl文件的時間戳是否發生了變化,如果有,則重新編譯;否則,它將只保留現有的PHP文件。此行爲can be turned off, e.g. on a production server where files should not be edited(此設置was available in Smarty 2 as well,這不算什麼新鮮事)。

我不確定你所描述的手動編譯過程是如何實現的;從您的描述中聽起來似乎只是複製了Smarty已經做的事情,但是通過「加熱緩存」對每個模板上的第一次點擊進行小幅提升。它當然與APC/OpCache的存在與否無關 - 這不會改變Smarty多久將東西編譯成PHP的頻率,也不會改變PHP將PHP編譯成「操作碼」的頻率。

有可能是你有沒有發現/描述使用一些其他的把戲,或者也可能是系統的程序員以前根本不知道他們在做什麼,過複雜的事情。

+0

好吧,所以我猜PHP會像對待任何其他PHP文件一樣對待生成的Smarty PHP。正確? – JVerstry

+1

是的,PHP引擎(以及它的APC或OpCache擴展)不會知道Smarty寫這個文件,而不是你或者打印機上的一千個猴子。 – IMSoP

相關問題