Browser agent release notes

Tuesday, August 18, 2020 - 14:18

New Features

We are excited to announce the release of Cumulative Layout Shift, the third and final metric in Google's Core Web Vitals. This metric is an important, user-centric metric for measuring visual stability because it helps quantify how often users experience unexpected layout shifts—a low CLS helps ensure that the page is delightful. The current set for 2020 Core Web Vitals focuses on three aspects of the user experience—loading, interactivity, and visual stability—and includes the following metrics (and their respective thresholds):

  • Largest Contentful Paint (LCP): measures loading performance. To provide a good user experience, LCP should occur within 2.5 seconds of when the page first starts loading.
  • First Input Delay (FID): measures interactivity. To provide a good user experience, pages should have a FID of less than 100 milliseconds.
  • Cumulative Layout Shift (CLS): measures visual stability. To provide a good user experience, pages should maintain a CLS of less than 0.1. For each of the above metrics, to ensure you're hitting the recommended target for most of your users, a good threshold to measure is the 75th percentile of page loads, segmented across mobile and desktop devices. To learn more about the research and methodology behind these recommendations, see: Defining the Core Web Vitals metrics thresholds. Tools that assess Core Web Vitals compliance should consider a page passing if it meets the recommended targets at the 75th percentile for all of the above three metrics.

How does the Browser Agent report this data?

The agent now collects CLS (Cumulative Layout Shift) values as attributes on PageViewTiming events. CLS measures how much layout of the page shifts and is represented as a score. All types of PageViewTiming events (except FP and FCP) include this attribute, showing the score up until the point the timing measurement was taken. You can now track your CLS score throughout the page loading cycle to better understand and focus your optimization work on the moment in time where you are experiencing the worst scores.

We have also added two new events to the PageViewTiming event, pageHide and windowLoad to complete the full page load journey. These timings are useful with its CLS (Cumulative Layout Shift) attribute to paint the picture of a user's journey through the load experience.

  • The pageHide event represents the first time that the page was hidden (e.g. by switching browser tab). Note that we only collect the first pageHide events at this point.
  • The windowLoad event is fired when the whole page has loaded, including all dependent resources such as stylesheets and images.

For more information, please visit our docs on the PageViewTiming event.

Issue Fixes

  • [PageViewTiming event] Fixed unrealistic high values for FI & FID Older browsers report Event.timeStamp as an epoch time instead of value relative to the page navigation start. The agent took this into account for FI (First Interaction) timing values but not for FID (First Input Delay). With this fix, there should no longer be unrealistic outlier values for FID.

How to upgrade your agent

For instructions for upgrading your agent, please view our docs.

Wednesday, July 29, 2020 - 13:53

New Features

Browser in distributed tracing now supports W3C trace context headers. W3C Trace Context is a standard that makes distributed tracing easier to implement, more reliable, and ultimately more valuable for developers working with modern, highly distributed applications. The standard greatly simplifies use cases where developers instrument services using tools from different distributed tracing solutions. Now all tracers and agents that conform to the W3C Trace Context standard can participate in a trace. Trace data can be propagated from the root service all the way to the terminal service.

Once Distributed Tracing is turned on in your Browser Application Settings page, the trace context headers will be added by default, along with the newrelic proprietary header, for same origin AJAX requests. If your system is fully configured to send w3c trace context throughout all services, you can choose to disable the newrelic header from the Application setting tab.

For cross origin AJAX requests already configured to accept the newrelic header, you can now select the option to send the W3C trace context headers. When selected, all origins defined must be configured to accept the traceparent and tracestate headers. For information on configuring CORS headers, please see our docs page for an example. As with the same origin requests, if you system is fully configured for W3C trace context headers, you can choose to disable the newrelic header.

For more information, please see our New Relic Support for W3C Trace Context blog post.

The following New Relic agents now support W3C:

  • Browser Pro+SPA agent 1173 and higher
  • Java 5.1.0 and higher
  • Python 5.5 and higher
  • Go 3.1.0 and higher
  • Node.js 6.4 and higher
  • Ruby 6.9.0 and higher
  • PHP 9.8 and higher
  • .NET 8.27 and higher
Friday, May 22, 2020 - 13:53

New Features

Privacy: Added the ability for admin users to toggle cookie collection On/Off via Browser Application Settings UI

