Introduction

Loading time depends on the directory size, network, browser and configuration. In a tenant with thousands or tens of thousands of accounts, the way a web part retrieves people starts to matter: how long the first page takes to appear, how fast search and refiners react, how accurate the totals are and how long an Excel export runs.

The solution offers two directory web parts that follow two different loading models. Employee Directory (Entra ID) loads the whole directory into the browser once and then works in memory. Employee Directory sends a query to the server for every search and loads results one page at a time. This article explains both models, the settings that influence them, and how to configure the directory for a large organization.

💡 Tip
For a general comparison of the two web parts (search, filters, refiners, exclusions), see KB10310. Employee Directory vs. Employee Directory (Entra ID): Which Web Part to Choose.

The two loading models at a glance

Employee Directory (Entra ID)Employee Directory
Data sourceMicrosoft Entra ID through Microsoft GraphUser profiles (SharePoint search) or Entra ID (Azure AD) (Microsoft Graph), selected in Data Source
What is loadedAll users of the directory, in Microsoft Graph pages of 900One page of results per request
Where search and filters runIn the browser, on the loaded listOn the server, with a new query
Browser cacheYes, compressed in local storage; a background refresh is attempted when the copy is older than 24 hoursNo
First load in a large tenantGrows with the number of accountsOne page is requested; response time still depends on the service and query
Search, refiners, A–ZLocal processing after loading; speed depends on the browser and list sizeOne server request per search or refiner selection
Show TotalsExact count of the filtered listTotal reported by SharePoint search or Microsoft Graph
Export to ExcelThe filtered list already in memoryAll results queried again, in pages of 100

Employee Directory (Entra ID): the whole directory in the browser

First load

When the web part opens without cached data, it reads all users from Microsoft Graph in pages of 900 accounts and follows the paging links until the last page has arrived. Only then does the list appear; until that moment the web part shows a loading indicator. The time of this first load therefore grows with the number of accounts in the tenant.

Two settings change what Microsoft Graph returns:

  • Exclude blocked users (in Exclude Employees, on by default) is applied on the Microsoft Graph side: disabled accounts are not downloaded at all, which shortens the load.
  • The Manager column: when it is shown in the list or on the card (Show in list or Show on card), each user is requested together with their manager. This makes the Microsoft Graph requests heavier and the cached data larger. When the column is hidden in both places, managers are not requested.

All other exclusions are applied in the browser after the data has arrived: guest accounts are always left out, and Exclude Unlicensed Employees, Exclude Employees with blank Department, Exclude Employees with blank Job Title and the predefined filter narrow the list further. They make the list shorter but do not reduce the amount of data downloaded.

📝 Note
The list contains standard attributes and configured custom columns. Photos and presence may be requested for visible rows and cards. Opening the details pane also loads the person’s full profile and additional sections. KB10469. Employee Directory: What Data It Reads and Where Favorites and Settings Are Stored

Browser cache and refresh

After a successful load, the web part saves the list in the browser's local storage as compressed JSON, under the key Vitextra.EmployeeDirectory.Data, together with the time of the load. On the next visit:

  1. The directory uses the cached user list before any background refresh. Photos, presence and other features may still request additional data.
  2. If the cached copy is older than 24 hours, the web part reloads the data from Microsoft Graph in the background. The cached list stays on screen while it loads and is replaced when the new data arrives.

Above the results, Last updated: shows the age of the data (for example, "Last updated: 3 hours ago"), and the Refresh link next to it reloads the whole directory from Microsoft Graph on demand. A manual refresh shows the loading indicator, like a first load.

If a background or manual refresh fails while a previously loaded, nonempty list is available, the web part keeps that list and its original update time and shows the warning Couldn't update the list. The saved copy is shown. Technical error details may follow it. After a failed manual refresh, the loading indicator gives way to the previous list. If no previously loaded, nonempty list is available, the web part shows an error instead. Retry Refresh later and check connectivity and the approved Microsoft Graph permissions if the warning persists.

The Last updated line and the Refresh link

The Last updated line and the Refresh link above the results

Keep in mind how the cache behaves:

  • Browser storage. The cache is shared within the same browser profile and SharePoint origin, not separated by signed-in Microsoft 365 account. Other profiles and devices have separate storage. Clearing browser data removes the cache.
  • One copy for all web parts. All Employee Directory (Entra ID) web parts opened in the same browser on the same SharePoint domain share a single cached copy, whatever page they are on.
  • Changes in Entra ID appear after a refresh. Changes returned by Microsoft Graph are reflected after a successful background or manual refresh, subject to the configured filters and exclusions.
  • Some settings reload the data, others do not. Changing Exclude Unlicensed Employees, Exclude Employees with blank Department, Exclude Employees with blank Job Title, Exclude blocked users or the Custom Columns reloads the directory from Microsoft Graph. Showing the Manager column does not: the cached copy was loaded without managers.

❗ Important
After you turn on the Manager column, or when several Employee Directory (Entra ID) web parts with different Custom Columns or Manager settings are used in the same browser, values from the shared cache may be missing until the data is reloaded. Select Refresh next to Last updated: after such changes to load the directory again with the current settings.

