<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: benchmarks</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/benchmarks.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2026-02-19T04:48:47+00:00</updated><author><name>Simon Willison</name></author><entry><title>SWE-bench February 2026 leaderboard update</title><link href="https://simonwillison.net/2026/Feb/19/swe-bench/#atom-tag" rel="alternate"/><published>2026-02-19T04:48:47+00:00</published><updated>2026-02-19T04:48:47+00:00</updated><id>https://simonwillison.net/2026/Feb/19/swe-bench/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.swebench.com/"&gt;SWE-bench February 2026 leaderboard update&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
SWE-bench is one of the benchmarks that the labs love to list in their model releases. The official leaderboard is infrequently updated but they just did a full run of it against the current generation of models, which is notable because it's always good to see benchmark results like this that &lt;em&gt;weren't&lt;/em&gt; self-reported by the labs.&lt;/p&gt;
&lt;p&gt;The fresh results are for their "Bash Only" benchmark, which runs their &lt;a href="https://github.com/SWE-agent/mini-swe-agent"&gt;mini-swe-bench&lt;/a&gt; agent (~9,000 lines of Python, &lt;a href="https://github.com/SWE-agent/mini-swe-agent/blob/v2.2.1/src/minisweagent/config/benchmarks/swebench.yaml"&gt;here are the prompts&lt;/a&gt; they use) against the &lt;a href="https://huggingface.co/datasets/princeton-nlp/SWE-bench"&gt;SWE-bench&lt;/a&gt; dataset of coding problems - 2,294 real-world examples pulled from 12 open source repos: &lt;a href="https://github.com/django/django"&gt;django/django&lt;/a&gt; (850), &lt;a href="https://github.com/sympy/sympy"&gt;sympy/sympy&lt;/a&gt; (386), &lt;a href="https://github.com/scikit-learn/scikit-learn"&gt;scikit-learn/scikit-learn&lt;/a&gt; (229), &lt;a href="https://github.com/sphinx-doc/sphinx"&gt;sphinx-doc/sphinx&lt;/a&gt; (187), &lt;a href="https://github.com/matplotlib/matplotlib"&gt;matplotlib/matplotlib&lt;/a&gt; (184), &lt;a href="https://github.com/pytest-dev/pytest"&gt;pytest-dev/pytest&lt;/a&gt; (119), &lt;a href="https://github.com/pydata/xarray"&gt;pydata/xarray&lt;/a&gt; (110), &lt;a href="https://github.com/astropy/astropy"&gt;astropy/astropy&lt;/a&gt; (95), &lt;a href="https://github.com/pylint-dev/pylint"&gt;pylint-dev/pylint&lt;/a&gt; (57), &lt;a href="https://github.com/psf/requests"&gt;psf/requests&lt;/a&gt; (44), &lt;a href="https://github.com/mwaskom/seaborn"&gt;mwaskom/seaborn&lt;/a&gt; (22), &lt;a href="https://github.com/pallets/flask"&gt;pallets/flask&lt;/a&gt; (11).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Correction&lt;/strong&gt;: &lt;em&gt;The Bash only benchmark runs against SWE-bench Verified, not original SWE-bench. Verified is a manually curated subset of 500 samples &lt;a href="https://openai.com/index/introducing-swe-bench-verified/"&gt;described here&lt;/a&gt;, funded by OpenAI. Here's &lt;a href="https://huggingface.co/datasets/princeton-nlp/SWE-bench_Verified"&gt;SWE-bench Verified&lt;/a&gt; on Hugging Face - since it's just 2.1MB of Parquet it's easy to browse &lt;a href="https://lite.datasette.io/?parquet=https%3A%2F%2Fhuggingface.co%2Fdatasets%2Fprinceton-nlp%2FSWE-bench_Verified%2Fresolve%2Fmain%2Fdata%2Ftest-00000-of-00001.parquet#/data/test-00000-of-00001?_facet=repo"&gt;using Datasette Lite&lt;/a&gt;, which cuts those numbers down to django/django (231), sympy/sympy (75), sphinx-doc/sphinx (44), matplotlib/matplotlib (34), scikit-learn/scikit-learn (32), astropy/astropy (22), pydata/xarray (22), pytest-dev/pytest (19), pylint-dev/pylint (10), psf/requests (8), mwaskom/seaborn (2), pallets/flask (1)&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Here's how the top ten models performed:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Bar chart showing &amp;quot;% Resolved&amp;quot; by &amp;quot;Model&amp;quot;. Bars in descending order: Claude 4.5 Opus (high reasoning) 76.8%, Gemini 3 Flash (high reasoning) 75.8%, MiniMax M2.5 (high reasoning) 75.8%, Claude Opus 4.6 75.6%, GLM-5 (high reasoning) 72.8%, GPT-5.2 (high reasoning) 72.8%, Claude 4.5 Sonnet (high reasoning) 72.8%, Kimi K2.5 (high reasoning) 71.4%, DeepSeek V3.2 (high reasoning) 70.8%, Claude 4.5 Haiku (high reasoning) 70.0%, and a partially visible final bar at 66.6%." src="https://static.simonwillison.net/static/2026/swbench-feb-2026.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;It's interesting to see Claude Opus 4.5 beat Opus 4.6, though only by about a percentage point. 4.5 Opus is top, then Gemini 3 Flash, then MiniMax M2.5 - a 229B model released &lt;a href="https://www.minimax.io/news/minimax-m25"&gt;last week&lt;/a&gt; by Chinese lab MiniMax. GLM-5, Kimi K2.5 and DeepSeek V3.2 are three more Chinese models that make the top ten as well.&lt;/p&gt;
&lt;p&gt;OpenAI's GPT-5.2 is their highest performing model at position 6, but it's worth noting that their best coding model, GPT-5.3-Codex, is not represented - maybe because it's not yet available in the OpenAI API.&lt;/p&gt;
&lt;p&gt;This benchmark uses the same system prompt for every model, which is important for a fair comparison but does mean that the quality of the different harnesses or optimized prompts is not being measured here.&lt;/p&gt;
&lt;p&gt;The chart above is a screenshot from the SWE-bench website, but their charts don't include the actual percentage values visible on the bars. I successfully used Claude for Chrome to add these - &lt;a href="https://claude.ai/share/81a0c519-c727-4caa-b0d4-0d866375d0da"&gt;transcript here&lt;/a&gt;. My prompt sequence included:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Use claude in chrome to open https://www.swebench.com/&lt;/p&gt;
&lt;p&gt;Click on "Compare results" and then select "Select top 10"&lt;/p&gt;
&lt;p&gt;See those bar charts? I want them to display the percentage on each bar so I can take a better screenshot, modify the page like that&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I'm impressed at how well this worked - Claude injected custom JavaScript into the page to draw additional labels on top of the existing chart.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Screenshot of a Claude AI conversation showing browser automation. A thinking step reads &amp;quot;Pivoted strategy to avoid recursion issues with chart labeling &amp;gt;&amp;quot; followed by the message &amp;quot;Good, the chart is back. Now let me carefully add the labels using an inline plugin on the chart instance to avoid the recursion issue.&amp;quot; A collapsed &amp;quot;Browser_evaluate&amp;quot; section shows a browser_evaluate tool call with JavaScript code using Chart.js canvas context to draw percentage labels on bars: meta.data.forEach((bar, index) =&amp;gt; { const value = dataset.data[index]; if (value !== undefined &amp;amp;&amp;amp; value !== null) { ctx.save(); ctx.textAlign = 'center'; ctx.textBaseline = 'bottom'; ctx.fillStyle = '#333'; ctx.font = 'bold 12px sans-serif'; ctx.fillText(value.toFixed(1) + '%', bar.x, bar.y - 5); A pending step reads &amp;quot;Let me take a screenshot to see if it worked.&amp;quot; followed by a completed &amp;quot;Done&amp;quot; step, and the message &amp;quot;Let me take a screenshot to check the result.&amp;quot;" src="https://static.simonwillison.net/static/2026/claude-chrome-draw-on-chart.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: If you look at the transcript Claude claims to have switched to Playwright, which is confusing because I didn't think I had that configured.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://twitter.com/KLieret/status/2024176335782826336"&gt;@KLieret&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/benchmarks"&gt;benchmarks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/openai"&gt;openai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/anthropic"&gt;anthropic&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/claude"&gt;claude&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/coding-agents"&gt;coding-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-in-china"&gt;ai-in-china&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/browser-agents"&gt;browser-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/minimax"&gt;minimax&lt;/a&gt;&lt;/p&gt;



