null From Symptoms to Systems: Understanding Observability on SitePoint.
#performance
88 posts
25 Jul
20 Jul
If you've ever looked at your server and wondered why it's using swap even though plenty of RAM is available, you're not alone. This is a common scenario on Linux systems, and it can impact performance if not addressed. Continue reading...
10 Jul
Smart Tiered Cache allows for precise upper tier selection for origins hosted on AWS, GCP, Azure, and Oracle Cloud with customer-provided cloud region hints.
At Swiggy, we use Protocol Buffers everywhere. Nearly every message exchanged between our backend services and our mobile apps is a protobuf. On Android, the default and most widely adopted way to work with those schemas was protobuf-java, Google’s official Java runtime, with Java classes generated by protoc. It worked. But when we started profiling our app size, we found…
6 Jul
We are launching Workers Cache, a regionally tiered cache that sits directly in front of your Worker entrypoints. Infinitely composable, configured via standard HTTP headers
Servers give you warnings before they fail. Most sysadmins performing Linux server monitoring miss them because they're watching the wrong numbers. The metrics that actually matter are one level deeper: iowait instead of CPU percentage, active swap paging instead of memory usage, inode counts instead of just disk space. Continue reading...
26 Jun
A detailed look at the rendering architecture, custom tooling, and performance techniques behind Shopify's Spring '26 Edition: Everywhere.
13 Jun
null Image Optimization for Core Web Vitals in 2026: What Actually Moves the Needle on SitePoint.
10 Jun
Nginx TLS tuning won't fix a slow application, but it does cut handshake overhead and improve connection reuse, which shaves milliseconds off every HTTPS request. Continue reading...
8 Jun
tmpfs lets you mount a filesystem entirely in RAM. Here is how Linux already uses it, how to create your own mounts, and where it actually makes sense to use one. Continue reading...
null How I Built a 47-Signal Website Audit Tool That Runs in 15 Seconds on SitePoint.
6 Jun
Let's take a quick look at how best to set up PHP-FPM for high throughput, low latency, and more stable CPU and memory use. By default, most setups have PHP-FPM's PM (process manager) string set to dynamic and there's also the common advice to use ondemand if you suffer from available memory issues. Continue reading...
3 Jun
How a screen-level performance metric reshaped platform decisions, engineering ownership, and release discipline Continue reading on Expedia Group Technology »
14 May
Our billing pipeline was suddenly slow. The culprit was a hidden bottleneck in ClickHouse
CloudflareWhen a partitioning change to our petabyte-scale ClickHouse cluster caused critical billing jobs to stall, standard metrics showed no obvious errors. This post explores how we identified severe lock contention in ClickHouse's query planner and built upstream patches to fix it.
13 May
Process API improvements in .NET 11, including high-level APIs for starting processes, capturing output without deadlocks, handle inheritance control, lifetime management features, and a lightweight `SafeProcessHandle`-based API surface. The post Process API Improvements in .NET 11 appeared first on .NET Blog.
7 May
Microsoft Copilot Studio recently upgraded its .NET WebAssembly engine to .NET 10. The migration was straightforward, simplified deployment, and delivered another round of meaningful performance gains for end users. The post Copilot Studio gets faster with .NET 10 on WebAssembly appeared first on .NET Blog.
28 Apr
Adding caching to your application architecture can significantly improve key performance metrics, cut latency, and reduce load across downstream systems. In this walkthrough, we highlight the latest caching best practices and incorporate these design patterns into a reusable .NET application that you can reference when adding new capabilities to your application stack. The post High-Performance Distributed Caching with .NET and…
24 Apr
If the Linux desktop and applications on your thin and light laptop or low-end PC feel sluggish under a busy session, the usual suspects are slow storage R/W, not enough RAM, or occasionally a CPU bottleneck. But on machines with integrated graphics, there is a fourth bottleneck most people never check: VRAM. Continue reading...
15 Apr
Vaibhav Shankar; Staff Software Engineer | Raymond Lee; Staff Software Engineer | Chia-Wei Chen; Staff Software Engineer | Shunyao Li; Sr. Software Engineer | Yi Li; Staff Software Engineer | Ambud Sharma; Principal Engineer | Saurabh Vishwas Joshi; Principal Engineer | Charles-A. Francisco; Senior Engineer | Karthik Anantha Padmanabhan; Director, Engineering | David Westbrook; Sr. Manager, Engineering One day in…
13 Apr
We were annoyed with the slow performance of our frontend unit tests, so we made them much faster! It turned out that swapping out the test runner is an easy and efficient way to keep the migration effort low, while reaping the benefits of much faster execution times.
8 Apr
Author: Lin Wang (Android Performance Engineer) Default Feature For mobile apps, performance is considered as the “default feature”, which means apps are expected to run fast and be responsive. It’s just as if we expect a watch to show the time. With no exceptions at Pinterest, we measure, protect and improve performance for all of our key user experiences’ surfaces,…
9 Mar
Introducing the dotnet/skills repository and how .NET agent skills can improve coding agent workflows. The post Extend your coding agent with .NET Skills appeared first on .NET Blog.
27 Feb
Engineering and algorithmic interventions for multimodal post-training at Microsoft scale
Engineering at MicrosoftAditya Challapally leads post-training research and infrastructure for Copilot agent capabilities that process millions of multimodal interactions. This post builds on the diagnostics from Diagnosing instability in production-scale agent reinforcement learning with the engineering and algorithmic interventions we developed to get the best results out of post training at scale. Post-training multimodal agents at scale […] The post Engineering and…
20 Nov 2025
N+1 queries are one of the most common performance killers in Rails apps, but also one of the easiest to fix. In this post, we'll see how a single line of code can reduce 1,101 database queries down to 3. N+1s occur in rails when you have associated ActiveRecord models, and iterate over one model while accessing fields on the…
5 Nov 2025
Learn how Microsoft Copilot Studio uses .NET to provide a consistent AI agent execution across platforms, including on the web via WebAssembly. The post How Copilot Studio uses .NET and WebAssembly for performance and innovation appeared first on .NET Blog.
8 Oct 2025
Learn how DATAS in .NET 10 adapts heap size, what changes to expect versus previous Server Garbage Collection (GC) behavior, and how to decide whether to tune or disable it. The post Preparing for the .NET 10 GC (DATAS) appeared first on .NET Blog.
15 Sept 2025
Learn how Application Insights Code Optimizations helps .NET developers identify performance bottlenecks and get AI-powered recommendations through GitHub Copilot integration. The post Application Insights Code Optimizations for .NET Apps appeared first on .NET Blog.
10 Sept 2025
Take a tour through hundreds of performance improvements in .NET 10. The post Performance Improvements in .NET 10 appeared first on .NET Blog.
26 Jun 2025
How Blinkit Cracked Android's Performance Puzzle with Droid Dex Adaptive real-time performance tuning — fewer ANRs, smoother UX, and smarter device-specific optimization Picture this: Your app runs buttery-smooth on Pixel 7 Pro while throwing ANRs on a Redmi Note 4. Users on a Fold 6 have to experience the same janky transitions as those on a ₹6,000 device. Sounds familiar?…
2 May 2025
Load Testing API’s on Redshift & Snowflake — A Quick POC Overview At Helpshift, our data platform follows a Lakehouse architecture , combining the best of both data lakes and data warehouses . This architecture allows us to store and analyze large amounts of raw data in a structured and organized manner, while also providing the scalability and low-cost storage…
11 Mar 2024
In collaboration with the other major browser engine developers, Mozilla is thrilled to announce Speedometer 3 today. Like previous versions of Speedometer, this benchmark measures what we think matters most for performance online: responsiveness. But today’s release is more open and more challenging than before, and is the best tool for driving browser performance improvements that we’ve ever seen. The…
5 Feb 2024
How we optimized legacy top hits aggregation query time from 500ms to ~50ms. We are using an elastic search on the search listings page to filter listings based on user filters and some complex aggregation logic. Problem Statement: Our legacy aggregation query was taking approximately 500ms for city-level SRP ( Search Results Page) and approximately 200-300ms for city locality pages.…
2 Nov 2023
(Updated Apr 4 and 26, 2024 with some release news. Also see the next post) On October 25, 2023, the Windows filesystem team released an early preview of copy-on-write (CoW) linking in the Windows 11 Insider Canary channel. This builds automatic CoW linking into the Win32 CopyFile APIs when using Dev Drive or ReFS. If […] The post Copy-on-Write in…
13 Oct 2023
(Edited Oct 31, 2023 to add info about later patch for InTune, Nov 6 and 8, 2023 to add Win11 23H2 image info, Apr 4, 2024 to add info about Server. Also see the next post and the one after.) In a previous post, Dev Drive and Copy-on-Write for Developer Performance, we published early performance […] The post Dev Drive…
5 Sept 2023
Firefox performance on Vue.js has improved significantly throughout the year. Most recently, we sped up reactivity with Proxy optimizations. This change landed in Firefox 118, so it’s currently on Beta and will ride along to Release by the end of September. The post Faster Vue.js Execution in Firefox appeared first on Mozilla Hacks - the Web developer blog.
24 May 2023
At Microsoft Build 2023 the Windows team announced Dev Drive, a new evolution of the Windows ReFS filesystem retuned for developer workloads like Git and builds. This new functionality will ship later this year in the Windows 11 23H2 refresh and is available now for early testing via the Windows Insider program. The post Dev Drive and Copy-on-Write for Developer…
6 Feb 2023
I’ve found an interesting question on Twitter, recently. Is there any performance impact of using FILTER in SQL (PostgreSQL, specifically), or is it just syntax sugar for a CASE expression in an aggregate function? As a quick reminder, FILTER is an awesome standard SQL extension to filter out values before aggregating them in SQL. This … Continue reading The Performance…
7 Jun 2022
Last September, Slack released Clips, allowing users to capture video, audio, and screen recordings in messages to help distributed teams connect and share their work. We’ve continued iterating on Clips since its release, adding thumbnail selection, background blur, and most recently, background image replacement. This blog post provides a deep dive into our implementation of…
30 May 2022
Photo by Sen on Unsplash Modern JavaScript websites are the result of complex code bases, and the code base which powers BBC Online is no exception. There are many dependencies and frameworks that we rely upon in order to provide the functionality that our end-users expect, as well as code written in-house to cater to the needs of our website…
29 Apr 2022
Building load test infrastructure is tricky and poses many questions. How can we identify performance regressions in newly deployed builds, given the overhead of spinning up test clients? To gather the most representative results, should we load test at our peak hours or when there’s a lull? How do we incentivize engineers to invest time…
13 May 2021
Cisco Umbrella is proud to announce the addition of our most recent global cloud data center, Spain! Our DC is located in Silicon Alley, not to be confused with Silicon Valley. We chose this location because it resides in the heart of connectivity and high-tech industry in Madrid. Improved cybersecurity services for our Spanish and […] The post Cisco Umbrella…
12 Jan 2021
How innovation speeds performance, cuts latency When considering any IT security capability, you rigorously evaluate features and functions. Will it block threats? Will it protect my systems, my people, my data? How will it impact end-users’ experience? Will it help me keep my job? But with a cloud security solution, the underlying infrastructure is just, […] The post Cisco Umbrella…
13 Nov 2020
With Warp (also called WarpBuilder) we’re making big changes to our JIT (just-in-time) compilers, resulting in improved responsiveness, faster page loads and better memory usage. The new architecture is also more maintainable and unlocks additional SpiderMonkey improvements. This post explains how Warp works and how it made SpiderMonkey faster. The post Warp: Improved JS performance in Firefox 83 appeared first…
21 Jul 2020
At Mozilla, we want the web to be capable of running high-performance applications so that users and content authors can choose the safety, agency, and openness of the web platform. Shared-memory multi-threading is an essential low-level building block for high-performance applications. However, keeping users safe is paramount, which is why shared memory and high-resolution timers were effectively disabled at the…
20 May 2020
Firefox Profiler is a powerful web-based performance analysis interface featuring call trees, stack charts, flame graphs, and more. All data filtering, zooming, slicing, and transformation actions are preserved in shareable URLs. FunctionTrace is a low-overhead profiler that runs on unmodified Python applications. Integrated with Firefox, it's a new breed of analysis tool project built conveniently on top of the Firefox…
6 May 2020
2 May 2020
In the previous post I discussed how leaf inlining allows the Go compiler to reduce the overhead of function calls and extend optimisation opportunities across function boundaries. In this post I’ll discuss the limits of inlining and leaf vs mid-stack inlining. The limits of inlining Inlining a function into its caller removes the call’s overhead […]
25 Apr 2020
This is a post about how the Go compiler implements inlining and how this optimisation affects your Go code. n.b. This article focuses on gc, the de facto Go compiler from golang.org. The concepts discussed apply broadly to other Go compilers like gccgo and tinygo but may differ in implementation and efficacy. What is inlining? […]
1 Mar 2020
Programmers have a tendency to be superstitious. Particularly, when a programmer hears that copies are expensive, they start to see them everywhere, especially when they learn that, in Go, every assignment is a copy. Consider this code; x is three orders of magnitude larger than y, is the assignment of x to a more expensive […]
30 Jan 2020
A large portion of an Android app’s build time can consist of Dagger annotation processing, and most developers agree that productivity is…
5 Sept 2019
This is a post about performance. Most of the time when worrying about the performance of a piece of code the overwhelming advice should be (with apologies to Brendan Gregg) don’t worry about it, yet. However there is one area where I counsel developers to think about the performance implications of a design, and that […]
30 Aug 2019
Modern web applications load and execute a lot more JavaScript code than they did just a few years ago. While JIT (just-in-time) compilers have been very successful in making JavaScript performant, we needed a better solution. We’ve added a new, generated JavaScript bytecode interpreter to the JavaScript engine in Firefox 70. Instead of writing a new interpreter from scratch, we…
23 May 2019
With this week's release of Firefox 67, the new high performance royalty-free AV1 video decoder dav1d is now enabled by default on all desktop platforms (Windows, OSX and Linux) for both 32-bit and 64-bit systems. And work is in progress on rav1e, the Rust AV1 encoder. The post Firefox brings you smooth video playback with the world’s fastest AV1 decoder…
16 May 2019
Script debugging is one of the most powerful and complex productivity features in the web developer toolbox. Done right, it empowers developers to fix bugs quickly and efficiently. The DevTools Debugger team – with help from our tireless developer community – has just landed updates that significantly improve performance and reliability. The post Faster smarter JavaScript debugging in Firefox DevTools…
21 Mar 2019
In the past, the Search Team at SoundCloud had high lead times for making updates to Elasticsearch clusters, either during the implementation of a new feature or simply while fixing a bug. This was because both tasks require us to reindex our catalog from scratch, which means reindexing more than 720 million users, tracks, playlists, and albums. Altogether, this process…
7 Sept 2018
I recently stumbled upon a curious query on a customer’s productive Oracle database: Two things caught my attention: The query was executed many billions of times per month, accounting for about 0.3% of that system’s load. That’s 0.3% for something extremely silly! I don’t think that customer would ever qualify the DUAL table as SYS.DUAL, … Continue reading Beware of…
2 Mar 2018
Background There are three things you need to know to start with: Operations on read-only variables which are value types copy the variable value first. I’ve written about this before on this blog. C# 7.2 addresses this by introducing the readonly modifier for structs. See the language proposal for more details. I was touched to … Continue reading Implementing IXmlSerializable…
18 Dec 2017
Or: Move That Loop into the Server Already! This article will illustrate the significance of something that I always thought to be common sense, but I keep seeing people getting this (very) wrong in their productive systems. Chances are, in fact, that most applications out there suffer from this performance problem – and the fix … Continue reading The Cost…
10 Dec 2017
Privacy is a fundamental human right. It is the right to control to whom and to what information is shared with others. Privacy protects the criteria used to determine how information is deemed private. Simply put, it’s ones right to keep or share information they themselves deem as private; something is private when one deems it thus. Since the advent…
6 Nov 2017
Usually, this blog is 100% pro window functions and advocates using them at any occasion. But like any tool, window functions come at a price and we must carefully evaluate if that’s a price we’re willing to pay. That price can be a sort operation. And as we all know, sort operations are expensive. They … Continue reading How to…
29 Jun 2017
In recent days, I’ve seen a bit too much of this: Something is very wrong with the above example. Can you see it? No? Let me rename those variables for you. Better now? Exactly. The above algorithm is O(N) when it could be O(1): (Let’s assume the lack of explicit ordering is irrelevant) I’m working … Continue reading A Basic…
1 Jun 2017
The following two indexes are redundant in most SQL databases: It is usually safe to drop the first index, because all queries that query the LAST_NAME column only can still profit from the second index I_ACTOR_2. The reason being that LAST_NAME is the first column of the composite index I_ACTOR_2 (it would be a different … Continue reading How to…
3 May 2017
In SQL, quite often, we want to compare several values with each other. For instance, when we’re looking for a specific user by their first and last names, we’ll write a query like this one: We’re getting: CUSTOMER_ID FIRST_NAME LAST_NAME ------------------------------------ 8 SUSAN WILSON Surely, everyone agrees that this is correct and perfectly fine as … Continue reading Don’t Use…
8 Mar 2017
Probably the most impactful thing you could learn about when writing efficient SQL is indexing. A very close runner-up, however, is the fact that a lot of SQL clients demand tons of “unnecessary, mandatory work” from the database. Repeat this after me: Unnecessary, Mandatory Work What is “unnecessary, mandatory work”? It’s two things (duh): Unnecessary … Continue reading Many SQL…
10 Dec 2016
Do libraries and frameworks prioritize components on boot? If so, how, and if not what can we do? And, in exploring that question, I discovered that Server-Side Rendering isn't a silver bullet!
19 Nov 2016
This is a progress report on the Go toolchain improvements during the 1.8 development cycle. Now we’re well into November, the 1.8 development window is closing fast on the few remaining in fly change lists, with the remainder being told to wait until the 1.9 development season opens when Go 1.8 ships in February 2017. […]
1 Nov 2016
I’ve recently discovered a rather significant performance issue on a productive Oracle 11g customer database. And I’m sure you have this issue too, which is why I’m documenting it here. This is a simplified representation of the setup at the customer site: ID PAYMENT_DATE TEXT ---------- ------------ ----------------------------------- 33803 21.05.16 DcTNBOrkQIgMtbietUWOsSFNMIqGLlDw... 29505 09.03.16 VIuPaOAQqzCMlFBYPQtvqUSbWYPDndJD... 10738 … Continue reading Why You…
28 Oct 2016
In a recent blog post, I’ve advocated against the use of COUNT(*) in SQL, when a simple EXISTS() would suffice. This is important stuff. I keep tuning productive queries where a customer runs a COUNT(*) query like so: … where after they discard the exact count to only check for existence: It doesn’t matter if … Continue reading Don’t Even…
7 Oct 2016
Adding the right index to speed up your queries is essential. But after a while, as your system grows, you may find yourself with tons of indexes, which all slow down writing to the database – as with each write to the table, the index needs to be updated as well in the same transaction. … Continue reading Does Your…
17 Sept 2016
Sunday September the 18th marks a month since the Go 1.8 cycle opened officially. I’m passionate about the performance of Go programs, and of the compiler itself. This post is a brief look at the state of play, roughly 1/2 way into the development cycle for Go 1.81. Note: these results are of course preliminary […]
14 Sept 2016
A while ago, I blogged about the importance of avoiding unnecessary COUNT(*) queries:https://blog.jooq.org/sql-tip-of-the-day-be-wary-of-select-count … and how to replace them with equivalent EXISTS queries As I’m updating the SQL training to show also PostgreSQL performance characteristics in addition to Oracle, I really have to reiterate this topic. Please repeat after me: Thou shalt not use COUNT(*) … Continue reading Avoid Using…
30 Aug 2016
I recently made a 3D Card Flip element as part of my Supercharged YouTube video series, and I ran into some challenges with the shadows. I decided I should explain how I approached the solution.
14 Jul 2016
A lot of people use SQL constraints mainly to enforce data integrity, and that’s already a very good thing. A UNIQUE constraint, for instance, makes sure that there is at most one instance of any possible value (or tuple, in the case of a composite constraint) in a table. For instance: Constraints are also good … Continue reading How Adding…
9 Jun 2016
I’ve been following the progress of .NET Core with a lot of interest, and trying to make the Noda Time master branch keep up with it. The aim is that when Noda Time 2.0 eventually ships (apologies for the delays…) it will be compatible with .NET Core from the start. (I’d expected to be able … Continue reading Tracking down…
2 Apr 2016
This is a progress report on the Go toolchain improvements during the 1.7 development cycle. All measurements were taken using a Thinkpad x220, Core i5-2520M, running Ubuntu 14.04 linux. Faster compilation Since Go 1.5, when the compiler itself was translated from C to Go, compile times are slower than they used to be. Everyone knows it, nobody […]
23 Mar 2016
This post shares 6 tips to build fast web applications based on a talk at Php Dublin in March 2016. It includes slides and covers topics like caching, compression, database optimization, and more.
25 Jul 2015
This post highlights 6 important rules to keep in mind when developing performant web applications: avoid premature optimization, do the minimum required work, defer non-critical tasks, leverage caching, avoid N+1 queries, and design for horizontal scaling. Following these guidelines will help you write efficient code from the start and build apps ready to handle growth.
28 Apr 2015
I keep encountering situations where RDBMS users think that one second for query execution is anything near fast. Most recently, in this Stack Overflow question: Hibernate SQL In clause making CPU usage to 100% The poster’s original question was why a similar query executes in one second when executed in SQL Server Management Studio whereas … Continue reading Do Not…
21 Apr 2015
You wouldn’t believe it until you try it yourself. I’ve been using the Eclipse Mars developer milestones lately, and I’ve been having some issues with slow compilation. I always thought it was because of the m2e integration, which has never been famous for working perfectly. But then, it dawned upon me when I added a … Continue reading Is Your…
1 Aug 2014
A few days ago, I was watching Dustin Campell’s excellent talk from TechEd 2013, “Essential truths everyone should know about performance in a large managed code base”. I highly recommend it, and it made me think a bit more about Noda Time’s performance. (It doesn’t take much to make me think about Noda Time’s performance, … Continue reading Object pooling…
16 Jul 2014
Introduction Recently I’ve been optimizing the heck out of Noda Time. Most of the time this has been a case of the normal measurement, find bottlenecks, carefully analyse them, lather, rinse, repeat. Yesterday I had a hunch about a particular cost, and decided to experiment… leading to a surprising optimization. Noda Time’s core types are … Continue reading Micro-optimization: the…
11 Jul 2014
Update this post is also available in Japanese. This is a post about an experimental tool that I have been working on. gcvis is a simple way of visualising the operation of the garbage collector within a Go process. Here is a screenshot of it in operation. The rest of this article explores how gcvis […]
7 Jun 2014
Anthony Starks has remixed my original Google Present based slides using his fantastic Deck presentation tool. You can check out his remix over on his blog, mindchunk.blogspot.com.au/2014/06/remixing-with-deck. I was recently invited to give a talk at Gocon, a fantastic Go conference held semi-annually in Tokyo, Japan. Gocon 2014 was an entirely community-run one day event combining […]
2 Jun 2014
In most cases, simply creating an Oracle SEQUENCE with all defaults is good enough: This sequence can then be used immediately in triggers when inserting new records in a table: But if your table has heavy throughput with millions of insertions per day (e.g. a log table), you better configure the sequence cache correctly. The … Continue reading Don’t Forget…
4 May 2014
Now that go1.3beta1 has been released I’ve updated the autobench-next branch to track Go 1.2 vs tip (go1.3beta1). Using autobench is very simple, clone the repository and run make to produce a benchmark on your machine. % cd devel % git clone -b autobench-next https://github.com/davecheney/autobench.git % cd autobench % make You can stay up to date with […]
29 Apr 2014
If anything at all, our jOOQ talks at various JUGs and conferences have revealed mostly one thing: Java developers don’t know SQL. And it isn’t even necessarily our fault. We’re just not exposed to SQL nowadays. But consider this: We developers (or our customers) are paying millions of dollars every year to Oracle, Microsoft, IBM, … Continue reading NoSQL? No,…
28 Nov 2013
When you build complex angular.js apps, your user interface might start to feel sluggish: You experience an uncomfortable delay whenever you click a button, the screen flickers when you scroll and some actions freeze your browser completely. This guide will help you to identify and speedup the slowest parts of your app. Hint: This post […]
26 Aug 2013
Earlier this year I wrote a small harness to compare the relative performance of Go 1.0 and the then just released Go 1.1. You can read the posts about the Go 1.1 performance improvements: amd64, 386 and arm. As the Go 1.2 cycle is entering feature freeze next week, I’ve taken the opportunity to create a […]