JavaScript Agent

The JavaScript Agent diagnoses browser environments. It is a script that can be injected into HTML web pages automatically by using Java or Web Server Agents, or manually by using the <script> tag in the page header, at design time if not otherwise possible. See JavaScript Agent injection for more information.

The Agent performs the following analysis:

  • Detection of page loads.
  • Detection of user actions: A user action can be a page load or an Ajax call that the user initiates by a mouse click, key press, or other similar event. Cascading calls are correlated into one single user action, for example a page load that performs several Ajax calls during load.
  • Browser errors.
  • The client's bandwidth.
  • User action details such as action duration and page load detail timings for each action step, including browser timings, visually complete, and speed index.

The JavaScript Agent analyzes the browser and user behaviors on the client side and captures actions if the corresponding event handler is registered. It sends this information to the instrumented web server using several parameters in the monitor signal/simple XHR/Ajax request. The web server is named dynaTraceMonitor by default—resulting in a path relative to the instrumented server.

You can set the monitor request name in the System Profile > User Experience > Global Settings, and the monitor request path in the System Profile > User Experience > <applicationName>.


Setting a new request name and/or path does not disable the default endpoint. A new endpoint is created instead.

By default the signal is sent immediately after a page was successfully loaded or an Ajax action is finished. If a user navigates to another page before the page finished loading, the signal is sent during a before-unload or unload event.

Action name detection

The JavaScript Agent tries to find a meaningful name for an action. To do this, it checks several properties (such as inner HTML, caption, or hint) of the HTML element (such as button or anchor) that triggers the action. It also tries to get the caption if there is a more complex HTML structure with multiple nested tags.

Set action name with data-dtname custom attribute

If the standard action name detection does not suffice you can set the data-dtname custom attribute within the HTML tags and use it as a caption. For example:

<label for="txtFirstname">Firstname</label> <input data-dtname="Firstname Text Input" type="text" value="firstname" name="firstname" title="Firstname" id="txtFirstname" />

This leads to the following caption:

click on "Firstname Text Input"

Resolving captions for actions

The JavaScript Agent decides which name fits an action best using several techniques. It starts with the innermost HTML node that is clicked, such as a button, image tag, or link, and checks the following in order of precedence:

  1. The attribute named data-dtname.
  2. The nodeName such as image, anchor, or input, and returns if html, body, or head tag or the document element is found.
  3. The innerText/textContent.

If none of these return any reasonable result, the Agent starts a recursive algorithm that checks different things depending on the nodeName of the currently checked HTML node. If nothing is found, the parent node is checked.

Bandwidth detection

To detect a client's bandwidth, the JavaScript Agent requests signals of different sizes from the server. These GET-requests force the Agent to generate images of a specific file size and send them back to the browser. The bandwidth is calculated according to the load time of these images. To reduce failures and guarantee the validity of the results, allow GET-requests on dynaTraceMonitor?bwstate=*.

Do not gzip or compress the requests. This reduces the file size of the generated images and the time it takes the clients to download them and such biases bandwidth to be better than it actually is.

Which features is it needed for?

  • Bandwidth measure.
  • Network contribution time measure, calculated based on bandwidth and on resource size which is measured on the server side.
  • User experience index for page actions for bandwidths lower than broadband. The threshold is multiplied by a factor between 1 and 2. The biggest possible factor is 2.

How is it implemented?

  • Bandwidth detection triggers 2 seconds after the JavaScript Agent was loaded.
  • The JavaScript Agent loads a series of fixed size images (0k, 3k, 10k, 30k, 100k, 300k, 1000k) and measures the time.
  • First (0k) image is used for latency calculation, which are subtracted from all other measurements.
  • All subsequent images are loaded until the download time without latency exceeds 100ms.

What can be configured?

  • Bandwidth detection can be enabled per application (default: off).
  • Bandwidth detection can be enabled separately for mobile browsers (default: off).
  • Frequency of bandwidth checks can be configured (default: every 5min).

What is the impact?

The bandwidth detection can have an impact on the user experience, because it might be triggered while the page is still loading. Even if there is no impact on the response time, synthetic tools still might consider the timings of the bandwidth check images for their calculation of the response time.

  • Typical impact on the response time: 0—100ms (depending on individual page performance).
  • Impact on the total resource size of a page: up to 1443k.

The bandwidth feature requires an instrumented Agent to get the generated images, thus it just measures the bandwidth between the client and the Java/Webserver Agent. If the latter is located elsewhere, for example in a UEM only scenario with CORS, the measured bandwidth does not reflect the connection speed between the webserver that delivered the actual page and the browser.