优化ldap研究的执行时间

时间:2017-06-29 14:36:50

标签: php ldap

我为社交媒体制作了一个人的目录,其中包括社交媒体等图片。 LDAP中有1000多个用户,他需要很长时间才能完成所有用户在屏幕上的研究。

正是这部分需要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个用户是不可能的..

这不是服务器方面的问题,因为当我使用完全相同的过滤器执行此研究时,使用Apache Directory Studio的时间不到1秒......

1 个答案:

答案 0 :(得分:0)

正如@LudovicPoitou在评论中所说,你遍历目录中的所有用户。

对于您在Web应用程序中显示的一个页面中的每个24位用户,您的请求都是整个目录。

我想你的问题是$pageSize等于24,所以你所做的就是检索目录的每个用户,每个请求有24个用户的页面。

然后,对于1000个条目,您会发出42个以上的请求来检索1000多个用户,以便在您的应用的每个页面上仅显示其中的24个。

您应该只通过所述1000个用户的页面请求所有这些用户一次,并使用完整的用户组成为分页客户端。

这是对页面结果使用的误解,它不是你想要结果0到24而下一个请求是结果25到49等的分页结果。 (至少在您使用php的Web应用程序配置中,因为您没有与您使用用户输入的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     | +---------------> |
      | <---------------+ |                   |
      +                   +                   +