</summary><category term="benchmarks"/><category term="django"/><category term="ai"/><category term="openai"/><category term="generative-ai"/><category term="llms"/><category term="anthropic"/><category term="claude"/><category term="coding-agents"/><category term="ai-in-china"/><category term="browser-agents"/><category term="minimax"/></entry><entry><title>LLM SVG Generation Benchmark</title><link href="https://simonwillison.net/2025/Nov/25/llm-svg-generation-benchmark/#atom-tag" rel="alternate"/><published>2025-11-25T04:02:25+00:00</published><updated>2025-11-25T04:02:25+00:00</updated><id>https://simonwillison.net/2025/Nov/25/llm-svg-generation-benchmark/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://gally.net/temp/20251107pelican-alternatives/index.html"&gt;LLM SVG Generation Benchmark&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Here's a delightful project by Tom Gally, inspired by my &lt;a href="https://simonwillison.net/tags/pelican-riding-a-bicycle/"&gt;pelican SVG benchmark&lt;/a&gt;. He &lt;a href="https://gally.net/temp/20251107pelican-alternatives/about.html"&gt;asked Claude&lt;/a&gt; to help create more prompts of the form &lt;code&gt;Generate an SVG of [A] [doing] [B]&lt;/code&gt; and then ran 30 creative prompts against 9 frontier models - prompts like "an octopus operating a pipe organ" or "a starfish driving a bulldozer".&lt;/p&gt;
&lt;p&gt;Here are some for "butterfly inspecting a steam engine":&lt;/p&gt;
&lt;p&gt;&lt;img alt="Gemini 3.0 Pro Preview drew the best steam engine with nice gradients and a butterfly hovering near the chimney. DeepSeek V3.2-Exp drew a floating brown pill with a hint of a chimney and a butterfly possibly on fire. GLM-4.6 did the second best steam engine with a butterfly nearby. Qwen3-VL-235B-A22B-Thinking did a steam engine that looks a bit like a chests on wheels and a weird purple circle." src="https://static.simonwillison.net/static/2025/butterfly-inspecting-steam-engine.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;And for "sloth steering an excavator":&lt;/p&gt;
&lt;p&gt;&lt;img alt="Claude Sonnet 4.5 drew the best excavator with a blobby sloth driving it. Claude Opus 4.5 did quite a blocky excavator with a sloth that isn't quite recognizable as a sloth. Grok Code Fast 1 drew a green alien standing on a set of grey blocks. Gemini 2.5 Pro did a good excavator with another blobby sloth." src="https://static.simonwillison.net/static/2025/sloth-driving-excavator.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;It's worth browsing the &lt;a href="https://gally.net/temp/20251107pelican-alternatives/index.html"&gt;whole collection&lt;/a&gt;, which gives a really good overall indication of which models are the best at SVG art.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://news.ycombinator.com/item?id=46037637#46041645"&gt;tkgally on Hacker News&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/benchmarks"&gt;benchmarks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/svg"&gt;svg&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/evals"&gt;evals&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pelican-riding-a-bicycle"&gt;pelican-riding-a-bicycle&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/tom-gally"&gt;tom-gally&lt;/a&gt;&lt;/p&gt;



