改善由节点js活动目录模块进行的findUsers查询的延迟

时间:2019-01-20 15:10:46

标签: node.js performance networking active-directory

从nodejs的活动目录中获取用户时,我遇到了高延迟。

我正在使用npm'activedirectry'中的节点库。 https://www.npmjs.com/package/activedirectory

用户数量相对不大,大约有1000个用户...

查询时间需要2到4秒。

“活动目录”库的功能findUsers提供的默认查询为(&(|(objectClass = user)(objectClass = person))(!(objectClass = computer))(!(objectClass = group )))

我在sAMAccountName字段上添加了一个附加过滤器。 sAMAccountName = * somePartOfName *

无论如何,添加或不添加查询的时间仍然很慢。

我没有Active Directory服务器的完整配置, 但是似乎同一网络上的其他平台与活动目录的工作速度更快,但它们与Java和.NET中的其他框架的工作速度一样。

如此高的延迟可能是什么原因?

谢谢

// ad is configured only with user, password, base dn and url

function findUsers(partOfsAMAccountName) {
    const additionalQuery = `sAMAccountName=*${partOfsAMAccountName}*`;

    return new Promise(resolve => {
        ad.findUsers(additionalQuery, false, (error, users) => {
            if(error) {
                console.error('%j', error);
            }

            resolve(users || []);
        })
    }
}

我打算做的是基于活动目录的用户名创建自动完成机制。

在同一网络上,我们将位桶服务器连接到同一活动目录服务器。从bitbucket客户端看来,自动完成速度要快得多。距客户端大约1秒钟。

我已经搜索了bitbucket的开放源,但没有找到。

1 个答案:

答案 0 :(得分:0)

我对node.js一无所知,也从未使用相同的程序进行编程。但是,从这个问题来看,我觉得为findUsers()提供的默认查询可能是罪魁祸首。

  

根据Microsoft Docs,LDAP过滤器用于   (&(objectClass=user)(objectCategory=person))   足以确定用户。

在功能findUsers(opts, callback)的官方文档中,我可以看到参数opts关于用于扩展或覆盖功能的可选参数的描述。

因此,我认为您可以使用findUsers函数中的opts参数覆盖LDAP过滤器查询,以保留上述建议的LDAP过滤器,并将sAMAccountName条件放入搜索查询中。请探索如何覆盖opts参数,因为我无法帮助您。

我希望以这种方式进行搜索后,结果会相对更快。