2009-06-03 49 views
3

假設PHP版本> = 5.2,這是一種用於管理一個更好的解決方案包括:哪個更好:require_once?或者如果(!defined('FOOBAR'))需要?或者完全不同的東西?

require_once DEFPATH . 'config.inc.php'; 

if (!defined('FOOBAR')) require DEFPATH . 'config.inc.php'; 

或完全不同的東西?

網站不使用前端控制器或自動加載器。需要包含的典型文件數量是3 - 8。

我聽說在這裏和其他地方,require_once增加了開銷,並且不適合緩存。但是我也聽說在更高版本的PHP中,少數require_once語句在實踐中可以使用。

還必須有一些開銷與檢查是否有東西被定義有關,但這可能不是一個問題。

總的來說,哪種更好的做法,爲什麼?

回答

3

是的,require_once()帶有CPU和內存開銷,但對性能沒有任何重要影響。事實上,這是一個非常高效的操作,因爲PHP只是執行一次散列表查找來決定該文件是否已被解析。不要給自己帶來任何不必要的麻煩,像你自己定義的('FOOBAR')這樣的黑客,因爲它只是用較少的優雅做同樣的事情。

在PHP請求期間花費的時間是文件路徑查找,然後是後續解析步驟。運行時確定您是否已經解析過文件所需的資源量可以忽略不計。

有一些事情你可以做,使您的要求運行速度更快:在

  • 避免unecessarily長搜索路徑包括()和require()
  • 使用絕對包含路徑是可能的
  • 包括只在需要
  • 緩存產量大片段的東西
  • 緩存複雜的查詢結果
  • 編寫簡潔的合作德,卸載不常用的功能,包括按需源文件

如果您使用的是代碼緩存或某種運行時間優化的閱讀手冊 - 他們有實際上會害了不同的策略,業績或根據您的代碼引入錯誤。

一個最後的建議:當心過早的優化!用戶端在服務器上進行0到50毫秒的請求實際上是無法區分的。

2

我會在你的情況下使用require_once。即使它增加開銷,你也可以忽略它,特別是當你只需要包含最多8個文件時。 require_once是一個很少出錯,更'乾淨'...

0

在你的例子中,檢查是否定義FOOBAR會更好。但那是因爲你的例子沒有指定包含文件的完整路徑。

除非您特別想使用相對路徑,否則您應該始終指定幾乎任何東西的完整路徑。否則,PHP需要在各種搜索路徑目錄中搜索文件。如果碰巧在最後一個搜索路徑目錄中,那有點花銷。

我總是創建一個數組,其中包含從我加載文件的目錄的完整路徑,然後我在我正在加載的文件上添加適當的路徑。

+0

@ brent-baisley爲了清楚起見,我將對問題進行編輯,指出使用定義的路徑。如果情況如此,你的答案是否仍然有效?謝謝。 – PartialOrder 2009-06-03 13:35:24

相關問題