The agent now accepts new configuration privacy.cookies_enabled. When it is set to false (OFF), the agent doesn't write any cookies (JSESSIONID & NREUM) and it also notifies the intake server to not return a cookie. This enables customers to comply with GDPR/PECR ICO guidelines around cookies. By default, all current and newly created applications will have this value set to true (ON), so there will be no change in the data currently being collected by the agent. Admin users must toggle the setting to OFF and redeploy the agent in order to see this change take effect. Once cookie collection is set to false, users should no longer see session information captured with their event data. If a session was already in progress, that data will continue to be collected until that session expires. New sessions should report a null value.

Please note that auto-injected apps will receive this update before the UI option is available. See release dates below.

To learn more about how New Relic Browser uses cookies, see our documentation. For more information on security considerations, specifically around cookies, visit our Security for Browser documentation.

Release Dates

  • Auto-injected apps - May 28, 2020
  • Copy/paste apps - June 1, 2020
  • Corresponding UI changes - June 1, 2020

Issues Resolved

Fixed issue with document XHR requests

In some cases, the agent was causing a DOMException error when getting the size of XHR responses for requests with document response type.

Friday, February 7, 2020 - 15:56

Issue Resolution

Resolved a bug that caused a script error when the windowUnload event fired. This issue affected only Internet Explorer prior to version 9.

Wednesday, February 5, 2020 - 11:35

New Features

With this release of the New Relic Browser agent, we now support new metrics, largestContentfulPaint and windowUnload, in our PageViewTiming event. With the release of Chrome 77, Google now reports a metric called Largest Contentful Paint. This metric, LCP for short, reports the render time of the largest content element visible in the viewport, along with the element size and element Id values. This new metric comes after extensive research by Google. They found that the more accurate way to measure when the main content of a page is loaded is to look at when the largest element was rendered. Largest Contentful Paint is replacing First Meaningful Paint (which is now a deprecated metric) in Google Lighthouse as well. Additionally, LCP is considered the "field" equivalent to the Speed Index "lab" metric.

Largest Contentful Paint is updated over time, but captured and reported when one of these three criteria is met:

  • A user interacts with the page, thus potentially changing the content in the viewport
  • The user closes the page (the window unload event fires)
  • If no other other interaction happens, and we have received a LCP value, we will report that value after 1 minute has passed
  • If we have not received a value, and no interaction has occurred after a minute, we will simply wait until we have received any value for LCP. This would only occur for very high values (> 1minute) of LCP.

In addition to this metric, we added the windowUnload event to PageViewTiming, so you can see when your users are most commonly closing their sessions. This metric is supported by all browsers on both desktop and mobile devices.

For more information about these new metrics, supporting attributes and browser compatibility, visit our PageViewTiming documentation.

Issue Fixes

  • Fix to resolve repeated InvalidStateError errors associated with IE11 and some Edge versions.

How to upgrade

To upgrade your agent to the latest version, see Upgrade the Browser agent.

Thursday, December 19, 2019 - 13:48

Notes

This agent release includes functionality to support the addition of cross-origin resource sharing (CORS) for Browser's distributed tracing feature. This agent will be rolled out prior to the feature availability in the UI. Please note that the Browser-distributed-tracing feature is only supported with our Browser Pro + SPA agent. Full feature availability delivered on Jan. 2, 2019.

Agent release schedule Browser distributed tracing CORS support

  • APM auto-injected agents: 12/19/2019
  • Copy/Paste agent: 12/30/2019

Distributed tracing for cross-origin AJAX calls

The agent can now add the newrelic distributed tracing header to outgoing cross-origin AJAX calls. The origins that the agent should add headers to must be defined in the distributed_tracing.allowed_origins configuration section. Users can now enable CORS from the Browser 'Application settings' page. For complete feature documentation, visit the Enable cross-origin resource sharing (CORS) section of our Browser data in distributed tracing documentation.

Friday, November 8, 2019 - 14:00

New features

Support for End User Originated Spans in Distributed Tracing

New Relic now supports end-to-end distributed tracing with this release. For our Browser & APM Pro customers, you can now enable the Browser spans for any app that uses our Browser Pro + SPA agent.
This MVP includes support for same-origin AJAX requests that originate during a BrowserInteraction event. This AJAX request will be listed as the root entry span for a trace.

Learn More

