• Skip to primary navigation
  • Skip to main content
  • Skip to footer
  • Who we are
    • Our values
    • Our story
    • Our clients
    • Our world presence
  • What we do
    • Solutions
    • Content services platforms
      • What is CSP?
      • Solution Enablement Toolkit (SET) for CSP
      • Nuxeo systems integrator
      • Meet our Nuxeo developers
      • Content Services Platforms resources
    • Robotic process automation
      • What is RPA
      • Solution Enablement Toolkit (SET)
      • Automation center of excellence
      • Journey to intelligent automation
    • Adobe Experience Cloud
    • SharePoint services
      • Microsoft 365 automation
      • Solution Enablement Toolkit (SET) for SharePoint
    • Collaboration & Web CMS
    • Services
    • Accessibility compliance
      • Accessibility development & design
      • Accessibility testing
      • Accessibility training & learning
      • Accessibility file & document remediation
      • Accessibility resources
    • Cloud & application development
    • Data & analytics
    • Support services
  • How we do it
    • Getting started
    • Governance model
    • Project management office
    • QA Framework
    • Insights
    • Case studies
    • Events & community
  • Careers
iSoftStone – IT Services, Software Consulting, Accessibility Consulting

iSoftStone - IT Services, Software Consulting, Accessibility Consulting

A step above: We help you reach the next level in digital transformation

  • Who we are
    • Our values
    • Our story
    • Our clients
    • Our world presence
  • What we do
    • Solutions
    • Content services platforms
      • What is CSP?
      • Solution Enablement Toolkit (SET) for CSP
      • Nuxeo systems integrator
      • Meet our Nuxeo developers
      • Content Services Platforms resources
    • Robotic process automation
      • What is RPA
      • Solution Enablement Toolkit (SET)
      • Automation center of excellence
      • Journey to intelligent automation
    • Adobe Experience Cloud
    • SharePoint services
      • Microsoft 365 automation
      • Solution Enablement Toolkit (SET) for SharePoint
    • Collaboration & Web CMS
    • Services
    • Accessibility compliance
      • Accessibility development & design
      • Accessibility testing
      • Accessibility training & learning
      • Accessibility file & document remediation
      • Accessibility resources
    • Cloud & application development
    • Data & analytics
    • Support services
  • How we do it
    • Getting started
    • Governance model
    • Project management office
    • QA Framework
    • Insights
    • Case studies
    • Events & community
  • Careers

Optimizing page loading speed in Nuxeo: A practical example

Nuxeo is a highly-adaptable and customizable platform for managing assets — often referred to as "documents" in the platform

Home ‣ Insights ‣ Articles ‣ Optimizing page loading speed in Nuxeo: A practical example

August 21, 2020 by Brad Hamilton

These days, users' expectations for internal web-based systems are similar to their expectations for external websites - users who are used to going to their favorite shopping site in their web browser will often expect their own company's internal systems to load just as quickly. They may not think about the fact that internal systems can have fewer hardware resources available and cannot scale up as quickly. For this reason, it is all the more important that we optimize system performance before rolling out a system and that we continually monitor it afterwards.

 

Many areas to optimize

Nuxeo has a lot of moving parts—the front-end, the database, Elastic Search, caching, and so on—and the exact setup can be unique to each company that uses it. And, because developers typically introduce custom functionality that is specific to the company’s needs, such as custom views, we need to make sure that we are aware of the impact of these customizations on page-load speed and that we optimize the page load process where necessary.

In short, there are many places where we can optimize performance. This blog entry won't try to cover all of them but will instead look at one specific example scenario where we discovered some issues using the Network Monitor tool in Chrome and investigated to find the issue and the solution.

 

A specific example

Because Nuxeo is a single-page web application, we expect longer load times for the first load (for example, when the user first logs in, or when they are doing a hard refresh). However, in this instance, with one client’s Nuxeo installation, we were seeing longer-than-expected load times after the first load, when users were clicking between assets or other screens within the system. This was occurring in Test, Stage, and Prod. In looking at the Network Monitor tool, we were consistently seeing a gap of several seconds between the first request and the second request, and we decided to zero in on this gap to see what was happening and how we could reduce the impact.

We switched to the Performance tool in Chrome devtools, started recording, tried loading an Asset (Document) page, and then clicked the stop button after the page finished loading. This analysis showed that most of the time was consumed by scripting.

We then switched to the Call Tree tab within the Performance tool, and found that most of this time was consumed by the "set" function, which is defined in class PropertyEffects in nuxeo-app.html.

We temporarily added some code to this function to console-log data about any time this function took longer than 50 milliseconds.

