<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-20375833-3"></script>
<script>
 window.dataLayer = window.dataLayer || [];
 function gtag(){dataLayer.push(arguments);}
 gtag('js', new Date());
 gtag('config', 'UA-20375833-3');
</script>
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-TLQTK9R');</script>
<script src="https://client-registry.mutinycdn.com/personalize/client/013e765e14ebf565.js"></script>
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="manifest" href="/site.webmanifest">
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#75aadb">
<meta name="msapplication-TileColor" content="#ffffff">
<meta name="theme-color" content="#ffffff">
<title>Load testing Shiny - RStudio</title>
<meta name="description" content="shinyloadtest and shinycannon are two new tools that work together to help you answer the question: how many users can my app support?">
<meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0, shrink-to-fit=no' name='viewport' />
<link rel="preload" href="/assets/img/icon-rstudio.svg" as="image">
<link rel="preload" href="/assets/img/icon-rstudio-white.svg" as="image">
<link rel="preload" href="/assets/img/icon-shiny.svg" as="image">
<link rel="preload" href="/assets/img/icon-shiny-white.svg" as="image">
<link rel="preload" href="/assets/img/icon-packages.svg" as="image">
<link rel="preload" href="/assets/img/icon-packages-white.svg" as="image">
<link rel="preload" href="/assets/img/icon-rspm.svg" as="image">
<link rel="preload" href="/assets/img/icon-rspm-white.svg" as="image">
<link rel="preload" href="/assets/img/icon-connect.svg" as="image">
<link rel="preload" href="/assets/img/icon-connect-white.svg" as="image">
<link rel="preload" href="/assets/img/icon-rstudio-team.svg" as="image">
<link rel="preload" href="/assets/img/icon-rstudio-team-white.svg" as="image">
<link rel="preload" href="/assets/img/icon-cloud.svg" as="image">
<link rel="preload" href="/assets/img/icon-cloud-white.svg" as="image">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.6/css/all.css" integrity="sha384-VY3F8aCQDLImi4L+tPX4XjtiJwXDwwyXNbkH7SHts0Jlo85t1R15MlXVBKLNx+dj" crossorigin="anonymous">
<link href="/assets/css/bootstrap.min.css" rel="stylesheet" />
<link href="/assets/css/algolia.css" rel="stylesheet" />
<link href="/assets/css/now-ui-kit.css" rel="stylesheet" />
<link href="/assets/css/timeline.css" rel="stylesheet" />
<meta property="og:image" content="https://rstudio.com/assets/img/og/rstudio-og-fb-1.jpg" />
<meta property="og:title" content="Load testing Shiny " />
<meta property="og:description" content="shinyloadtest and shinycannon are two new tools that work together to help you answer the question: how many users can my app support?" />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://www.rstudio.com/resources/webinars/load-testing-shiny/" />
<meta property="article:published_time" content="2018-09-06T00:00:00+00:00"/>
<meta property="article:modified_time" content="2018-09-06T00:00:00+00:00"/>
<meta name="twitter:card" content="summary_large_image"/>
<meta name="twitter:image" content="https://www.rstudio.com/resources/webinars/load-testing-shiny/thumbnail.jpg"/>
<meta name="twitter:title" content="Load testing Shiny "/>
<meta name="twitter:description" content="shinyloadtest and shinycannon are two new tools that work together to help you answer the question: how many users can my app support?"/>
<link href="//cdn.rawgit.com/noelboss/featherlight/1.7.13/release/featherlight.min.css" type="text/css" rel="stylesheet" />
<link href="/assets/css/bootstrap-lightbox.css" type="text/css" rel="stylesheet" />
<link href="https://gitcdn.github.io/bootstrap-toggle/2.2.2/css/bootstrap-toggle.min.css" rel="stylesheet">
<meta name="generator" content="Hugo 0.64.1" />
<title>Load testing Shiny · RStudio</title>
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.13.0/css/all.css">
<script>
(function() {
var s = document.createElement("script");
s.async = true;
s.src = "https://metadata-static-files.sfo2.cdn.digitaloceanspaces.com/pixel/lp.js";
s.onload = function() {
window.Metadata.pixel.init();
};
document.head.appendChild(s);
})();
</script>
<script type="text/javascript">
_linkedin_partner_id = "218281";
window._linkedin_data_partner_ids = window._linkedin_data_partner_ids || [];
window._linkedin_data_partner_ids.push(_linkedin_partner_id);
</script>
<script type="text/javascript">
(function() {
var s = document.getElementsByTagName("script")[0];
var b = document.createElement("script");
b.type = "text/javascript";
b.async = true;
b.src = "https://snap.licdn.com/li.lms-analytics/insight.min.js";
s.parentNode.insertBefore(b, s);
})();
</script>
<noscript>
<img height="1" width="1" style="display:none;" alt="" src="https://dc.ads.linkedin.com/collect/?pid=218281&fmt=gif" />
</noscript>
<script id="metadata_facebook_pixel_124">
! function(f, b, e, v, n, t, s) {
if (f.fbq) return;
n = f.fbq = function() {
n.callMethod ?
n.callMethod.apply(n, arguments) : n.queue.push(arguments)
};
if (!f._fbq) f._fbq = n;
n.push = n;
n.loaded = !0;
n.version = '2.0';
n.queue = [];
t = b.createElement(e);
t.async = !0;
t.src = v;
s = b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t, s)
}(window,
document, 'script', 'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '151855192184380');
fbq('track', 'Lead');
</script>
<noscript><img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=151855192184380&ev=PageView&noscript=1" /></noscript>
<script type="text/javascript">
(function() {
var didInit = false;
function initMunchkin() {
if (didInit === false) {
didInit = true;
Munchkin.init('709-NXN-706');
}
}
var s = document.createElement('script');
s.type = 'text/javascript';
s.async = true;
s.src = '//munchkin.marketo.net/munchkin-beta.js';
s.onreadystatechange = function() {
if (this.readyState == 'complete' || this.readyState == 'loaded') {
initMunchkin();
}
};
s.onload = initMunchkin;
document.getElementsByTagName('head')[0].appendChild(s);
})();
</script>
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:200,200i,300,300i,400,400i,600,600i,700,700i,900,900i&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://www.rstudio.com/assets/css/custom.css">
<script id="metadata_pixel_124">
! function() {
function e(e) { var t = new XMLHttpRequest; return t.open("POST", n + "insight"), t.setRequestHeader("Content-Type", "application/json"), t.send(JSON.stringify(e)) }
function t(t) { var n = function(e) { e = e.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); var t = new RegExp("[\\?&]" + e + "=([^&#]*)").exec(location.search); return null === t ? "" : decodeURIComponent(t[1].replace(/\+/g, " ")) }("cid"),
r = window.location.href,
i = document.querySelectorAll("input[id],select[id]"),
p = {}; return Array.prototype.forEach.call(i, function(e) { p[e.id] = e.value }), e({ cid: n, sfv: p, lpu: r, ip: o }).then(function() { t.submit() }) } var n = "https://platformapi.metadata.io/",
o = "",
r = new XMLHttpRequest;
r.open("GET", n + "tracking/ip"), r.onload = function() { 200 === r.status && (o = r.responseText) }, r.send(), document.addEventListener("DOMContentLoaded", function() { setTimeout(function() { if (window.lp && window.lp.jQuery && window.lp.jQuery(".lp-pom-form .lp-pom-button").length) { var e = function(e, n) { e.preventDefault(); try { t().then(function() { lp.jQuery(".lp-pom-form form").submit() }) } catch (e) { lp.jQuery(".lp-pom-form form").submit() } };
lp.jQuery(function(t) { t(".lp-pom-form .lp-pom-button").unbind("click tap touchstart").bind("click.formSubmit", function(n) { t(".lp-pom-form form").valid() && e(n) }), t("form").unbind("keypress").bind("keypress.formSubmit", function(n) { 13 === n.which && "textarea" !== n.target.nodeName.toLowerCase() && t(".lp-pom-form form").valid() && e(n) }) }) } else { var n = document.querySelectorAll("form");
Array.prototype.forEach.call(n, function(e) { e.addEventListener("submit", t.bind(e), !1) }) } }, 3e3) }, !1) }();
</script>
<script>
ga(function(){
ga_trackers=[];
ga.getAll().forEach(function(x,i){
ga_trackers.push(x.get('name'))});
ga_trackers.forEach(
function(gaName){
ga(gaName + '.require', 'Clearbit', {"mapping":{
"companyName": "dimension5",
"companyDomain": "dimension6",
"companyTags": "dimension7",
"companySector": "dimension8",
"companyIndustryGroup": "dimension9",
"companyIndustry": "dimension10",
"companySubIndustry": "dimension11",
"companyType": "dimension12",
"companyEmployeesRange": "dimension13",
"companyAlexaRank": "dimension14",
"companyCity": "dimension15",
"companyState": "dimension16",
"companyCountry": "dimension17",
"companyFunding": "dimension18",
"companyTech": "dimension19"
}
});
});
});
</script>
<script async src="https://ga.clearbit.com/v1/ga.js?authorization=pk_60c5aa2221e3c03eca10fb6876aa6df7"></script>
<script>
!function(w){var clearbit=w.clearbit=w.clearbit||[];if(!clearbit.initialize)if(clearbit.invoked)w.console&&console.error&&console.error("Clearbit snippet included twice.");else{clearbit.invoked=!0;clearbit.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","page","once","off","on"];clearbit.factory=function(t){return function(){var e=Array.prototype.slice.call(arguments);e.unshift(t);clearbit.push(e);return clearbit}};for(var t=0;t<clearbit.methods.length;t++){var e=clearbit.methods[t];clearbit[e]=clearbit.factory(e)}clearbit.load=function(t){var e=document.createElement("script");e.async=!0;e.src=("https:"===document.location.protocol?"https://":"http://")+"x.clearbitjs.com/v1/"+t+"/clearbit.js";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(e,n)};clearbit.SNIPPET_VERSION="3.1.0";
clearbit.load("pk_60c5aa2221e3c03eca10fb6876aa6df7");
clearbit.page();
}}(window);
</script>
<script>
!function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on","addSourceMiddleware","addIntegrationMiddleware","setAnonymousId","addDestinationMiddleware"];analytics.factory=function(e){return function(){var t=Array.prototype.slice.call(arguments);t.unshift(e);analytics.push(t);return analytics}};for(var e=0;e<analytics.methods.length;e++){var key=analytics.methods[e];analytics[key]=analytics.factory(key)}analytics.load=function(key,e){var t=document.createElement("script");t.type="text/javascript";t.async=!0;t.src="https://cdn.segment.com/analytics.js/v1/" + key + "/analytics.min.js";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(t,n);analytics._loadOptions=e};analytics.SNIPPET_VERSION="4.13.1";
analytics.load("5QCLCHLemBoSmOxysWvjrcIAEZWwdFhf");
analytics.page();
}}();
</script>
<script>
!function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on"];analytics.factory=function(t){return function(){var e=Array.prototype.slice.call(arguments);e.unshift(t);analytics.push(e);return analytics}};for(var t=0;t<analytics.methods.length;t++){var e=analytics.methods[t];analytics[e]=analytics.factory(e)}analytics.load=function(t,e){var n=document.createElement("script");n.type="text/javascript";n.async=!0;n.src="https://cdn.segment.com/analytics.js/v1/"+t+"/analytics.min.js";var a=document.getElementsByTagName("script")[0];a.parentNode.insertBefore(n,a);analytics._loadOptions=e};analytics.SNIPPET_VERSION="4.1.0";
analytics.load("gO0uTGfCkO4DQpfkRim9mBsjdKrehtnu");
analytics.page();
}}();
</script>
<script>
(function(h,o,t,j,a,r){
h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)};
h._hjSettings={hjid:1446157,hjsv:6};
a=o.getElementsByTagName('head')[0];
r=o.createElement('script');r.async=1;
r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv;
a.appendChild(r);
})(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv=');
</script>
<script type='text/javascript'>
window._vwo_code = window._vwo_code || (function() {
var account_id = 450622,
settings_tolerance = 2000,
library_tolerance = 2500,
use_existing_jquery = false,
is_spa = 1,
hide_element = 'body',
f = false,
d = document,
code = {
use_existing_jquery: function() { return use_existing_jquery; },
library_tolerance: function() { return library_tolerance; },
finish: function() { if (!f) { f = true; var a = d.getElementById('_vis_opt_path_hides'); if (a) a.parentNode.removeChild(a); } },
finished: function() { return f; },
load: function(a) { var b = d.createElement('script');
b.src = a;
b.type = 'text/javascript';
b.innerText;
b.onerror = function() { _vwo_code.finish(); };
d.getElementsByTagName('head')[0].appendChild(b); },
init: function() {
window.settings_timer = setTimeout('_vwo_code.finish()', settings_tolerance);
var a = d.createElement('style'),
b = hide_element ? hide_element + '{opacity:0 !important;filter:alpha(opacity=0) !important;background:none !important;}' : '',
h = d.getElementsByTagName('head')[0];
a.setAttribute('id', '_vis_opt_path_hides');
a.setAttribute('type', 'text/css');
if (a.styleSheet) a.styleSheet.cssText = b;
else a.appendChild(d.createTextNode(b));
h.appendChild(a);
this.load('https://dev.visualwebsiteoptimizer.com/j.php?a=' + account_id + '&u=' + encodeURIComponent(d.URL) + '&f=' + (+is_spa) + '&r=' + Math.random());
return settings_timer;
}
};
window._vwo_settings_timer = code.init();
return code;
}());
</script>
<link rel="alternate" type="application/atom+xml" title="Blog" href="https://www.rstudio.com/blog/index.xml" />
<script>
!function(){window.analytics||(window.analytics=[]),window.analytics.methods=["identify","track","trackLink","trackForm","trackClick","trackSubmit","page","pageview","ab","alias","ready","group","on","once","off"],window.analytics.factory=function(a){return function(){var t=Array.prototype.slice.call(arguments);return t.unshift(a),window.analytics.push(t),window.analytics}};for(var a=0;a<window.analytics.methods.length;a++){var t=window.analytics.methods[a];window.analytics[t]=window.analytics.factory(t)}analytics.load=function(a){if(!document.getElementById("dreamdata-analytics")){window.a=window.analytics;var t=document.createElement("script");t.async=!0,t.id="dreamdata-analytics",t.type="text/javascript",t.src="https://cdn.dreamdata.cloud/scripts/analytics/v1/dreamdata.min.js";var n=function(){if(analytics&&analytics.initialize)for(analytics.initialize({"Dreamdata.io":{apiKey:a}});window.a.length>0;){var t=window.a.shift(),n=t.shift();analytics[n]&&analytics[n].apply(analytics,t)}};t.addEventListener?t.addEventListener("load",function(){n()},!1):t.onreadystatechange=function(){"complete"!=this.readyState&&"loaded"!=this.readyState||n()};var i=document.getElementsByTagName("script")[0];i.parentNode.insertBefore(t,i)}},analytics.load("fb7d8208-7386-4584-87de-7b4d3a64fa70"),analytics.page()}();
</script>
</head>
<body class="blank-page sidebar-article sidebar-collapse">
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-TLQTK9R"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<div class="alert" id="alert-conf" role="alert" style="margin-bottom: 0px; padding: 5px;background-color:#000000;">
<div class="desktop container pb-0 text-center">
<div class="row">
<div class="col-md-12 py-4 pl-2">
<p class="d-inline pt-1 pr-3 p-95" style=" font-size: 1em;"><a href="https://posit.co" style="color: #ffffff;">
Pardon the interruption as we migrate content to our new site. Visit <span style="color: #EE6331; font-size: 1em;" href="https://posit.co"><b>posit.co</b></span> for our full site.
<img src="https://d33wubrfki0l68.cloudfront.net/8a29c867135154b28b826043d1d462b6b93b0c14/41c78/assets/img/posit-icon.png" width="22px" class="my-0"></a>
</p>
</div>
</div>
</div>
<div class="mobile container px-3 pb-0 text-center" >
<div class="row">
<div class="col-md-12 py-4 pl-2">
<p class="d-inline pt-1 pr-3 p-95" style=" font-size: 1em;"><a href="https://posit.co" style="color: #ffffff;">
Pardon the interruption as we migrate content to our new site. Visit <span style="color: #EE6331; font-size: 1em;" href="https://posit.co"><b>posit.co</b></span> for our full site.
<img src="https://d33wubrfki0l68.cloudfront.net/8a29c867135154b28b826043d1d462b6b93b0c14/41c78/assets/img/posit-icon.png" width="22px" class="my-0"></a>
</p>
</div>
</div>
</div>
</div>
<div class="wrapper">
<div class="none none" filter-color="blue">
<div class="page-header-image" data-parallax="false" style="background-image: url('https://www.rstudio.com/assets/img/clearpixel.png'); background-position: center center; background-color: #999999;">
</div>
<div class="container">
<div class="content-center">
<h1 style="display:none" class="title">Load testing Shiny </h1>
<div>
<div style="display:none"> shinyloadtest and shinycannon are two new tools that work together to help you answer the question: how many users can my app support? </div>
</div>
</div>
</div>
</div>
<div class="section" style="background-color: #ffffff;">
<div id="accordion3" role="tablist" aria-multiselectable="true" class="card-collapse secondary-nav mobile sticky-top">
<div class="card card-plain" style="border-bottom: solid 1px rgba(117, 170, 219, .2);">
<div class="card-header" role="tab" id="headingOne">
<a data-toggle="collapse" data-parent="#accordion3" href="#collapseThree" aria-expanded="false" aria-controls="collapseThree" class="collapsed">
Videos Menu
<i class="now-ui-icons arrows-1_minimal-down"></i>
</a>
</div>
<div id="collapseThree" class="collapse" role="tabpanel" aria-labelledby="headingOne">
<div class="card-body">
<nav class="w-100 align-self-start sticky-top sidebar" id="myScrollspy">
<ul class="nav nav-pills flex-column w-100">
<li class="nav-item">
<a class="nav-link" href="/resources/webinars/">Webinars</a>
</li>
<li class="nav-item">
<a class="nav-link" target="_blank" href="/data-science-hangout/">Data Science Hangout</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/collections/rstudio-essentials/">RStudio Essentials</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/collections/data-science-essentials/">Data Science Essentials</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/collections/advanced-data-science/">Advanced Data Science</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/collections/working-with-spark/">Working with Spark</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/collections/product-videos/">Product Videos</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/collections/rstudio-pro-administration/">RStudio Pro Administration</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/collections/espanol/">Materiales en Español</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/resources/additional-talks/">Additional Talks</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/collections/community/">Community</a>
</li>
<li class="nav-item dropdown">
<div id="accordion3" role="tablist" aria-multiselectable="true" class="card-collapse">
<div class="card card-plain mb-0" style=" background: none;">
<div class="card-header" role="tab">
<a style="font-size: 15px;line-height: 23px;cursor: pointer;"class="collapsed mobile-menu-parent-anchor" data-toggle="collapse" data-target="#collapseMobile" aria-expanded="false" aria-controls="collapseThree">
Conferences by year
<i class="now-ui-icons arrows-1_minimal-down"></i>
</a>
</div>
<div id="collapseMobile" class="collapse" aria-labelledby="headingOne" data-parent="#accordion3">
<div class="mobile-menu-child-1 card-body pt-0">
<a class=" d-block"href="/resources/rstudioglobal-2021/">rstudio::global 2021</a>
<a class=" d-block"href="/resources/rstudioconf-2020/">rstudio::conf 2020</a>
<a class=" d-block"href="/resources/rstudioconf-2019/">rstudio::conf 2019</a>
<a class=" d-block"href="/resources/rstudioconf-2018/">rstudio::conf 2018</a>
<a class=" d-block"href="/resources/rstudioconf-2017/">rstudio::conf 2017</a>
<a class=" d-block"href="/resources/shiny-dev-con-2016/">Shiny Dev Con 2016</a>
</div>
</div>
</div>
</div>
</li>
</ul>
</nav>
</div>
</div>
</div>
</div>
<div class="container ">
<div class="row">
<div class="col-md-12 ml-auto mr-auto text-left">
<div data-spy="scroll" data-target="#myScrollspy" data-offset="140">
<div class="container-fluid">
<div class="row">
<nav class="col-sm-3 col-4 desktop align-self-start sticky-top sidebar pl-0 pr-5" id="myScrollspy">
<div class="collapse navbar-collapse flex-column ml-lg-0 ml-3 pt-3" id="navbarCollapse" style="overflow: auto;">
<ul class="nav nav-pills flex-column">
<li class="nav-item">
<a class="nav-link" href="/resources/webinars/">Webinars</a>
</li>
<li class="nav-item">
<a class="nav-link" target="_blank" href="/data-science-hangout/">Data Science Hangout</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/collections/rstudio-essentials/">RStudio Essentials</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/collections/data-science-essentials/">Data Science Essentials</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/collections/advanced-data-science/">Advanced Data Science</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/collections/working-with-spark/">Working with Spark</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/collections/product-videos/">Product Videos</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/collections/rstudio-pro-administration/">RStudio Pro Administration</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/collections/espanol/">Materiales en Español</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/resources/additional-talks/">Additional Talks</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/collections/community/">Community</a>
</li>
<li class="nav-item dropdown">
<div id="accordion3" role="tablist" aria-multiselectable="true" class="card-collapse">
<div class="card card-plain mb-0">
<div class="card-header" role="tab">
<a style="cursor: pointer;padding-left:16px;" class="collapsed mobile-menu-parent-anchor" data-toggle="collapse" data-target="#collapseThree" aria-expanded="false" aria-controls="collapseThree">
Conferences by year
<i style="font-size:15px;line-height: 14px !important;cursor: pointer;" class=" now-ui-icons arrows-1_minimal-down"></i>
</a>
</div>
<div id="collapseThree" class="collapse" aria-labelledby="headingOne" data-parent="#accordion3">
<div class="mobile-menu-child-1 card-body pt-0">
<a class=" d-block"href="/resources/rstudioglobal-2021/">rstudio::global 2021</a>
<a class="d-block" href="/resources/rstudioconf-2020/">rstudio::conf 2020</a>
<a class="d-block" href="/resources/rstudioconf-2019">rstudio::conf 2019</a>
<a class="d-block" href="/resources/rstudioconf-2018">rstudio::conf 2018</a>
<a class="d-block" href="/resources/rstudioconf-2017">rstudio::conf 2017</a>
<a class="d-block" href="/resources/shiny-dev-con-2016">Shiny Dev Con 2016</a>
</div>
</div>
</div>
</div>
</li>
</ul>
</nav>
<div class="col-lg-9 pt-3">
<div class="pb-2">
<script src="https://fast.wistia.com/embed/medias/044vu2h9wx.jsonp" async></script><script src="https://fast.wistia.com/assets/external/E-v1.js" async></script><div class="wistia_responsive_padding" style="padding:57.25% 0 0 0;position:relative;"><div class="wistia_responsive_wrapper" style="height:100%;left:0;position:absolute;top:0;width:100%;"><div class="wistia_embed wistia_async_044vu2h9wx videoFoam=true controlsVisibleOnLoad=false" style="height:100%;position:relative;width:100%"><div class="wistia_swatch" style="height:100%;left:0;opacity:0;overflow:hidden;position:absolute;top:0;transition:opacity 200ms;width:100%;"><img src="https://fast.wistia.com/embed/medias/044vu2h9wx/swatch" style="filter:blur(5px);height:100%;object-fit:contain;width:100%;" alt="" aria-hidden="true" onload="this.parentNode.style.opacity=1;" /></div></div></div></div>
<div class="pt-4">
<p class="mb-0 pt-2">
<a class="event-tag mb-0 pr-3" href="/resources/webinars">Webinars</a>
</p>
</div>
<div class="pt-0 mt-0">
<p class="h2 mt-1" style="color: #444;">Load testing Shiny </p>
</div>
<ul class="d-inline pl-0 pr-0">
<l1 class="d-inline pr-2">
<b><a style="color: #404040;font-size: 90%;" href="https://www.rstudio.com/authors/alan-dipert/">Alan Dipert</a></b>
</l1> <span style="font-size: 80%">| </span><span class="pr-2"></span>
</ul>
<span style="display:true">
<p class="p-90 d-inline" >September 6, 2018</p></span>
</div>
<div class="pt-3">
<p>shinyloadtest (https://github.com/rstudio/shinyloadtest) and shinycannon (https://github.com/rstudio/shinycannon) are two new tools that work together to help you answer the question: how many users can my app support? I’ll demonstrate using shinyloadtest to produce a “recording” of an interaction with a Shiny app, and then I’ll show how to use shinycannon to “play back” that recording, generating load. Then I’ll bring the data produced by the load test back into R for analysis. Finally, I’ll interpret the results and discuss techniques for increasing the number of users a Shiny app can support.</p>
</div>
<hr class="mt-5 mb-4">
<h3 class="mb-0 pt-3">
About the speaker
</h3>
<div class="row team mt-5">
<div class="col-md-2">
<div class="img-container mx-auto" style="background-image: url(/assets/img/authors/alan-dipert.png);background-size: cover;float: none;">
</div>
</div>
<div class="offset-md-1 col-md-9">
<div class="mt-1 mb-2">
<h5 class="d-inline font-600"><a class="gray-text" href="/authors/alan-dipert">Alan Dipert</a></h5>
<span class="mx-1"> / </span>
<p class="d-inline p-90"></p>
</div>
<p class="p-90">Alan is a software engineer on the Shiny team at RStudio. In the past, he’s helped build web applications, reporting pipelines, and many things between. When he’s not working, Alan likes to spend his time reading or being with his family.</p>
<ul class="social-buttons mb-0 mr-3 d-inline">
<li>
<a target="_blank" rel="noopener noreferrer" href="https://twitter.com/alandipert" class="btn-twitter pr-1">
<i class="fab fa-twitter circle text-center"></i>
</a>
</li>
<li>
<a target="_blank" rel="noopener noreferrer" href="https://github.com/alandipert" class="btn-github pr-1">
<i class="fab fa-github circle"></i>
</a>
</li>
<li>
<a class="btn btn-default btn-sm pt-1 pb-1 pl-3 pr-3" style="border: 1px solid #404040 !important;font-size:12px;font-weight: 600;" href="/authors/alan-dipert">More by Alan Dipert</a>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="rstudio-search-box"></div>
</div>
</body>
<script src="/assets/js/core/jquery.min.js" type="text/javascript"></script>
<script src="/assets/js/core/bootstrap.bundle.min.js" type="text/javascript"></script>
<script src="https://gitcdn.github.io/bootstrap-toggle/2.2.2/js/bootstrap-toggle.min.js"></script>
<script src="/assets/js/plugins/bootstrap-lightbox.js" type="text/javascript"></script>
<script src="/assets/js/now-ui-kit.js"></script>
<script src="/assets/js/plugins/stickyfill.min.js"></script>
<script src="/assets/js/plugins/bootstrap-switch.js"></script>
<script src="/assets/js/plugins/bootstrap-tagsinput.js"></script>
<script src="/assets/js/plugins/bootstrap-selectpicker.js"></script>
<script src="/assets/js/plugins/nouislider.min.js"></script>
<script src="/assets/js/plugins/moment.min.js" type="text/javascript"></script>
<script src="/assets/js/plugins/bootstrap-datetimepicker.js"></script>
<script type="text/javascript">
function scrollToDownload() {
if ($('.section-download').length != 0) {
$("html, body").animate({
scrollTop: $('.section-download').offset().top
}, 1000);
}
}
</script>
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML' async></script>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({ tex2jax: { inlineMath: [['$','$'], ['\\(','\\)']] } });
</script>
<script src="//cdn.rawgit.com/noelboss/featherlight/1.7.13/release/featherlight.min.js" type="text/javascript" charset="utf-8"></script>
<script src="/assets/js/algolia.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
$('[data-toggle=searchFormOpen]').click(function() {
$('.st-search-container').fadeIn();
setTimeout(function(){
$('#searchInputText').focus();
});
});
$('[data-toggle=searchFormClose]').click(function() {
$('.st-search-container').fadeOut()
});
function closeSwiftSearchMenuBar(event) {
if($('.st-search-container').is(":visible")) {
if($(event.target).closest('.st-default-autocomplete').length === 0) {
$('.st-search-container').fadeOut();
}
}
}
$(document).click(function(event) {
if($(event.target).closest('.st-search-container').length === 0 && $(event.target).closest('[data-toggle=searchFormOpen]').length === 0) {
closeSwiftSearchMenuBar(event);
}
});
$(document).keydown(function(event) {
if (event.keyCode == 27) {
closeSwiftSearchMenuBar(event);
}
});
$('.mobile-menu-parent-anchor').on("click", function() {
$('#collapseOpenSource').collapse('hide');
$('#collapsehosted').collapse('hide');
$('#collapseprofessional').collapse('hide');
});
function toggleDropdown (e) {
const _desktopDropdown = $(e.target).closest('.desktop-dropdown-hover'),
_desktopMenu = $('.dropdown-menu', _desktopDropdown);
setTimeout(function(){
const shouldOpen = e.type !== 'click' && _desktopDropdown.is(':hover');
_desktopMenu.toggleClass('show', shouldOpen);
_desktopDropdown.toggleClass('show', shouldOpen);
$('[data-toggle="dropdown"]', _desktopDropdown).attr('aria-expanded', shouldOpen);
}, e.type === 'mouseleave' ? 0 : 0);
}
$('body')
.on('mouseenter mouseleave','.desktop-dropdown-hover',toggleDropdown)
.on('click', '.desktop-dropdown-menu-hover a', toggleDropdown);
$(".scrolling-anchor-link").click(function(event) {
event.preventDefault();
var anchorId = $(this).attr("href");
$('html,body').animate({scrollTop: $(anchorId).offset().top},'slow');
});
$('[data-ls-toggle="popover"]').popover({
placement : 'left',
html : true,
title : 'SHA-256 <a style="margin-top: -5px; font-size: 1.3rem; color: white;" href="#" class="close" data-dismiss="alert">×</a>'
});
$(document).on("click", ".popover .close" , function(){
$(this).parents(".popover").popover('hide');
});
});
</script>
<script type="text/javascript">
$(function(){
var $el = $('.parallax-bg');
if ($el.length == 0) {
return;
}
$(window).scroll(function () {
para($el);
});
para($el);
});
var speed = .8;
function para($el) {
var diff = $(window).scrollTop() - $el.offset().top;
var yPos = -(diff * speed);
var coords = '50%' + yPos + 'px';
$el.css({
backgroundPosition: coords
});
}
</script>
<script type="text/javascript">
if (navigator.platform.indexOf("Mac") >= 0) {
document.body.classList.add("os-macintosh");
} else if (navigator.userAgent.indexOf("Win") >= 0) {
document.body.classList.add("os-windows");
} else if (navigator.userAgent.indexOf("Linux") >= 0) {
document.body.classList.add("os-linux");
} else {
document.body.classList.add("os-unknown");
}
</script>
<script type="text/javascript">
function addNoOpener(link) {
let linkTypes = (link.getAttribute('rel') || '').split(' ');
if (!linkTypes.includes('noopener')) {
linkTypes.push('noopener');
}
link.setAttribute('rel', linkTypes.join(' ').trim());
}
function addNewTabMessage(link) {
if (!link.querySelector('.screen-reader-only')) {
link.insertAdjacentHTML('beforeend', '<span class="screen-reader-only">(opens in a new tab)</span>');
}
}
document.querySelectorAll('a[target="_blank"]').forEach(link => {
addNoOpener(link);
addNewTabMessage(link);
});
</script>
</html>