Table of Contents Introduction fetchLater API Why Deferred Fetches Evolution from Pending Beacon What I Got Wrong Last Time fetchLater Experiments Methodology Reliability of XMLHttpRequest vs. sendBeacon() vs. fetchLater Beacon in Event Handlers onload pagehide or visibilitychange onload or pagehide or visibilitychange Conclusion Reliability of fetchLater() using activateAfter Follow-Ups How We’re Going to Use it […] The post Beaconing In Practice: fetchLater() first appeared on NicJ.net.| NicJ.net
Table of Contents Introduction Pending Beacon API Why Pending Beacons? Pending Beacon Experiments Methodology Reliability of XMLHttpRequest vs. sendBeacon() vs. Pending Beacon in Event Handlers onload pagehide or visibilitychange onload or pagehide or visibilitychange Conclusion Reliability of Pending Beacon "now" vs "backgroundTimeout" Reliability of Pending Beacon "backgroundTimeout" once vs. sendBeacon() in Event Handlers Misc Findings […] The post Beaconing in Practice: An Update on Rel...| NicJ.net
At performance.now() 2022, I gave a talk titled "Modern Metrics (2022)". Here’s the description: What is a “modern” metric anyway? An exploration on how to measure and evaluate popular (and experimental) web performance metrics, and how they affect user happiness and business goals. We’ll talk about how data can be biased, and how best to […] The post Modern Metrics first appeared on NicJ.net.| NicJ.net
Table of Contents The JS Self-Profiling API What is Sampled Profiling? Downsides to Sampled Profiling API Document Policy API Shape Sample Interval Buffer Who to Profile When to Profile Specific Operations User Interactions Page Load Overhead Anatomy of a Profile Beaconing Size Compression Analyzing Profiles Individual Profiles Bulk Profile Analysis Gotchas Minified JavaScript Named Functions […] The post JS Self-Profiling API In Practice first appeared on NicJ.net.| NicJ.net
Table of Contents Introduction Across the Web By Industry By Page Group Desktop vs. Mobile vs. Bounce Rate vs. Session Length vs. Page Load Time vs. Rage Clicks What’s Next? Introduction This is a companion post to Cumulative Layout Shift in Practice, which goes over what Cumulative Layout Shift (CLS) is, how it can be […] The post Cumulative Layout Shift in the Real World first appeared on NicJ.net.| NicJ.net
Table of Contents Introduction What is Cumulative Layout Shift? Why is it important? Definition When Does it End? Single Page Apps (SPAs) IFRAMEs How to Improve It How to Measure It RUM Example Code Attribution Fallbacks Browser Support Gotchas Open-Source / Free RUM Commercial RUM Synthetic Free Synthetic Developer Tools Commercial Synthetic Monitoring Tools RUM […] The post Cumulative Layout Shift in Practice first appeared on NicJ.net.| NicJ.net
At FOSDEM 2020, I talked about our recent Boomerang Performance Audit and the improvements we’ve made since: Here’s the description: Boomerang is an open-source Real User Monitoring (RUM) JavaScript library used by thousands of websites to measure their visitor’s experiences. The developers behind Boomerang take pride in building a reliable and performant third-party library that […] The post Check Yourself Before You Wreck Yourself: Auditing and Improving the Performance of Boomerang...| NicJ.net
Table Of Contents Introduction Boomerang Loader Snippet Improvements ResourceTiming Compression Optimization Debug Messages Minification Cookie Size Cookie Access MD5 plugin SPA plugin Brotli Performance Test Suite Next Boomerang is an open-source JavaScript library that measures the page load experience of real users, commonly called RUM (Real User Measurement). Boomerang is used by thousands of websites […] The post Boomerang Performance Update first appeared on NicJ.net.| NicJ.net
Table Of Contents Introduction What is Boomerang Doing Fixing Script Error Workarounds for Third Parties that Aren’t Sending ACAO Disabling Wrapping Side Effects of Wrapping Overhead Console Logs Browser CPU Profiling Chrome Lighthouse and Page Speed Insights WebPagetest Summary Introduction TL;DR: If you don’t have time to read this article, head down to the summary. […] The post Side Effects of Boomerang’s JavaScript Error Tracking first appeared on NicJ.net.| NicJ.net
3rdParty.io is a new tool I’ve released to evangelize best-practices for third-party scripts and libraries: 3rdParty.io is a YSlow-like developer tool that’s designed to run best-practice checklists on third-party scripts and libraries. While YSlow and other great synthetic testing tools (such as Chrome’s Lighthouse) perform audits on entire websites, 3rdParty.io focuses on individual third-party JavaScript […] The post 3rdParty.io first appeared on NicJ.net.| NicJ.net
At Fluent 2018, Charlie Vazac and I gave a talk titled When Third Parties Stop Being Polite… and Start Getting Real. Here’s the abstract: Would you give the Amazon Prime delivery robot the key to your house, just because it stops by to deliver delicious packages every day? Even if you would, do you still […] The post When Third Parties Stop Being Polite… and Start Getting Real first appeared on NicJ.net.| NicJ.net
Table Of Contents Introduction How to gather ResourceTiming data How cross-origins play a role 3.1 Cross-Origin Resources 3.2 Cross-Origin Frames Why does this matter? 4.1 Third-Party Scripts 4.2 Ads 4.3 Page Weight Real-world data Workarounds Summary 1. Introduction ResourceTiming is a specification developed by the W3C Web Performance working group, with the goal of exposing […] The post ResourceTiming Visibility: Third-Party Scripts, Ads and Page Weight first appeared on NicJ.net.| NicJ.net
Table Of Contents Introduction Methodology Audit Boomerang Lifecycle Loader Snippet mPulse CDN boomerang.js size boomerang.js Parse Time boomerang.js init() config.json (mPulse) Work at onload The Beacon Work beyond onload Work at Unload TL;DR Summary Why did we write this article? 1. Introduction Boomerang is an open-source JavaScript library that measures the page load experience of […] The post An Audit of Boomerang’s Performance first appeared on NicJ.net.| NicJ.net
At Fluent 2017, Shubhie Panicker and I talked Reliably Measuring Responsiveness in the Wild. Here’s the abstract: Responsiveness to user interaction is crucial for users of web apps, and businesses need to be able to measure responsiveness so they can be confident that their users are happy. Unfortunately, users are regularly bogged down by frustrations […] The post Reliably Measuring Responsiveness in the Wild first appeared on NicJ.net.| NicJ.net
Philip Tellis and I gave a tutorial on Measuring Real User Performance in the Browser at Velocity New York 2016. Slides can be found at Slideshare: In the tutorial, we cover everything you need to know about measuring your visitors’ experience (also known as Real User Monitoring, or RUM): History of Real User Measurement Browser Performance […] The post Measuring Real User Performance in the Browser first appeared on NicJ.net.| NicJ.net
Nigel Heron and I gave a talk about Accelerated Mobile Pages (AMP) at Velocity New York 2016. We have slides available on Slideshare: In this talk, we dig into AMP to determine whether or not it gives your visitors a better page load experience. We cover: What is AMP? Why should AMP pages be faster? How do we measure the real […] The post AMP: Does it Really Make Your Site Faster? first appeared on NicJ.net.| NicJ.net
Your site’s page load performance is important (and there are tools like Boomerang to measure it), but how good is your visitor’s experience as they continue to interact with your site after it has loaded? At Velocity 2016, Philip Tellis and I talked about how you can measure their experience (and emotion!) in Measuring Continuity: […] The post Measuring Continuity first appeared on NicJ.net.| NicJ.net
After how much fun I had building a cheap and simple Spark Core Water Sensor for my sump-pump, I’m now using a Photon (which is half of the price of the Spark Core) for remote temperature and humidity logging for my kegerator (keezer). For just $24, you can have a remote sensor logging data to Adafruit.io, […] The post Particle Photon/Electron Remote Temperature and Humidity Logger first appeared on NicJ.net.| NicJ.net
UserTiming is a modern browser performance API that gives developers the ability the mark important events (timestamps) and measure durations (timestamp deltas) in their web apps. For an in-depth overview of how UserTiming works, you can see my article UserTiming in Practice or read Steve Souders’ excellent post with several examples for how to use […] The post Compressing UserTiming first appeared on NicJ.net.| NicJ.net
Another talk Philip Tellis and I gave at Velocity New York 2015 was about the forensic tools we use for investigating performance issues. Check it out on Slideshare: In this talk, we cover a variety of tools such as WebPagetest, tcpdump, Wireshark, Cloudshark, browser developer tools, Chrome tracing, netlog, Fiddler, RUM, TamperMonkey, NodeJS, virtualization, Event Tracing for […] The post Forensic Tools for In-Depth Performance Investigations first appeared on NicJ.net.| NicJ.net
Philip Tellis and I recently gave this talk at Velocity New York 2015. Check out the slides on Slideshare: In the talk, we discuss the three main challenges of measuring the performance of SPAs, and how we’ve been able to build SPA performance monitoring into Boomerang. The talk is also available on YouTube. The post Measuring the Performance of Single Page Applications first appeared on NicJ.net.| NicJ.net
Last updated: May 2021 Table Of Contents Introduction How was it done before? 2.1. What’s Wrong With This? Marks and Measures 3.1. How to Use 3.2. Example Usage 3.3. Standard Mark Names 3.4. UserTiming Level 3 3.5. Arbitrary Timestamps 3.6. Arbitrary Metadata Benefits Developer Tools Use Cases Compressing Availability Using NavigationTiming Data Conclusion Updates Introduction […] The post UserTiming in Practice first appeared on NicJ.net.| NicJ.net
Last updated: May 2021 Table Of Contents Introduction How was it done before? How to use 3.1 Interlude: PerformanceTimeline 3.2 ResourceTiming 3.3 Initiator Types 3.4 What Resources are Included 3.5 Crawling IFRAMEs 3.6 Cached Resources 3.7 304 Not Modified 3.8 The ResourceTiming Buffer 3.9 Timing-Allow-Origin 3.10 Blocking Time 3.11 Content Sizes 3.12 Service Workers 3.13 […] The post ResourceTiming in Practice first appeared on NicJ.net.| NicJ.net
Last updated: May 2021 Table Of Contents Introduction How was it done before? 2.1. What’s Wrong With This? Interlude: DOMHighResTimestamp 3.1. Why Not the Date Object? Accessing NavigationTiming Data 4.1. NavigationTiming Timeline 4.2. Example Data 4.3. How to Use 4.4. NavigationTiming2 4.5. Service Workers Using NavigationTiming Data 5.1 DIY 5.2 Open-Source 5.3 Commercial Solutions Availability […] The post NavigationTiming in Practice first appeared on NicJ.net.| NicJ.net
You know that performance matters, right? Just a few seconds slower and your site could be turning away thousands (or millions) of visitors. Don’t take my word for it: there are plenty of case studies, articles, findings, presentations, charts and more showing just how important it is to make your site load quickly. Google is […] The post Measuring the Performance of Your Web Apps first appeared on NicJ.net.| NicJ.net
Presented at the Lansing JavaScript Meetup: Slides are available on Slideshare or Github. The post JavaScript Module Patterns first appeared on NicJ.net.| NicJ.net
Presented at CodeMash 2015: The post Make It Fast – CodeMash 2015 first appeared on NicJ.net.| NicJ.net
At SOASTA, we’re building tools and services to help our customers understand and improve the performance of their websites. Our mPulse product utilizes Real User Monitoring to capture data about page-load performance. For browser-side data collection, mPulse uses Boomerang, which beacons every single page-load experience back to our real time analytics engine. Boomerang utilizes NavigationTiming […] The post Compressing ResourceTiming first appeared on NicJ.net.| NicJ.net
Last night at GrNodeDev I gave a small presentation on Sails.js, an awesome Node.js web framework built on top of Express. Slides are available on Slideshare and Github: The post Sails.js Intro first appeared on NicJ.net.| NicJ.net
I’ve been playing around with a Spark Core, which is a small, cheap ($39) Wifi-enabled Arduino-compatible device. As a software guy, I don’t do much with hardware, but the Spark Core makes it really easy to get going. Anyways, I was able to hook up a Grove Water Sensor to it, and have it mounted […] The post Spark Core Water Sensor first appeared on NicJ.net.| NicJ.net
I was part of a panel during last night’s GrDevNight discussing cross-platform mobile development. Afterwards, I gave a short presentation on Appcelerator: The post Appcelerator Titanium Intro (2014) first appeared on NicJ.net.| NicJ.net
Today Brian Anderson, Jason Sich and I gave a presentation at GLSEC 2014 titled The Happy Path: Migration Strategies for Node.js. It is available on Slideshare: The presentation and code examples are also available on Github. The post The Happy Path: Migration Strategies for Node.js first appeared on NicJ.net.| NicJ.net
I run advertising on several of my websites, mostly through Google AdSense. My sites are free communities that don’t otherwise sell products, so advertising is the main way I cover operational expenses. AdSense has been a great partner over the years and the ads they serve aren’t too obtrusive. However, I realize that many people […] The post adblock-detector.js first appeared on NicJ.net.| NicJ.net
I gave a small presentation on using Phing as a PHP build system for GrPhpDev on 2014-02-11. It’s available on SlideShare: The presentation and examples are also available on Github. The post Using Phing for Fun and Profit first appeared on NicJ.net.| NicJ.net
Several years ago I wrote a small tool called ChecksumVerifier. It maintains a database of files and their checksums, and helps you verify that the files have not changed. I use it on my external hard drive backups to validate that the files are not being corrupted due to bitrot or other disk corruption. At […] The post ChecksumVerifier – A Windows Command-Line Tool to Verify the Integrity of your Files first appeared on NicJ.net.| NicJ.net
My original Minifig Collector app (which was the first Android app I ever created), which has seen over 150,000 installs, just got a major facelift and some new features version 11.0. It now has a more modern-looking UI, can import/export your figures to Brickset, and let’s you finger-swipe back and forth. Check it out! Screenshots: The post Minifig Collector v11.0 first appeared on NicJ.net.| NicJ.net
Over the past few weeks I’ve been working on a new version 2.0 of the Unofficial LEGO® Minifigure Catalog app. We’ve just released the version 2.0 to the Apple iTunes and Google Play App stores. Version 2.0 introduces tablet support along with a complete visual facelift. In addition, there are several performance improvements that make […] The post Unofficial LEGO® Minifigure Catalog v2.0 first appeared on NicJ.net.| NicJ.net
A few months ago I released SaltThePass.com, which is a password generator that will help you generate unique, secure passwords for all of the websites you visit based on a single Master Password that you remember. I’ve been working on a mobile / offline iOS and Android app that gives you all of the features of the saltthepass.com […] The post SaltThePass mobile app now available on iTunes, Google Play and Amazon first appeared on NicJ.net.| NicJ.net
This morning I woke up to several website monitoring alarms going off. My websites were becoming intermittently unavailable due to extremely high server load (>190). It appears nicj.net had been under a WordPress comment-SPAM attack from thousands of IP addresses overnight. After a few hours of investigation, configuration changes and cleanup, I think I’ve resolved […] The post How to deal with a WordPress wp-comments-post.php SPAM attack first appeared on NicJ.net.| NicJ.net
Thanks to Christoph‘s hard work taking photos of all 529 minifigures released in 2012, the 2012 minifigs are now available for purchase in the Unofficial Minifigure Catalog app. To purchase the update, first update the database to the latest version (Settings > Database) and then go to Settings > Collections and look for the purchase button. The post 2012 Minifigures Available first appeared on NicJ.net.| NicJ.net
UserTiming is one of the W3C specs that I helped design while working at Microsoft through the W3C WebPerf working group. It helps developers measure the performance of their web applications by giving them access to high precision timestamps. It also provides a standardized API that analytics scripts and developer tools can use to display […] The post UserTiming.js first appeared on NicJ.net.| NicJ.net
It’s not you, it’s me. A few months ago I released a small JavaScript micro-framework: breakup.js Serially enumerating over a collection (such as using async.forEachSeries()in Node.js or jQuery.each() in the browser) can lead to performance and responsiveness issues if processing or looping through the collection takes too long. In some browsers, enumerating over a large […] The post breakup.js first appeared on NicJ.net.| NicJ.net
As many geeks do, I have a collection of about 30-odd domain names that I’ve purchased over the past few years for awesome-at-the-time ideas that I just never found the time to work on. Last month, I resolved stop collecting these domains and instead make some visible progress on them, one at a time. SaltThePass […] The post SaltThePass.com first appeared on NicJ.net.| NicJ.net
Last night I gave a short presentation on Using Modern Browser APIs to Improve the Performance of Your Web Applications at GrWebDev. It’s available on SlideShare: Two other presentations I gave late last year are available here as well: Debugging IE Performance issues with Xperf, ETW and NavigationTiming Appcelerator Titanium Intro The post Using Modern Browser APIs to Improve the Performance of Your Web Applications first appeared on NicJ.net.| NicJ.net
I have a Windows 7 Media Center PC hooked up to the TV in our living room. It’s paired to a 4-stream Ceton CableCard adapter and is great for watching both TV and movies. Sometimes I need to Remote Desktop (RDP) into the machine to install updates or make other changes. During this, and after logging out, […] The post Switch your HTPC back to Media Center after logging out of Remote Desktop first appeared on NicJ.net.| NicJ.net
PngOut is a command-line tool that can losslessly reduce the file size of your PNGs. In many cases, it can reduce the size of a PNG by 10-15%. I’ve even seen some cases where it was able to reduce the file size by over 50%. There are several other PNG compression utilties out there, such […] The post PngOutBatch: Optimize your PNGs by running PngOut multiple times first appeared on NicJ.net.| NicJ.net
I’ve created a small set of scripts that allows you to use Amazon Web Services to backup files to your own personal “cloud”. It’s available at GitHub for you to download or fork. Features Uses rsync over ssh to securely backup your Windows machines to Amazon’s EC2 (Elastic Compute Cloud) cloud, with persistent storage provided […] The post DIY Cloud Backup using Amazon EC2 and EBS first appeared on NicJ.net.| NicJ.net
Every once in a while, I need to rename a bunch of files. Instead of hand-typing all of the new names, sometimes a nice regular expression would get the job done a lot faster. While there are a couple Windows GUI regular expression file renamers, I enjoy doing as much as I can from the […] The post Windows command-line regular expression renaming tool: RenameRegex first appeared on NicJ.net.| NicJ.net
During the past few months, several of my websites have been the target of some sort of SPAM attack. After my getting alerted that my servers were under high load (from Cacti), I found that a small number of IP addresses were loading and re-loading or POSTing to the same pages over and over again.| NicJ.net - Home to Nic Jansma, a software developer at Akamai building high-p...
Home to Nic Jansma, a software developer at Akamai building high-performance websites, apps and open-source tools.| NicJ.net - Home to Nic Jansma, a software developer at Akamai building high-p...
This article will look at several strategies for reliably exfiltrating telemetry -- aka beaconing.| NicJ.net - Home to Nic Jansma, a software developer at Akamai building high-p...