</summary><category term="benchmarks"/><category term="svg"/><category term="ai"/><category term="generative-ai"/><category term="llms"/><category term="evals"/><category term="pelican-riding-a-bicycle"/><category term="tom-gally"/></entry><entry><title>python-build-standalone now has Python 3.14.0a5</title><link href="https://simonwillison.net/2025/Feb/13/python-3140a5/#atom-tag" rel="alternate"/><published>2025-02-13T06:25:24+00:00</published><updated>2025-02-13T06:25:24+00:00</updated><id>https://simonwillison.net/2025/Feb/13/python-3140a5/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/astral-sh/python-build-standalone/releases/tag/20250212"&gt;python-build-standalone now has Python 3.14.0a5&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Exciting news &lt;a href="https://twitter.com/charliermarsh/status/1889837406322565305"&gt;from Charlie Marsh&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We just shipped the latest Python 3.14 alpha (3.14.0a5) to uv and python-build-standalone. This is the first release that includes the tail-calling interpreter.&lt;/p&gt;
&lt;p&gt;Our initial benchmarks show a ~20-30% performance improvement across CPython.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is an optimization that was first discussed &lt;a href="https://github.com/faster-cpython/ideas/issues/642"&gt;in faster-cpython&lt;/a&gt; in January 2024, then landed earlier this month &lt;a href="https://github.com/python/cpython/issues/128563"&gt;by Ken Jin&lt;/a&gt; and included in the 3.14a05 release. The &lt;a href="https://docs.python.org/dev/whatsnew/3.14.html#whatsnew314-tail-call"&gt;alpha release notes&lt;/a&gt; say:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A new type of interpreter based on tail calls has been added to CPython. For certain newer compilers, this interpreter provides significantly better performance. Preliminary numbers on our machines suggest anywhere from -3% to 30% faster Python code, and a geometric mean of 9-15% faster on pyperformance depending on platform and architecture. The baseline is Python 3.14 built with Clang 19 without this new interpreter.&lt;/p&gt;
&lt;p&gt;This interpreter currently only works with Clang 19 and newer on x86-64 and AArch64 architectures. However, we expect that a future release of GCC will support this as well.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Including this in &lt;a href="https://github.com/astral-sh/python-build-standalone"&gt;python-build-standalone&lt;/a&gt; means  it's now trivial to try out via &lt;a href="https://github.com/astral-sh/uv"&gt;uv&lt;/a&gt;. I upgraded to the latest &lt;code&gt;uv&lt;/code&gt; like this:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell"&gt;&lt;pre&gt;pip install -U uv&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Then ran &lt;code&gt;uv python list&lt;/code&gt; to see the available versions:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cpython-3.14.0a5+freethreaded-macos-aarch64-none    &amp;lt;download available&amp;gt;
cpython-3.14.0a5-macos-aarch64-none                 &amp;lt;download available&amp;gt;
cpython-3.13.2+freethreaded-macos-aarch64-none      &amp;lt;download available&amp;gt;
cpython-3.13.2-macos-aarch64-none                   &amp;lt;download available&amp;gt;
cpython-3.13.1-macos-aarch64-none                   /opt/homebrew/opt/python@3.13/bin/python3.13 -&amp;gt; ../Frameworks/Python.framework/Versions/3.13/bin/python3.13
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I downloaded the new alpha like this:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell"&gt;&lt;pre&gt;uv python install cpython-3.14.0a5&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And tried it out like so:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell"&gt;&lt;pre&gt;uv run --python 3.14.0a5 python&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The Astral team have been using Ken's &lt;a href="https://gist.github.com/Fidget-Spinner/e7bf204bf605680b0fc1540fe3777acf"&gt;bm_pystones.py&lt;/a&gt; benchmarks script. I grabbed a copy like this:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell"&gt;&lt;pre&gt;wget &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;https://gist.githubusercontent.com/Fidget-Spinner/e7bf204bf605680b0fc1540fe3777acf/raw/fa85c0f3464021a683245f075505860db5e8ba6b/bm_pystones.py&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And ran it with &lt;code&gt;uv&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell"&gt;&lt;pre&gt;uv run --python 3.14.0a5 bm_pystones.py&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Giving:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Pystone(1.1) time for 50000 passes = 0.0511138
This machine benchmarks at 978209 pystones/second
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Inspired by Charlie's &lt;a href="https://twitter.com/charliermarsh/status/1889837406322565305"&gt;example&lt;/a&gt; I decided to try the &lt;a href="https://github.com/sharkdp/hyperfine"&gt;hyperfine&lt;/a&gt; benchmarking tool, which can run multiple commands to statistically compare their performance. I came up with this recipe:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell"&gt;&lt;pre&gt;brew install hyperfine
hyperfine &lt;span class="pl-cce"&gt;\ &lt;/span&gt;                           
  &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;uv run --python 3.14.0a5 bm_pystones.py&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt; \
  &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;uv run --python 3.13 bm_pystones.py&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt; \
  -n tail-calling \
  -n baseline \
  --warmup 10&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src="https://static.simonwillison.net/static/2025/hyperfine-uv.jpg" alt="Running that command produced: Benchmark 1: tail-calling   Time (mean ± σ):      71.5 ms ±   0.9 ms    [User: 65.3 ms, System: 5.0 ms]   Range (min … max):    69.7 ms …  73.1 ms    40 runs   Benchmark 2: baseline   Time (mean ± σ):      79.7 ms ±   0.9 ms    [User: 73.9 ms, System: 4.5 ms]   Range (min … max):    78.5 ms …  82.3 ms    36 runs   Summary   tail-calling ran     1.12 ± 0.02 times faster than baseline" style="max-width: 100%;" /&gt;&lt;/p&gt;
