2017-06-29 74 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