<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/there-is-no-cache-2r2dtwjqr" -->

---
title: There is NO cache | daily.dev
description: PHP tools like PHPStan and Rector rely on caching only to compensate for the language's slow execution, and that cache causes false positives, Tomas Votruba...
canonical: https://daily.dev/posts/there-is-no-cache-2r2dtwjqr
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: There is NO cache | daily.dev
og:description: PHP tools like PHPStan and Rector rely on caching only to compensate for the language's slow execution, and that cache causes false positives, Tomas Votruba...
og:url: https://daily.dev/posts/there-is-no-cache-2r2dtwjqr
og:image: https://api.daily.dev/og/posts/2r2dtWJqr.png
og:image:alt: There is NO cache
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# There is NO cache

**[Tomas Votruba](https://daily.dev/sources/tomasvotruba)** · 4 min read · 1 upvotes · 0 comments

## Summary

PHP tools like PHPStan and Rector rely on caching only to compensate for the language's slow execution, and that cache causes false positives, Tomas Votruba argues. Benchmarks from his open-source 'need-for-speed' repo show PHPStan on Symfony (12,247 files) takes 114s cold versus 3.4s with warm cache. Mago, a Rust-based tool, runs the same project in 5.3s with no cache at all. ECS's PHP engine takes 111s cold and 63s hot, while its Go-based '--blink' binary finishes in 4.7s needing no cache. He reports Rector 2.7 showing different results locally versus in CI due to cache inconsistencies, and argues fast languages make sub-1-second pre-commit hooks possible again.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://tomasvotruba.com/blog/there-is-no-cache>

## Questions this post answers

### why does PHPStan need a cache but a Rust static analysis tool doesn't

PHPStan needs a cache to compensate for PHP's slow execution speed, while Rust tools are fast enough to run without one. On a Symfony project with 12,247 files, PHPStan takes 114 seconds cold and 3.4 seconds with a warm cache, a roughly 30x gap. Mago, a Rust-based tool, analyzes the same project in 5.3 seconds with no cache at all, beating PHPStan's cached run.

_Developers choosing between PHP and Rust/Go tooling can track these speed and caching tradeoffs on daily.dev._

### can caching in static analysis tools cause false positives or inconsistent results

Yes, cache-based static analysis can produce different results locally versus in CI. After upgrading Rector to version 2.7, one run showed 24 changed files in CI but 0 files locally, traced to local and remote cache diverging, possibly from an interrupted process or a missed cache invalidation on version bump. PHPStan has shown similar local-versus-remote discrepancies.

_Teams debugging flaky CI results from cached static analysis can compare notes on daily.dev._

### how much faster is ECS's Go binary compared to its PHP engine

ECS's bundled Go binary ('--blink') runs in 4.7 seconds with no cache needed, compared to 111 seconds cold and 63 seconds hot for its PHP engine, about a 20x speedup with nothing to invalidate. This mirrors a broader pattern where Go and Rust reimplementations of PHP tooling eliminate the need for caching entirely.

_Developers evaluating Go rewrites of PHP tooling can follow these benchmarks on daily.dev._

## Similar posts on daily.dev

- [Unicorn Benefits of Rust/Go Tooling in PHP](https://daily.dev/posts/unicorn-benefits-of-rust-go-tooling-in-php-xnmyqm1at) · Tomas Votruba · 0 upvotes · 0 comments
- [Rust/Go Leverage in PHP](https://daily.dev/posts/rust-go-leverage-in-php-10f11d6gc) · Tomas Votruba · 21 upvotes · 1 comments
- [Is PHP a Rusty language?](https://daily.dev/posts/is-php-a-rusty-language--ro9ckv6fd) · Tomas Votruba · 21 upvotes · 3 comments

---

Tags: [#php](https://daily.dev/tags/php), [#golang](https://daily.dev/tags/golang), [#rust](https://daily.dev/tags/rust), [#phpstan](https://daily.dev/tags/phpstan)

[View this post on daily.dev](https://daily.dev/posts/there-is-no-cache-2r2dtwjqr)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"There is NO cache","url":"https://daily.dev/posts/there-is-no-cache-2r2dtwjqr","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/there-is-no-cache-2r2dtwjqr"},"datePublished":"2026-10-25T00:26:22.933Z","dateModified":"2026-10-25T00:26:57.891Z","description":"PHP tools like PHPStan and Rector rely on caching only to compensate for the language's slow execution, and that cache causes false positives, Tomas Votruba...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/8c51d92d0e6e5142d62589391a19488e?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/8c51d92d0e6e5142d62589391a19488e?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Tomas Votruba","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Tomas Votruba","logo":"https://media.daily.dev/image/upload/s--S3GKbTXH--/f_auto/v1723183142/logos/tomasvotruba","url":"https://daily.dev/sources/tomasvotruba"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/there-is-no-cache-2r2dtwjqr","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":1},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"php,golang,rust,phpstan","timeRequired":"PT4M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Tomas Votruba","item":"https://daily.dev/sources/tomasvotruba"},{"@type":"ListItem","position":3,"name":"There is NO cache"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/there-is-no-cache-2r2dtwjqr#faq","mainEntity":[{"@type":"Question","name":"why does PHPStan need a cache but a Rust static analysis tool doesn't","acceptedAnswer":{"@type":"Answer","text":"PHPStan needs a cache to compensate for PHP's slow execution speed, while Rust tools are fast enough to run without one. On a Symfony project with 12,247 files, PHPStan takes 114 seconds cold and 3.4 seconds with a warm cache, a roughly 30x gap. Mago, a Rust-based tool, analyzes the same project in 5.3 seconds with no cache at all, beating PHPStan's cached run. Developers choosing between PHP and Rust/Go tooling can track these speed and caching tradeoffs on daily.dev."}},{"@type":"Question","name":"can caching in static analysis tools cause false positives or inconsistent results","acceptedAnswer":{"@type":"Answer","text":"Yes, cache-based static analysis can produce different results locally versus in CI. After upgrading Rector to version 2.7, one run showed 24 changed files in CI but 0 files locally, traced to local and remote cache diverging, possibly from an interrupted process or a missed cache invalidation on version bump. PHPStan has shown similar local-versus-remote discrepancies. Teams debugging flaky CI results from cached static analysis can compare notes on daily.dev."}},{"@type":"Question","name":"how much faster is ECS's Go binary compared to its PHP engine","acceptedAnswer":{"@type":"Answer","text":"ECS's bundled Go binary ('--blink') runs in 4.7 seconds with no cache needed, compared to 111 seconds cold and 63 seconds hot for its PHP engine, about a 20x speedup with nothing to invalidate. This mirrors a broader pattern where Go and Rust reimplementations of PHP tooling eliminate the need for caching entirely. Developers evaluating Go rewrites of PHP tooling can follow these benchmarks on daily.dev."}}]}
```

