Welcome!

Smarter Web Application Performance Monitoring

TR Jordan

Subscribe to TR Jordan: eMailAlertsEmail Alerts
Get TR Jordan via: homepageHomepage mobileMobile rssRSS facebookFacebook twitterTwitter linkedinLinkedIn


Top Stories by TR Jordan

The easiest way to make your code run faster is to do less. At some point, though, you don’t want to do less. Maybe you want to do more, without it being any slower. Maybe you want to make what you have fast, without cutting out any of the work. What then? In this enlightened age, the answer is easy — parallelize it! Threads are always a good choice, but without careful consideration, it’s easy to create all manner of strange race conditions or out-of-order data access. So today, let’s talk about a different route: event loops. Event whats? If you’re not familiar with evented code, it’s a way to parallelize execution, similar to threading or multiprocessing. Unlike threads, though, evented code is typically cooperative — each execution path must voluntarily give up control. Each of these execution units actually runs in serial, and when finished, returns control to... (more)

Profiling Python Performance Using lineprof, statprof, and cProfile

If you’re a regular here, you know how much we care about the full-stack view of applications. Today, let’s zoom in a bit, and talk about the performance of a single layer. In particular, let’s look at profiling in Python. As an example, let’s take this bit of code for calculating confidence intervals of the mean of a set of data. If you’re not familiar with confidence intervals, they provide a set of bounds for a given statistic; a 95% interval implies that the true mean lies in the calculated range 95% of the time. One way of calculating this involves generating a number of ne... (more)

Let’s Talk About Your Performance

Do you know how long your customers are going to wait for a page load? More importantly, how long are you making them wait right now? Back in the misty eons of time, it used to be easy to measure the performance of your application. You’d grab a stopwatch, load up your web application, and see what happened. If it was slow, you’d look at the mess of PHP, HTML and CSS you crammed into index.php and make sure that you weren’t using bubble sort anywhere. In these modern times, you typically take a few more extra steps: Add Varnish to cache any generated content Split your MySQL Inno... (more)

Monitoring Background Jobs in Ruby’s Resque

Here at AppNeta, we get to see a lot about how people build their web applications. From simple PHP scripts to heavily service-oriented Java clouds to monolithic Django apps, everybody’s product is architected a little differently. We’re still out to trace everything, and today I want to talk how to get visibility into an important component of any complex system: the messaging queue. Specifically, let’s look at how to trace a job from Rails using Resque. Messaging Queues If you haven’t used a messaging queue in your app, the idea is simple. Instead of forcing all the work to ha... (more)

Caching: Up and Down the Stack

The other month I presented Caching Up and Down the Stack at the Boston Web Performance meetup. It was great to get the chance to present to the 60+ people who came out for the talk. Unsurprisingly, many of the people there knew a lot about caching in all of the different levels I touched on, and some great conversation developed. I covered six of the major areas of caching available to web devs today. On the HTML / JS / CSS side, you can use client asset caches, full-page HTTP caches (like Varnish) and partial template caches. On the back end, you can use generated code caches,... (more)