Track a Subset of Inputs to Improve Performance
Source:vignettes/tracking-specific-input-id.Rmd
tracking-specific-input-id.Rmd
This guide will help users to track only a subset of inputs that are important to the analysis.
One of the main motivations to use this feature in shiny.telemetry is to reduce the amount of data that is being tracked as some Shiny widgets can generate a lot of events. In particular, on events that are sending input changes triggered via Javascript.
Some widgets will track events, such as mouse clicking on elements or even the position of the cursor, which will have a impact on the application performance and on the amount of data that is being stored.
The developer of the shiny application can achieve this on
{shiny.telemtry}
with 2 complementary strategies:
- Exclude inputs via a regular expression via the
telemetry$log_all_inputs()
method;
- This is most common use case and is available since version
0.3.0
;
- Track only specific input ids via the
telemetry$log_input()
method.
To achieve either of these strategies, the user will need disable the
tracking of inputs on the telemetry$start_session
method
and then call the appropriate method. note: When calling
telemetry$log_all_inputs()
with the default arguments it
will behave just like the telemetry$start_session
method.
server <- function(id) {
moduleServer(id, function(input, output, session) {
telemetry$start_session(track_inputs = FALSE)
telemetry$log_input(c("app-input_id_1", "app-input_id_2", "app-ns2-input_id_4")) # 1.
telemetry$log_all_inputs(excluded_inputs_regex = ".*-namespace2-.*") # 2.
# Server logic ...
})
}
Exclude inputs via a regular expression
In most applications where shiny.telemetry is being used, the developers want to track all input changes while excluding a specific subset of input ids or patterns.
To achieve this, the user can call on
telemetry$log_all_inputs()
with the
excluded_inputs_regex
argument.
Let’s say we want to exclude all input ids that are triggered by the
DT package, then we can use the pattern that it should
start with dt_
and contain only alpha numeric characters or
underscore. The chunk below shows how to achieve this:
server <- function(id) {
moduleServer(id, function(input, output, session) {
telemetry$start_session(track_inputs = FALSE)
telemetry$log_all_inputs(excluded_inputs_regex = "dt_[a-zA-Z0-9_]*$"])
# Server logic ...
})
}
In the event of a specific input id that should be included,
regardless of the excluded regular expression, the user can call on
telemetry$log_all_inputs()
with the
include_input_ids
argument that will have a higher priority
and included in the tracking.
Track a small subset of input ids
If there is a small subset of inputs that should be tracked while
ignoring all others, the the user can call on
telemetry$log_input()
with one or more input ids.
When this function is called, it will create an observe event for each of the input ids that are being tracked.
server <- function(id) {
moduleServer(id, function(input, output, session) {
telemetry$start_session(track_inputs = FALSE)
telemetry$log_input(c("app-input_id_1", "app-input_id_2", "app-ns2-input_id_4")) # 1.
# Server logic ...
})
}