Known Issues

  • Enabling Browser in Distributed Tracing for use with current versions of these language agents, Java, PHP, and C, will result in disconnected traces (single span traces for all Browser requests) and potentially the loss of APM transaction traces and spans. Please see the APM compatibility requirements for supported versions and estimated release dates.

New PageViewTiming Event to capture User Centric Perceived Performance metrics in real time

With this release, we are tying together the visual and responsiveness performance for our customer's site. With every page view, the agent is now capturing the time of the first interaction along with FID (First Input Delay). The existing paint timing metrics (First Paint and First Contentful Paint) are now collected even when they occur after the load event. All of these new metrics are captured on the new PageViewTiming events, available in Insights. This new event type is available for all agents, but requires a Browser Pro subscription.

Visit our New Relic Event Data Dictionary for a list of attributes and more details about the PageViewTiming event.

First Interaction

First Interaction timing captures the moment in time that a user first engages with a site. Within this timing, we also capture the type of interaction (click, key, mousedown, etc). This timing represents the first step in calculating the First Input Delay, which is the time from First Interaction to the moment that the site responds (is interactive).

First Input Delay

FID is a metric that tracks the delay between the time a user can attempt to interact with a part of the site (for example, when they click a link, tap on a button, or use a custom, JavaScript-powered control), and the time that the interface is able to respond to that interaction. We have all experienced situations where a webpage has visibly loaded, but when we try to click around on buttons or any JavaScript-powered interactive elements, nothing responds. This delay is what the FID metric tracks.

The FID metric is in some ways an intersection of the First Contentful Paint and Time to Interactive metrics. It lies in the middle of those two points, measuring the time between the FCP (and therefore when a first input can be made) and when the browser’s main thread is able to respond to any interactions. One major point of FID that differentiates it from Time to Interactive is that it requires a user to interact! TTI can be calculated without user input, so it is somewhat less powerful in the sense that it isn't providing any new information about my user's active experience or frustration, we can only assume that slow = bad. Why only consider the first input

Learn more

Improvements

  • Browser interactions now wait on external scripts to finish loading: Browser interactions measure the time of all Javascript code that runs as a result of an interaction. The agent now includes the time it takes to load and execute external scripts. This is useful, for example, when the code started by an interaction must be loaded first (lazy loading).

How to upgrade

To upgrade your agent to the latest version, see Upgrade the Browser agent.

Tuesday, July 16, 2019 - 10:00

New Features

First Paint and First Contentful Paint values are now being collected: For browsers that support the Paint Timing API, these two values are now collected and made available as attributes on the PageView and BrowserInteraction (initial load) events.

Improvements

  • Updated instrumentation of the History API: The history API methods are now instrumented on the History object constructor. This is to ensure that our instrumentation does not override other libraries that wrap these methods.

  • Updated instrumentation of DOM API methods: The DOM API methods used for JSONP instrumentation are now instrumented on the Node object prototype (as opposed to HTMLElement lower in the prototype chain). This is to ensure that our instrumentation does not override other libraries that wrap these methods.

How to upgrade

To upgrade your agent to the latest version, see Upgrade the Browser agent.

Friday, April 19, 2019 - 11:23

Bug fixes

  • Fixed issue with capturing AJAX status code in Angular apps: Angular calls abort() on the XHR object after it successfully finishes. This was seen by our instrumentation as a call that did not finish, and as a result status code was set to 0 and reported as a network error. This fix addresses this use case by capturing status code before the call is aborted.
Friday, January 4, 2019 - 10:00

New features

  • Custom attributes are now added to JavascriptError events: Custom attributes collected with the setCustomAttribute() and interaction.setAttribute() API methods are now added to JavascriptError events.

  • Updated the noticeError() API: The noticeError() API method now accepts a second argument for custom attributes. For more details and examples, see the noticeError() documentation.

Improvements

  • Updated the timing of when page URL is collected: The URL collected by the agent and used for page view names is now collected after the load event to account for redirects. Currently, we are using the referrer header value from the initial agent call for transaction naming and for URL attributes on Insights events. The agent also sends the URL value as a part of its payload to get around HTTP header stripping. This update brings this value on a par with the HTTP header by capturing it at the time the agent call is made.

How to upgrade

To upgrade your agent to the latest version, see Upgrade the Browser agent.

Pages