&lt;p&gt;So 3.14.0a5 scored 1.12 times faster than 3.13 on the benchmark (on my extremely overloaded M2 MacBook Pro).


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/benchmarks"&gt;benchmarks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/uv"&gt;uv&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/astral"&gt;astral&lt;/a&gt;&lt;/p&gt;



</summary><category term="benchmarks"/><category term="python"/><category term="uv"/><category term="astral"/></entry><entry><title>Speedometer 3.0: The Best Way Yet to Measure Browser Performance</title><link href="https://simonwillison.net/2024/Mar/12/speedometer-30/#atom-tag" rel="alternate"/><published>2024-03-12T04:26:06+00:00</published><updated>2024-03-12T04:26:06+00:00</updated><id>https://simonwillison.net/2024/Mar/12/speedometer-30/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://webkit.org/blog/15131/speedometer-3-0-the-best-way-yet-to-measure-browser-performance/"&gt;Speedometer 3.0: The Best Way Yet to Measure Browser Performance&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
The new browser performance testing suite, released as a collaboration between Blink, Gecko, and WebKit. It’s fun to run this in your browser and watch it rattle through 580 tests written using a wide variety of modern JavaScript frameworks and visualization libraries.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/benchmarks"&gt;benchmarks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-performance"&gt;web-performance&lt;/a&gt;&lt;/p&gt;



