text/html) via Java or Web Server Agents – or manually, by using the
<script> tag in the page header, at design time if not otherwise possible.
To instrument a website, two script tags have to be injected: an inline tag and a tag with a
defer script tag attribute (see MDN Documentation for details).
Asynchronously loaded scripts do not block page loads, but there are a few drawbacks. Since the Agent cannot redefine any library variables if they already have been initialized (like jQuery or AngularJS), it is strictly recommended that
The following is a sample tag-combination automatically injected by the Agent as first of script tags in
<head> at delivery of the web page – with settings according to the configuration in <System Profile> > User Experience:
The first tag (without
src-attribute) is the agent’s initialization code. It must be delivered inline and is executed synchronously. It performs early-wrapping of native browser functions and third party libraries if available to ensure capturing can be done reliably.
7000000001289is the AppMon Agent version (major, minor, revision, buildnumber).
Each part of the version string consists of four characters, trimming leading zeroes, such that it is read like this:
7 0000 0000 1289, which translates to
bdpxis the feature hash, and shows information captured by the Agent, such as bandwidth, dojo, perceived render time and basic XHR detection.
To disable injection:
- Right click your system profile and select Edit System Profile -> your agent group -> Sensor Configuration item -> User Experience, and click Properties.
- In the URI-specific injection behavior area, click +.
- Specify the file or location to be excluded from the injection, in the Condition and URI pattern fields. See User Experience sensor properties for parameters description.
- From the Injection Rule list, select do not inject on this agent, to allow agents from other groups to inject here or do not inject on this and subsequent agents, to completely disable agent injection.
If the preferable auto-injection is not possible you need to insert the initialization tag manually at design time as first script tag in
defer attribute) and updates it’s configuration if required. It is not necessary to update the initialization tag every time you change the UEM configuration, though adjustments are applied faster for new visitors if you do so.
- 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, etc. 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.
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. Set the items in <System Profile> > User Experience. Set the monitor request name in the Global Settings tab. Set the monitor request path in the <applicationName>.
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 beforeunload or unload event.
Action name detection
Set Action Name with Custom Attribute
If the standard action name detection does not suffice you can set the custom attribute
data-dtname 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" />
The above leads to the following caption:
click on "Firstname Text Input"
Resolving captions for actions
It starts with the innermost HTML node that’s clicked (such as a button, image tag, link…) and checks the following things in order of precedence):
- The attribute named
- The nodeName (such as image, anchor, input, …), returns if
headtag or the
documentelement is found.
- 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.
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. Max. factor is 2.
How is it implemented?
- 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)
- 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.