Figure 1: console-log code example from the IDE, also shown in figure 2 below
 
set(path, value, root) {
	var beginTime = (new Date()).getTime();
	
	if (root) {
		Polymer.Path.set(root, path, value);
	} 
	else {
		if (!this[TYPES.READ_ONLY] || !this[TYPES.READ_ONLY][/** @type {string} */(path)]) {
			if (this._setPendingPropertyOrPath(path, value, true)) {
				this._invalidateProperties();
			}
		}
	}
	
	var endTime = (new Date()).getTime();
	var durationTime = endTime - beginTime;
	
	if (durationTime > 50) {
		console.log('duration time(ms): ' + durationTime);
		console.log('path: ' + path);
		console.log(value);
	}
}
Figure 2: console-log code example (in text)
 

We reloaded the Asset page, and found three paths, including "currentDocument" that were taking a long time to load.

We then added some breakpoints to the function to debug it. From the call stack, we could then see which function set the values to call for these resources. For "currentDocument", we could see that it is called by the Load function in nuxeo-app.html. This function sets the current document when getting document data from the Nuxeo repository. We could then see that the other two calls were triggered by the "currentDocument" itself.

We dug in further to understand these two calls and realized that these were custom-developed resources that were being loaded during each Asset page load even though they would not be visible to the user unless the user clicked to see them. One was a form that displays when the user clicks an Edit button. The other was a custom tab with additional information about the relationships of the current asset to other assets.

 

A simple solution

In this case, the solution was simply to not load these additional resources until the user needs them—when they click the relevant tab or button. This reduced the load time by two seconds.

In fact, with regard to the document tabs in WebUI, Nuxeo's documentation itself calls this out as something to check in order to improve performance. (See https://doc.nuxeo.com/nxdoc/web-ui-performance/#document-tabs)

 

Continuous monitoring, continuous improvement

Performance monitoring and testing is something that should occur throughout the development process and there should be ongoing monitoring throughout the life of the system. As we can see from the experience outlined in this article, it's not just about monitoring infrastructure and system resources, but also about ensuring that we are selective about what data loads and when it loads.

 

Want more information?

Ready to start your Nuxeo journey? Or are you interested in learning about how iSoftStone can help you implement Nuxeo for your critical business needs? Please reach out!

Cameron Geasey profile picture by Cameron Geasey Senior Technical Project Manager | Business Consulting
Posted:
Aug 21, 2020
Reading Time:
4 minutes
Share:
Tags:
Content Services Platforms csp-nuxeo-content Nuxeo
 

Articles Content Services Platforms,  csp-nuxeo-content,  Nuxeo

Footer

Get in touch

  • info@isoftstone.com
  • +1 425-216-6300
CONTACT US

iSoftStone

  • North America Headquarters
    5808 Lake Washington Blvd.
    Suite 201
    Kirkland, WA 98033
    USA


    New York
    777 Westchester Avenue
    Suite 101
    White Plains, NY 10604
    USA

Our other channels

Twitter LinkedIn Instagram YouTube Channel

Navigation

Who we are
  • Our values
  • Our story
  • Our clients
  • Our world presence
What we do
  • Content services platform
  • Robotic process automation
  • Adobe Experience Cloud
  • SharePoint services
  • Collaboration & Web CMS
  • Accessibility compliance
  • Cloud & application development
  • Data & analytics
  • Support services
How we do it
  • Getting started
  • Governance model
  • Project management office
  • QA framework
  • Insights
  • Case studies
  • Events & community
Careers
Locations
Privacy
Our Social Responsibilty

Copyright © 2005–2022 iSoftStone, Inc. All rights reserved.

We are using cookies to give you the best experience on our web site.

You can find out more about which cookies we are using or switch them off in settings.

Privacy Overview
iSoftStone - IT Services, Software Consulting, Accessibility Consulting

This web site uses cookies so that we can provide you with the best user experience possible. Cookie information is stored on your computer by your browser and performs functions such as recognizing your browser when you return to our web site and helping our web team to understand which sections of the web site you find most interesting and useful.

Strictly Necessary Cookies

Strictly necessary cookies should be enabled at all times so that we can save your preferences for cookie settings.

If you disable this cookie, we will not be able to save your preferences. This means that every time you visit this web site you will need to enable or disable cookies again.

Google Analytics

This web site uses Google Analytics to collect anonymous information such as the number of visitors to the web site and the most popular pages. Keeping this cookie enabled helps us improve our web site.

Please enable strictly necessary cookies first so that we can save your preferences!

Cookie Policy

More information about this web site's use of cookies can be found in the Privacy Policy.