When the browser storage is full

Local storage has a limited capacity shared with other data from the same origin. If saving the compressed directory fails, the loaded list remains usable in memory. A previous cached copy may remain; if no usable copy exists, the next visit requires a full load.

Typical signs: the directory always takes as long to open as on the very first visit, and Last updated: always shows a moment ago. To reduce the amount of data, keep Exclude blocked users on, hide the Manager column if you don't need it, and configure only the Custom Columns that the page really uses.

What works in memory

Text search, refiners, A–Z navigation, My department, sorting, grouping, totals and export process the loaded list in the browser. Their speed depends on the list size and device. Skills search, personal quick filters, role memberships, photos, presence and details sections can still make network requests.

Display items in pages of: does not change what is downloaded. It only limits how many people are rendered at once; Show More Results... below the list shows the next portion of the already loaded data.

Employee Directory: one page at a time from the server

The Employee Directory web part does not keep the directory in the browser. Every time the page opens, a search is submitted, a refiner is selected, or the My department quick filter is switched on, it sends a new query to the data source selected in Data Source and receives only the first page of results:

  • User profiles - the web part runs a SharePoint people search. The page size is passed as the number of rows to return, and every following page starts after the rows already loaded. The values of the refinement panel are returned by SharePoint search with every query.
  • Entra ID (Azure AD) - the web part sends a Microsoft Graph query for users with the page size as the number of results; Microsoft Graph returns a link to the next page, which the web part uses for the following portion.

When more results exist, Show More Results... appears below the list. It requests the next page from the server and appends it to the list; while the request runs, Search... is shown instead of the button.

The Show More Results button

The Show More Results... button loads the next page from the server

Requesting only one page reduces the initial transfer. Each server search or refiner selection still requires a request, whose latency depends on the service and query. Results reflect the current Microsoft Graph response or SharePoint search index.

📝 Note
In the Employee Directory web part, selecting a column header sorts only the results already loaded on the page. The order of the whole result set is defined by Sort by and the sort direction in Data Source, which are sent to the server with every query.

The My team, People I work with and Favorites quick filters are an exception in both web parts: they show their own short lists of people, are filtered in the browser and are not paged.

Page size settings

The page size is set by the Display items in pages of: slider in the Data Source group. Its range and default differ between the web parts:

Web partRangeDefaultWhat one page means
Employee Directory (Entra ID)0–5020 for a newly added web partNumber of people rendered at once from the loaded list; 0 shows the whole list without paging
Employee Directory1–5040Number of people requested from SharePoint search or Microsoft Graph in one query

There is no separate option to show all items: in Employee Directory (Entra ID), set the slider to 0. In Employee Directory, results are always paged, and Show More Results... loads the rest.

❗ Important
Setting Display items in pages of: to 0 in a large directory renders every person at once. In the Contact (cards) view each card requests its photo and presence status from Microsoft Graph, so thousands of cards mean thousands of requests and a heavy page. Use 0 only for directories of a manageable size or with a filter that keeps the list short.

Totals

With Show Totals on (in Appearance, on by default), the toolbar above the results shows Total number of results:. The number means different things in the two models:

  • Employee Directory (Entra ID) counts the people in the filtered list in memory - after the exclusions, the predefined filter, the quick filter, the refiners, the A–Z letters and the search text. The count is exact and covers the whole result, not only the people shown on the current page.
  • Employee Directory shows the total reported by the server for the current query: the number of results of the SharePoint search, or the count returned by Microsoft Graph. With the Entra ID (Azure AD) source and Search by skills, people found by their skills are added to that count. The total covers all matching people, not only the pages loaded so far.
  • For the My team, People I work with and Favorites quick filters, both web parts count the people in that list.

Settings that affect performance

SettingWhereEffect in a large directory
Display items in pages of:Data SourceEmployee Directory (Entra ID): how many people are rendered at once. Employee Directory: how many people each server request returns. Smaller pages render faster; larger pages mean fewer clicks on Show More Results....
View - Details or ContactAppearanceIn the Contact view every card of the loaded pages requests a photo and a presence status. The Details view requests them only for the Image and Status columns, if those columns are shown.
Compact ListAppearanceOnly reduces the row height of the Details view; it does not change what is loaded.
Image and Status columnsColumnsOne photo and one presence request per displayed row. Hide them in very long lists if they are not needed.
Manager columnColumnsEmployee Directory (Entra ID): requests every user's manager during the load and enlarges the cache; only when the column is shown in the list or on the card. In the list, the manager's photo is also shown.
Custom ColumnsData SourceEvery additional attribute is downloaded for all users and stored in the cache of Employee Directory (Entra ID).
Exclude blocked usersExclude EmployeesFilters disabled accounts on the Microsoft Graph side, so less data is downloaded and cached.
Refiners and Maximum number of itemsRefinement PanelEmployee Directory (Entra ID): values and counts are calculated in the browser over the whole loaded list for every refiner. Employee Directory (User profiles): the refiners are returned by SharePoint search with every query. Keep the number of refiners to the ones people actually use.

