Fix
Bugfixes
- Circumvent duplicate requests in Safari due to speculative parsing requests
New
Bugfixes
- Revert to legacy navigation timings in Safari because of ttfb bug
- Fix detection for broken styles if Service Worker provides no array
- Fix automatic cookie listener to allow other scripts to also override the functionality
- Fix delay script if parent is not in DOM
Improvements
- Add error types to dynamic fetcher and track immediately
- Rename split test cookies to
baqend-speedkit-config
and baqend-speedkit-secondary-config
and ensure they are only sent if needed
- Improve redirect detection when storing meta information
- Add global error handling in Dynamic Fetcher
- Abort requests to the AssetAPI if they take longer then 10 seconds
- Recognize if SpeedKit is installed in third party Service Worker
- Apply custom variations for images
- Ignore partial responses (Status 206) from the AssetAPI
- Extract correct meta information if used with third party Service Worker
- Report ResponseCause
IgnoredAfterPOSTNavigate
only if request would have been accelerated
Features
- Add
prerendered
Dynamic Block Config option to specify elements which should be kept from the already rendered, cached version of the page.
- Add
assetChangeDetection
Dynamic Block Config option: Automatically compares assets in the cached and origin version of the page. The option can either be en-/disabled by providing a boolean value or be configured by specifying a list of resources to ignore for the comparison. By default the option is disabled.
- Add
redirectList
RUM property to identify if and in what way the current navigation was redirected.
- Add
screenResolution
RUM property to identify the users screen size
- Add
applicationState
RUM property indicating in which state the Service Worker was when the navigate request reached it, e.g. booting
- Add
shouldExecute
function to the RUM Plugin interface, consisting of a callback that specifies whether the plugin should be executed on the current navigation
- Add
DisabledSites
ResponseCause to differentiate between the config options disabled
and disabledSites
Fix
Bugfixes
- Fix PI counting in Firefox with missing client
Fix
Bugfixes
- Fix PI counting in Safari iFrames with no source
Fix
Bugfixes
- Fix PI counting in special Safari iFrames
Fix
Bugfixes
- Fix redirect detection for Dynamic Blocks in Safari
Improvements
- Improve error handling in Firefox Private Browsing mode
Fix
Bugfixes
- Ensure RUM tracking is not affected by legacy local storage entries
Fix
Improvements
- Increase reliability of POST message communication with the service worker
- Persist device directly in IndexedDB as fallback mechanism
Fix
Bugfixes
- Whitelist CORS POST requests for Safari > 15.3
- Fix credentials issue by removing workaround for Safari > 15.3
- Fix content type for fallback RUM beacons
New
Bugfixes
- Fix offline banner styling issue
- Ensure non-async and inline modules are handled correctly by the script execution logic
- Fix content type evaluation in rule system
- Fix
ResponseSource
and ResponseCause
in SDN Setup
- Ensure synchronously set custom dimensions are not overwritten
- Custom dimension values are automatically converted to strings
Improvements
- Add type to error tracking
- Improve error handling during installation
- Improve speed kit opt-out: Introduce opt-out via local storage by setting
baqend-speedkit-sk-opt-out
to 1
and remove all Speed-Kit-related storage entries
- Clarify
ResponseCause
in case the service worker cannot provide matching meta information with three new causes: SwBooting
, NoNavigate
, and NoMatchingNavigate
- Only request meta-information if Speed Kit is the controlling Service Worker
- Removed remaining usages of
unload
event listeners to comply with page lifecycle handling of browsers
- Execute inline scripts in their exact location if they are part of a Dynamic Block
- Ensure dynamic fetcher metainformation is tracked even in error scenarios
- Provide localization of the default offline banner
- Deactivate Image Optimization by setting
optimize: false
- The
speedkit-dynamicblock-replaced
class is also set in custom merge functions if SpeedKit.replaceBlock
is used, or otherwise can be set through SpeedKit.markAsMerged
- Ensure cookies are sent to the service worker immediately by overriding
document.cookie
and expose updateCookies
on SpeedKit
- Expose duration of change detection at
SpeedKit.dynamicBlocks.changeDetection
- Truncate large beacon values and track the corresponding key through the
truncatedKeys
property
- Properly differentiate response causes formerly treated as blacklisted by adding
NotEnabled
, NotWhitelisted
, UserAgentChanged
, TooLargeRequest
and FormatNotSupported
- Always track
assetTTFB
, not only for lost races
Features
- Add
omitImageCredentials
config option: sets the credentials option to omit
for image requests against our caching infrastructure in order to achieve multiple connections and circumvent h2 request priority issues
- Add
useCacheWhenOffline
config option: Allow SpeedKit to use cached responses in case the user is offline
- Add
resetResponseUrl
config option: Ruleset to identify responses where the response URL should be reset to the original URL
- Add
changeDetectionSampling
DynamicBlockConfig option: The value between 0 and 1 will determine a sampling rate for hot resources
- Add
detectDevice
DynamicBlockConfig option to specify a function that identifies the device based upon a given document. In case the value of the cached and original page differ a device mismatch tracking is triggered. (This replaces the DynamicBlockConfig.detectDeviceMismatch
option)
- Add
format
to ImageOptions
: Specify the desired output encoding
- Add
imageFunction
to ImageRule
: Manipulate the IO params by a custom function with access to cookies, screen size, etc.
- Add
dataLayerReady
trigger function to execute RUM Plugins once the data layer is available
- Add
gaReady
and gaTracking
trigger functions to support Google Analytics implementations without a data layer
- Expose
assetCause
: new property containing information about the ResponseCause
of the Request to our caching infrastructure
- Expose
skSupported
and swSupported
flag to differentiate browsers that are excluded even though they support Service Workers (e.g. WebViews and Non-Chromium Edge) from browsers not supporting Service Workers at all
- Expose
reloadFromOrigin
to ResponseHandlerContext
to trigger a reload which will not be handled by Speed Kit
- Expose
updateDevice
function at SpeedKit.dynamicBlocks
to allow usage independent of snippet availability
- In case we are not able to get a response from the original page the Dynamic Fetcher is now capable of executing fallback scripts which we can insert into the page. These are marked by the type
speed-kit-fallback-script
. These will only take effect if all default logic is explicitly overridden.
- If the Dynamic Fetcher Request fails because the user is offline Speed Kit will provide a cached version of the original site if available and the corresponding option
enableOriginCache
is set
- In case of an error on the Dynamic Block Request a describing class will be set on the page's
HTML
element: By default, the classes are speed-kit-client-error
, speed-kit-server-error
, and speed-kit-offline
, but they can also be customized by setting the corresponding DynamicBlockConfig
option (customClientErrorClass
, customServerErrorClass
, customOfflineClass
)
- Introduce declarative trigger functions: Instead of declaring a standard trigger function or a custom function to indicate when a RUM Plugin should run we now support the declaration of a specific global variable (in form of a string) which has to be defined before tracking should be executed
- Preload CORS resources loaded before DCL on the page load that installs Speed Kit
- Identify broken CSS on the page and trigger a change detection accordingly
- Use more detailed client error description as
ResponseCause
if provided in the server timings header