</summary><category term="benchmarks"/><category term="javascript"/><category term="web-performance"/></entry><entry><title>The Web Server Benchmarking We Need</title><link href="https://simonwillison.net/2010/Mar/17/ian/#atom-tag" rel="alternate"/><published>2010-03-17T10:05:35+00:00</published><updated>2010-03-17T10:05:35+00:00</updated><id>https://simonwillison.net/2010/Mar/17/ian/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://blog.ianbicking.org/2010/03/16/web-server-benchmarking-we-need/"&gt;The Web Server Benchmarking We Need&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Ian Bicking asks for a WSGI benchmark which emphasises error handling over raw performance—can the server keep serving requests if some of them are CPU bound, I/O bound, wedged or cause a segfault?


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/benchmarks"&gt;benchmarks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ian-bicking"&gt;ian-bicking&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/wsgi"&gt;wsgi&lt;/a&gt;&lt;/p&gt;



</summary><category term="benchmarks"/><category term="ian-bicking"/><category term="python"/><category term="wsgi"/></entry><entry><title>Dojo 1.4.1 vs jQuery 1.4.2pre on Taskspeed</title><link href="https://simonwillison.net/2010/Jan/29/competition/#atom-tag" rel="alternate"/><published>2010-01-29T14:19:24+00:00</published><updated>2010-01-29T14:19:24+00:00</updated><id>https://simonwillison.net/2010/Jan/29/competition/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.flickr.com/photos/jeresig/4311864455/"&gt;Dojo 1.4.1 vs jQuery 1.4.2pre on Taskspeed&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
John Resig’s reponse. When JavaScript libraries compete on performance, everybody wins.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/benchmarks"&gt;benchmarks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/dojo"&gt;dojo&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/john-resig"&gt;john-resig&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jquery"&gt;jquery&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/performance"&gt;performance&lt;/a&gt;&lt;/p&gt;



</summary><category term="benchmarks"/><category term="dojo"/><category term="javascript"/><category term="john-resig"/><category term="jquery"/><category term="performance"/></entry><entry><title>Dojo: Still Twice As Fast When It Matters Most</title><link href="https://simonwillison.net/2010/Jan/28/dojo/#atom-tag" rel="alternate"/><published>2010-01-28T22:40:43+00:00</published><updated>2010-01-28T22:40:43+00:00</updated><id>https://simonwillison.net/2010/Jan/28/dojo/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://alex.dojotoolkit.org/2010/01/dojo-still-twice-as-fast-when-it-matters-most/"&gt;Dojo: Still Twice As Fast When It Matters Most&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Alex Russell shows how Dojo out-performs jQuery on the TaskSpeed benchmark, which attempts to represent common tasks in real-world applications and has had code that have been optimised by the development teams behind each of the libraries.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/alex-russell"&gt;alex-russell&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/benchmarks"&gt;benchmarks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/dojo"&gt;dojo&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jquery"&gt;jquery&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/performance"&gt;performance&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/taskspeed"&gt;taskspeed&lt;/a&gt;&lt;/p&gt;



