Надстройка Sharepoint Online JSOM слишком долго выбирает всех пользователей

Я создал приложение в SharePoint Online, где я получаю всех пользователей со списком их свойств (http://social.technet.microsoft.com/wiki/contents/articles/25074.sharepoint-online-working-with-people-search-and-user-profiles.aspx).

приложение работает корректно, но страница результатов (350 пользователей) загружается очень долго (~15 секунд).

Судя по всему, основное время ожидания - это отправка POST запроса и получение ответа (~10 секунд).

Как я могу оптимизировать это приложение?

'use strict';

(function ($) {

$(document).ready(function () {
    SP.SOD.executeFunc('sp.js', 'SP.ClientContext', function () {
        SP.SOD.executeFunc('SP.UserProfiles.js', 'SP.UserProfiles', getAllUsers);
    });
});

var users = [];    
var userProfileProperties = [];
var userProperties = [];
var userPropertiesFor = [];
var searchTerm = '*';
var results;


function getAllUsers() {

    var clientContext = new SP.ClientContext.get_current();
    var keywordQuery = new Microsoft.SharePoint.Client.Search.Query.KeywordQuery(clientContext);
    keywordQuery.set_queryText(searchTerm);        
    keywordQuery.set_sourceId("B09A7990-05EA-4AF9-81EF-EDFAB16C4E31");
    keywordQuery.set_rowLimit(500);
    keywordQuery.set_trimDuplicates(false);

    var searchExecutor = new Microsoft.SharePoint.Client.Search.Query.SearchExecutor(clientContext);
    results = searchExecutor.executeQuery(keywordQuery);
    clientContext.executeQueryAsync(onQuerySuccess, onQueryError);
}

function onQueryError(sender, args) {
    alert(args.get_message());
}


function onQuerySuccess() {        
    $.each(results.m_value.ResultTables[0].ResultRows, function () {
        users.push(this.AccountName);            
    });        
    fetchProfilePropertiesForUsers();
}

function fetchProfilePropertiesForUsers() {        
    var clientContext = new SP.ClientContext.get_current();
    var peopleManager = new SP.UserProfiles.PeopleManager(clientContext);
    var profilePropertyNames = ["PreferredName", "WorkEmail", "Department", "PictureURL", "AccountName"];

    for (var i = 0; i < users.length; i++) {
        var userProfilePropertiesForUser = new SP.UserProfiles.UserProfilePropertiesForUser(clientContext, users[i], profilePropertyNames);
        userProfileProperties[i] = peopleManager.getUserProfilePropertiesFor(userProfilePropertiesForUser);
    }

    clientContext.executeQueryAsync(onSuccess, onQueryError);


}



function onSuccess() {                

    var divUserProfiles = document.getElementById('divUserProfiles');
    var html = "<style type='text/css'> .floatL {float:left;margin:10px;} .floatR {padding-top:10px} .profile {padding:10px 10px;} .editProfile{margin-left:100px;}  div>img {height:72px;width:72px;} </style>";
    for (var i = 0; i < userProfileProperties.length; i++) {
        html += "<div class='profile'><div class='floatL'><img src='" + userProfileProperties[i][3] + "' href='#' /></div><div class='floatR'><h2><span><a href='' >" + userProfileProperties[i][0] + "</a></span></h2><span>Work Email : " + userProfileProperties[i][1] + "</span><br /><span>Department  : " + userProfileProperties[i][2] + "</span><br /></div></div><br />";
    }        

    divUserProfiles.innerHTML = html;

}

})(jQuery);

person rustrar    schedule 12.04.2016    source источник


Ответы (1)


В следующем сообщении блога показано, как использовать разбиение на страницы с поиском SharePoint и возврат списков для разбиения на страницы в целом: https://www.microsofttrends.com/2015/08/03/paging-through-sharepoint-2013-office-365-lists-with-javascript/

Я предполагаю, что реализация нумерации страниц, вероятно, устранит медленную загрузку страниц.

person Matt    schedule 12.04.2016
comment
Благодарю вас! Эта статья помогла мне - person rustrar; 13.04.2016