2017-08-19 34 views
0

我已經讀過,過早的優化是邪惡的根源。因爲它需要更多的時間,所以它會使代碼更復雜。即使不顯着提升性能,我是否應該始終減少數據庫查詢的數量?

有時會發生,你需要通過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小時進行優化。加起來,生產率可以因此降低。

我們應該如何處理這些情況?

回答

0

我認爲必須按照要求進行調用。 儘可能多地查詢數據。查詢或獲取更多數據將不必要地消耗更多的系統資源和網絡帶寬。 另一方面,多次往返也會給系統帶來負擔。 想一想尋呼。搜索結果的數量不會很大,並且給每個結果不僅耗時而且對用戶來說不必要或多餘。用戶甚至可能不看每個結果。 因此,找出需要什麼數據,相應地定製命令查詢。 一些像卡夫卡這樣的系統開始支持請求批處理,以獲得更高的性能

+0

它並不關於更多的數據。問題是 - 我是否查詢相同的數據,只是爲了提高生產力並減少代碼中的邏輯。 –

+0

對於上述情況,性能會降低,而且需要高維護。 someFunction()必須對傳遞的對象起作用,即使它確實知道要在哪個項目上採取行動。這將清晰明確,責任明確。 –

相關問題