</summary><category term="alex-russell"/><category term="benchmarks"/><category term="dojo"/><category term="javascript"/><category term="jquery"/><category term="performance"/><category term="taskspeed"/></entry><entry><title>Socket Benchmark of Asynchronous Servers in Python</title><link href="https://simonwillison.net/2009/Dec/22/benchmark/#atom-tag" rel="alternate"/><published>2009-12-22T22:34:01+00:00</published><updated>2009-12-22T22:34:01+00:00</updated><id>https://simonwillison.net/2009/Dec/22/benchmark/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://nichol.as/asynchronous-servers-in-python"&gt;Socket Benchmark of Asynchronous Servers in Python&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
A comparison of eight different asynchronous networking frameworks in Python. Tornado comes out on top in most of the benchmarks, but the post is most interesting for the direct comparison of simple code examples for each of the frameworks.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/async"&gt;async&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/benchmarks"&gt;benchmarks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/dieselweb"&gt;dieselweb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/eventio"&gt;eventio&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/eventlet"&gt;eventlet&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/gevent"&gt;gevent&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/orbited"&gt;orbited&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/stackless"&gt;stackless&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/tornado"&gt;tornado&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/twisted"&gt;twisted&lt;/a&gt;&lt;/p&gt;



</summary><category term="async"/><category term="benchmarks"/><category term="dieselweb"/><category term="eventio"/><category term="eventlet"/><category term="gevent"/><category term="orbited"/><category term="python"/><category term="stackless"/><category term="tornado"/><category term="twisted"/></entry><entry><title>JSLitmus</title><link href="https://simonwillison.net/2009/Oct/28/jslitmus/#atom-tag" rel="alternate"/><published>2009-10-28T17:11:48+00:00</published><updated>2009-10-28T17:11:48+00:00</updated><id>https://simonwillison.net/2009/Oct/28/jslitmus/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.broofa.com/Tools/JSLitmus/"&gt;JSLitmus&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
“A lightweight tool for creating ad-hoc JavaScript benchmark tests”. Includes an ingenious hack for graphing the results—it generates a Google Chart, then provides a TinyURL for viewing that chart in the future. The TinyURL is generated by pointing an inconspicuous iframe at the TinyURL API and letting the user copy-and-paste the resulting shortened URL directly out of the iframe.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/benchmarks"&gt;benchmarks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-charts"&gt;google-charts&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/iframes"&gt;iframes&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jslitmus"&gt;jslitmus&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/tinyurl"&gt;tinyurl&lt;/a&gt;&lt;/p&gt;



</summary><category term="benchmarks"/><category term="google-charts"/><category term="iframes"/><category term="javascript"/><category term="jslitmus"/><category term="tinyurl"/></entry><entry><title>Dromaeo: JavaScript Performance Testing</title><link href="https://simonwillison.net/2008/Sep/11/dromaeo/#atom-tag" rel="alternate"/><published>2008-09-11T16:06:55+00:00</published><updated>2008-09-11T16:06:55+00:00</updated><id>https://simonwillison.net/2008/Sep/11/dromaeo/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://dromaeo.com/"&gt;Dromaeo: JavaScript Performance Testing&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
This is one classy benchmark. Run it in as many browsers as you like (each run is saved to the server and assigned a run ID), then compare the results by appending ?id=[run1],[run2]... to the URL.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://wiki.mozilla.org/Dromaeo"&gt;Dromaeo on MozillaWiki&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/benchmarks"&gt;benchmarks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/dromaeo"&gt;dromaeo&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/john-resig"&gt;john-resig&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/performance"&gt;performance&lt;/a&gt;&lt;/p&gt;



