diff --git a/materials/d1-03-performance/index.html b/materials/d1-03-performance/index.html
index a2e2e4a..e9cba74 100644
--- a/materials/d1-03-performance/index.html
+++ b/materials/d1-03-performance/index.html
@@ -10,7 +10,6 @@
-
Shiny in Production - Performance
@@ -399,13 +398,21 @@
Performance
posit::conf(2023) Shiny in Production: Tools & Techniques
+
+
+
+
+{profvis}: an R package for profiling R code (including Shiny apps)
+
What is {profvis}?
@@ -478,6 +485,66 @@ Demo!
Describe the flamegraph, change the filters to only show events that took time
Navigate to the ‘data’ tab and discuss what took the most time
+
+
+
+
+
+What are .parquet files?
+
+.parquet is a columnar storage format
+.parquet files not only store data, but they also store metadata about your data (i.e., data types for each column, number of rows in the file, etc.)
+Smaller files
+Faster read speed
+
+
+
+HOT TAKE INCOMING: parquet is the new csv
+parquet files typically are the data structure that lives behind projects like the open source Delta Lake
+faster across pretty much all benchmarks
+
+
+
+
+What is the {arrow} R package?
+
+Part of the larger Apache Arrow project
+Connect to your data with {arrow}…
+… and query it with {dplyr}
+
+
+
Apache Arrow Homepage
+
Shiny + Arrow Article
+
+
+“multi-language toolbox for accelerated data interchange and in-memory processing”
+I.e., a set of data manipulation standards (particularly against parquet files) that has been implemented in a bunch of languages including R, Python, Rust, Go, and more
+{arrow} let’s you use {dplyr} verbs against a single parquet file (or, perhaps more importantly, a set of parquet files) to query the data in those files
+When it comes to building Shiny apps, we should look for easy places where we can gain efficiency & speed to improve our user experience (you don’t want users waiting 20 seconds for your data prep logic to run against a single massive csv); it’s very likely that the combination of .parquet + {arrow} + {dplyr} can meet your app performance needs (it does for at least 95% of my use cases – there are very few cases where I have to go beyond that and start looking into other engines for faster data manipulation)
+