我已經讀過,過早的優化是邪惡的根源。因爲它需要更多的時間,所以它會使代碼更復雜。即使不顯着提升性能,我是否應該始終減少數據庫查詢的數量?
有時會發生,你需要通過ID獲取一些項目。這是快速查詢。
然後在相同的請求中,您需要在另一個函數中再次使用此項目的信息。
只是再次調用查詢不好嗎?或者我需要重新使用抓取的對象,即使它可以節省僅僅幾毫秒,而最終用戶不會感覺到。除非許多用戶同時進行相同的查詢。
好吧,這裏將是一個例子:
function getItem()
{
$item = null;
if ($someCondition) {
$item = $this->repository->getById(1);
}
someFunction($item);
}
function someFunction($item)
{
if ($item == null) {
$item = $this->repository->getById(1);
}
doSomething($item);
}
所以someFunction我們增加一個檢查 - 附加邏輯知道該項目是牽強。在這個簡單的例子中,添加更多的邏輯沒有問題。
但是在現實世界的應用程序中,恰巧您需要添加更多邏輯來優化而不是第二次獲取該項目。
更多邏輯 - 更多時間來編寫和讀取代碼。
ORMs是不關心優化的例子 - 它們只是延遲加載相關項目,例如Doctrine。所以你作爲開發人員通過不寫入連接其他表的查詢來節省時間。
有些程序員說它醜陋的代碼,如果它可以避免相同的查詢兩次。
在某些情況下可能需要半小時或1小時進行優化。加起來,生產率可以因此降低。
我們應該如何處理這些情況?
它並不關於更多的數據。問題是 - 我是否查詢相同的數據,只是爲了提高生產力並減少代碼中的邏輯。 –
對於上述情況,性能會降低,而且需要高維護。 someFunction()必須對傳遞的對象起作用,即使它確實知道要在哪個項目上採取行動。這將清晰明確,責任明確。 –