💡 Tip
For the layout options - Details and Contact views, card size, Compact List and Group by - see KB10314. Employee Directory Layouts: Details and Cards, Card Size, Card Fields and Group By.

Export to Excel with large result sets

With the Microsoft Excel spreadsheet toggle on in the Export group, the Export to Excel link appears above the results. In both web parts it creates the file employee-directory.xlsx with a single table named Employees in the Table Style Medium 2 style. The table contains the columns shown in the Details view (Show in list) in their configured order, including custom columns, except Image and Status.

What ends up in the file depends on the loading model:

  • Employee Directory (Entra ID) exports the complete filtered list in its current sort order - every person who matches the exclusions, the predefined filter, the quick filter, the refiners, the A–Z letters and the search text, not only the people shown on the current page. The data is already in memory, so the file is created without further requests.
  • Employee Directory queries the server again for all results of the current query - the search text, the Predefined Query, the selected refiners and the My department quick filter - in pages of 100, and then creates the file. For a large result set this takes a while, because each page of 100 is a separate request.
  • With the My team, People I work with or Favorites quick filter, both web parts export the people in that list.

While pages are collected, the export link is hidden. Both Details and Contact show Exporting to Excel and a record counter, for example “Records 1 ... 300 of 1250”. Keep the page open until the download starts.

The export progress bar

The export progress bar in the Contact view of Employee Directory

💡 Tip
For how to turn on the export and choose its columns, see KB10062. How to Export Employee Directory Results to Microsoft Excel.

Recommendations by organization size

These are general recommendations. Actual loading time depends on the service, network, browser and configured columns. Test with a new browser profile or after clearing the site’s browser data to measure a load without a cache.

Organization sizeRecommended setup
Hundreds of accountsEither web part. In Employee Directory (Entra ID), Display items in pages of: can be set to 0 to show everyone on one page, and the Contact view works well.
A few thousand accountsEmployee Directory (Entra ID) can reuse the cached list. Keep paging on (for example, the default value), keep Exclude blocked users on, and show the Manager column only if users need it.
Tens of thousands of accountsPrefer Employee Directory with server-side paging, especially when the first-load time or the browser storage limit becomes noticeable. If you need the features of the Entra ID web part, narrow what is shown with exclusions and the predefined filter, hide unneeded columns, and use the Details view with Compact List for long lists.
Department or office pages in any tenantEmployee Directory (Entra ID) with a predefined filter, or Employee Directory with a Predefined Query. Remember that the Entra ID web part still downloads the whole directory, and the filter only narrows what is displayed.

📝 Note
An Excel export of the whole directory is fastest in Employee Directory (Entra ID), where the data is already loaded. In Employee Directory, narrow the result with search or refiners before exporting when you need only part of a large directory.

Symptoms and fixes

SymptomCauseFix
Employee Directory (Entra ID) takes long to open on every visitThe cache cannot be saved because the browser storage for the SharePoint domain is fullReduce the cached data: keep Exclude blocked users on, hide the Manager column, remove unneeded Custom Columns; or use the Employee Directory web part
A new employee or a changed attribute is not visibleThe cached data has not yet been successfully refreshedSelect Refresh next to Last updated:
The Manager column is empty after it was turned onThe cached copy was loaded without managersSelect Refresh
A warning appears, but the previously loaded list remains visibleA background or manual refresh failed while a previously loaded, nonempty list was availableRetry Refresh later; check connectivity and the approved Microsoft Graph permissions if the warning persists
The page becomes slow after Display items in pages of: was set to 0All people are rendered at once, and each card requests a photo and a presence statusSet a page size, or use the Details view without the Image and Status columns
Sorting by a column header in Employee Directory does not bring the expected people to the topOnly the results already loaded are re-sortedSet Sort by and the sort direction in Data Source, or narrow the results with search

Questions and answers

Ask a question about this article and get an official answer from our team.

No questions yet. Be the first to ask.

Featured Articles

Cascading Filters: Narrowing Drop-Down Options by Other Selected Filters

How the Cascading filters option of the Vitextra List Filter Online web part limits the options of drop-down filter controls to values that exist in the items matching the other selected filters: enabling the option, an example scenario, behaviour details, performance considerations and limitations.

104 7 min
API Permissions and Admin Consent for Discussions

Reference for SharePoint administrators and security reviewers: the Vitextra Discussions package requests no Microsoft Graph or other API permissions, needs no admin consent and no Microsoft Entra app registration, and works entirely through the SharePoint APIs (REST and CSOM) of SharePoint sites in the context of the signed-in user. What appears in the App Catalog and on the API access page, what the Teams app declares, what is sent to Vitextra, and where the e-mail permission of the optional Power Automate flow lives.

27 6 min
Password Vault vs. Browser Password Managers and Enterprise Password Managers: Which to Choose

A fair comparison of the Vitextra Password Vault web part with the password managers built into web browsers and with dedicated enterprise password managers: where the data is stored, autofill, sharing, administration and recovery, deployment effort, and which scenarios each kind of tool fits best.

25 6 min

Share