</summary><category term="benchmarks"/><category term="dromaeo"/><category term="javascript"/><category term="john-resig"/><category term="performance"/></entry><entry><title>20,000 Reasons Why Comet Scales</title><link href="https://simonwillison.net/2008/Jan/7/comet/#atom-tag" rel="alternate"/><published>2008-01-07T08:32:14+00:00</published><updated>2008-01-07T08:32:14+00:00</updated><id>https://simonwillison.net/2008/Jan/7/comet/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://cometdaily.com/2008/01/07/20000-reasons-that-comet-scales/"&gt;20,000 Reasons Why Comet Scales&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Greg Wilkins coaxes Jetty and Bayeux in to supporting 20,000 simultaneous users per server while maintaining sub-second latency, using Amazon EC2 to run the benchmark.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/bayeux"&gt;bayeux&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/benchmarks"&gt;benchmarks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/comet"&gt;comet&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ec2"&gt;ec2&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/greg-wilkins"&gt;greg-wilkins&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jetty"&gt;jetty&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/performance"&gt;performance&lt;/a&gt;&lt;/p&gt;



</summary><category term="bayeux"/><category term="benchmarks"/><category term="comet"/><category term="ec2"/><category term="greg-wilkins"/><category term="java"/><category term="javascript"/><category term="jetty"/><category term="performance"/></entry><entry><title>PostgreSQL 8.3 vs. 8.2 - a simple benchmark</title><link href="https://simonwillison.net/2007/Dec/12/postgres/#atom-tag" rel="alternate"/><published>2007-12-12T00:42:13+00:00</published><updated>2007-12-12T00:42:13+00:00</updated><id>https://simonwillison.net/2007/Dec/12/postgres/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.kaltenbrunner.cc/blog/index.php?/archives/21-guid.html"&gt;PostgreSQL 8.3 vs. 8.2 - a simple benchmark&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Stefan Kaltenbrunner reports a 2.2x speed increase for PostgreSQL 8.3 compared to 8.2 for a relatively simple benchmark.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/benchmarks"&gt;benchmarks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/postgresql"&gt;postgresql&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/stefankaltenbrunner"&gt;stefankaltenbrunner&lt;/a&gt;&lt;/p&gt;



</summary><category term="benchmarks"/><category term="postgresql"/><category term="stefankaltenbrunner"/></entry><entry><title>ErlyWeb vs. Ruby on Rails EC2 Performance Showdown</title><link href="https://simonwillison.net/2007/Dec/10/yarivus/#atom-tag" rel="alternate"/><published>2007-12-10T15:27:54+00:00</published><updated>2007-12-10T15:27:54+00:00</updated><id>https://simonwillison.net/2007/Dec/10/yarivus/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://yarivsblog.com/articles/2007/12/09/erlyweb-vs-ruby-on-rails-ec2-performance-showdown/"&gt;ErlyWeb vs. Ruby on Rails EC2 Performance Showdown&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
ErlyWeb’s peak response rate beats Rails by 47x, albeit with a hugely simplified benchmark. More interesting than the results is the idea of using EC2 for benchmarking on identical simulated hardware.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/amazon"&gt;amazon&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/benchmarks"&gt;benchmarks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ec2"&gt;ec2&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/erlang"&gt;erlang&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/erlyweb"&gt;erlyweb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/performance"&gt;performance&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rails"&gt;rails&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/virtualisation"&gt;virtualisation&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/yarivsadan"&gt;yarivsadan&lt;/a&gt;&lt;/p&gt;



</summary><category term="amazon"/><category term="benchmarks"/><category term="ec2"/><category term="erlang"/><category term="erlyweb"/><category term="performance"/><category term="rails"/><category term="virtualisation"/><category term="yarivsadan"/></entry><entry><title>Some Notes on Tim Bray's Wide Finder Benchmark</title><link href="https://simonwillison.net/2007/Oct/7/python/#atom-tag" rel="alternate"/><published>2007-10-07T01:06:05+00:00</published><updated>2007-10-07T01:06:05+00:00</updated><id>https://simonwillison.net/2007/Oct/7/python/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://effbot.org/zone/wide-finder.htm"&gt;Some Notes on Tim Bray&amp;#x27;s Wide Finder Benchmark&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Fredrik Lundh demonstrates some Python ninja techniques for parsing log files using multiple cores (and eventually memory mapping).


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/benchmarks"&gt;benchmarks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/effbot"&gt;effbot&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/fredrik-lundh"&gt;fredrik-lundh&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mmap"&gt;mmap&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/multicore"&gt;multicore&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/tim-bray"&gt;tim-bray&lt;/a&gt;&lt;/p&gt;



</summary><category term="benchmarks"/><category term="effbot"/><category term="fredrik-lundh"/><category term="mmap"/><category term="multicore"/><category term="python"/><category term="tim-bray"/></entry></feed>