logo Alfresco
Version Enterprise 3.4.2
Source de cet article: Jeff Potts

Lorsqu’il y a une volumétrie trop grande d’Alfresco on peut observer un dégradation des temps d’affichage de la document library (et ses sous espaces) des sites Share. Dans notre cas nous gérons plus de 1000 sites, plus de 2.000.000 de documents pour un peu plus d’1To et l’affichage de la document library prend en moyenne un bonne dizaine de secondes.

En cherchant un peu sur les différentes communautés je suis tombé sur un article (http://ecmarchitect.com/archives/2011/04/13/1331) de Jeff Potts (en personne !) qui correspond exactement au problème observé.

II. Solution

Comme l’explique Jeff la solution proposée se contente de résoudre le problème de temps de réponse sans vraiment identifier (ni expliquer) sa cause réelle.

L’affichage de la document library est en partie pilotée par le webscript doclist.get.js (webscripts\org\alfresco\slingshot\documentlibrary) d’Alfresco et c’est ici, pendant la requête de récupération des nœuds correspondant à un filtre, que l’on peut observer 90% du temps de traitement de l’affichage.

Voici le bout de code en question :

// Query the nodes - passing in sort and result limit parameters
if (query !== "")
{
allNodes = search.query(
{
query: query,
language: filterParams.language,
page:
{
maxItems: (filterParams.limitResults ? parseInt(filterParams.limitResults, 10) : 0)
},
sort: filterParams.sort,
templates: filterParams.templates,
namespace: (filterParams.namespace ? filterParams.namespace : null)
});
}

Afin d’améliorer les temps de réponse dans la navigation de la document library, il faut se concentrer sur le filtre path. Dans ce cas précis on récupère le nœud correspondant au chemin puis grâce à la méthode getChildren() on récupère tous les nœuds enfants (dans les autres cas on laisse le comportement par défaut):

// if filter is on PATH we use getChildren method
// else we use the default behaviour for filters
if(filter.indexOf("path") > -1)
{
if (parsedArgs.path == "")
{
parentNode = parsedArgs.rootNode;
}
else
{
parentNode = parsedArgs.rootNode.childByNamePath(parsedArgs.path);
}
allNodes = parentNode.getChildren();
}
else
{
// Query the nodes - passing in sort and result limit parameters
if (query !== "")
{
allNodes = search.query(
{
query: query,
language: filterParams.language,
page:
{
maxItems: (filterParams.limitResults ? parseInt(filterParams.limitResults, 10) : 0)
},
sort: filterParams.sort,
templates: filterParams.templates,
namespace: (filterParams.namespace ? filterParams.namespace : null)
});
}
}

Avec cette modification du webscript doclist.get.js le temps d’affichage de la document library est passé d’une dizaine de seconde à moins d’une seconde !!

A vous de jouer !

Publicités