2017-06-29 110 views
0

我爲圖像等社交媒體生成社交人的目錄。在LDAP中有1000多個用戶,他需要很長時間才能完成允許所有用戶在屏幕上進行研究的研究。優化ldap研究的執行時間

這正是這部分內搭秒4和7之間進行的研究:

do { 
      ldap_control_paged_result($ldap, $pageSize, true, $cookie); 
      $sr=ldap_search($ldap, $dn, $filter, $justthese); 
      $info = ldap_get_entries($ldap, $sr); 
      foreach ($info as $in) { 
       if(isset($in[$GLOBALS['nom']][0])){ 
       $array[0][$inc]=$in[$GLOBALS['nom']][0]; 
       $array[1][$inc]=$in[$GLOBALS['prenom']][0]; 
       $inc++; 
      } 
      } 
      $test++; 

      ldap_control_paged_result_response($ldap, $sr, $cookie); 
    } while($cookie !== null && $cookie != ''); 

我不知道如何來優化它,5秒鐘生成其中有24個用戶的限制頁每頁是不可能的..

,因爲當我完全一樣的過濾器,相同的DN使用Apache目錄工作室執行這個研究需要不到1秒這不是一個服務器端的問題...

+0

在你的代碼中,你遍歷頁面來獲取所有用戶。爲什麼不只是獲得一個頁面並顯示它,然後在需要更改頁面時加載下一個用戶。 –

回答

0

由於@LudovicPoitou在他的評論中說,你循環通過目錄中的所有用戶。

對於每頁中的24個用戶,您在Web應用程序中顯示您的請求的整個目錄。

我想你的問題是$pageSize等於24,所以你要做的就是檢索你的目錄的每個用戶,每個請求包含24個用戶頁面。

然後,對於1000個條目,您可以創建42個以上的請求,以檢索1000多個用戶,以在您的應用的每個頁面上僅顯示24個用戶。

您應該只請求所有這些用戶通過上述1000個用戶的頁面一次,並將分頁客戶端與全套用戶進行分頁。

這是對使用頁面結果的誤解,它不是你想要結果0到24的分頁結果,下一個請求是結果25到49等。 (至少不是在你的web應用程序配置中PHP的,因爲你不符合,你做的對用戶輸入的cookie中的下一個搜索的目錄)

編輯狀態連接:

爲了說明我的意思not stateful。當PHP腳本結束其執行時,每個變量都會被銷燬,從而連接到LDAP服務器。然後,附加到分頁控件的cookie不再可用,因爲它與所做的搜索請求鏈接。比圖如下:

STATEFUL 


    CLIENT    BACKEND    LDAP 
     +     +     + 
     | REQUEST page1 |     | 
     | +---------------> | CONNECT + BIND | 
     |     | +--------+------> | 
     |     | SEARCH PAGE 1 | 
     |     | +---------------> | 
     |     |  RESPONSE  | 
     |  RESPONSE  | <---------------+ | 
     | <---------------+ |     | 
     |     |     | 
     | REQUEST page 2 |     | 
     | +---------------> | SEARCH PAGE 2 | 
     |     | +---------------> | 
     |     |  RESPONSE  | 
     |  RESPONSE  | <---------------+ | 
     | <---------------+ |     | 
     |     | DISCONNECT  | 
     |     | +---------------> | 
     |     |     | 
     |     |     | 
     +     +     + 


STATELESS 


    CLIENT    PHP     LDAP 
     +     +     + 
     | REQUEST page1 |     | 
     | +---------------> | CONNECT + BIND | 
     |     | +--------+------> | 
     |     | SEARCH ALL PAGES | 
     |     | +---------------> | 
     |     |  RESPONSE  | 
     |     | <---------------+ | 
     |     | DISCONNECT  | 
     |  RESPONSE  | +---------------> | 
     | <---------------+ |     | 
     +     +     + 
+0

是的,但要做到這一點,我需要一個偏移...我不知道如何使用這與偏移量...我明白這個問題,但如何避免搜索所有,而不僅僅是24用戶每次我需要創建頁面...您希望我的分頁系統具備全部功能嗎? – Srithovic

+0

@Srithovic這不是一個偏移量的問題。你不能使用無狀態連接(如php和一個隱含的webapp)進行分頁搜索。這隻能在你的'do {} while'的每個循環由用戶輸入控制時纔有效,而不是由於仍然有條目要獲取。你應該做的是將每個用戶的條目作爲一個數據集返回給客戶端,並讓客戶端根據需要使用分頁來呈現這個數據集,但是不要在客戶端的每個頁面上重做這個請求 – Esteban

+0

@Srithovic如圖所示價值千言萬語,我提出了一個架構來解釋在您的PHP代碼中發出請求時發生的情況。希望它現在更清晰 – Esteban