Benchmarks | sourcemaps-lookup | Spatie

 SPATIE

sourcemaps-lookup
=================

spatie.be/open-source

  [Docs](https://spatie.be/docs)  [Sourcemaps-lookup](https://spatie.be/docs/sourcemaps-lookup/v1)  Benchmarks

 Version   v1

 Other versions for crawler [v1](https://spatie.be/docs/sourcemaps-lookup/v1)

- [ Introduction ](https://spatie.be/docs/sourcemaps-lookup/v1/introduction)
- [ Support us ](https://spatie.be/docs/sourcemaps-lookup/v1/support-us)
- [ Requirements ](https://spatie.be/docs/sourcemaps-lookup/v1/requirements)
- [ Installation &amp; setup ](https://spatie.be/docs/sourcemaps-lookup/v1/installation-setup)
- [ Benchmarks ](https://spatie.be/docs/sourcemaps-lookup/v1/benchmarks)
- [ Questions and issues ](https://spatie.be/docs/sourcemaps-lookup/v1/questions-issues)
- [ About us ](https://spatie.be/docs/sourcemaps-lookup/v1/about-us)
- [ Changelog ](https://spatie.be/docs/sourcemaps-lookup/v1/changelog)

Basic usage
-----------

- [ Looking up a position ](https://spatie.be/docs/sourcemaps-lookup/v1/basic-usage/looking-up-a-position)
- [ Reading inlined source content ](https://spatie.be/docs/sourcemaps-lookup/v1/basic-usage/reading-source-content)
- [ Error handling ](https://spatie.be/docs/sourcemaps-lookup/v1/basic-usage/error-handling)
- [ Complete example ](https://spatie.be/docs/sourcemaps-lookup/v1/basic-usage/complete-example)

Advanced usage
--------------

- [ Reverse lookup ](https://spatie.be/docs/sourcemaps-lookup/v1/advanced-usage/reverse-lookup)
- [ Resolving the enclosing scope ](https://spatie.be/docs/sourcemaps-lookup/v1/advanced-usage/resolving-the-enclosing-scope)
- [ Marking third-party sources ](https://spatie.be/docs/sourcemaps-lookup/v1/advanced-usage/marking-third-party-sources)
- [ Listing the source files ](https://spatie.be/docs/sourcemaps-lookup/v1/advanced-usage/listing-source-files)
- [ Tips for bulk lookups ](https://spatie.be/docs/sourcemaps-lookup/v1/advanced-usage/tips-for-bulk-lookups)
- [ Supported source map features ](https://spatie.be/docs/sourcemaps-lookup/v1/advanced-usage/supported-features)
- [ Under the hood ](https://spatie.be/docs/sourcemaps-lookup/v1/advanced-usage/under-the-hood)

 Benchmarks
==========

Measured on an Apple M1 Pro (PHP 8.5.2), median of 10 runs, each in an isolated PHP subprocess to get clean peak memory numbers. `axy/sourcemap` 1.x is included as a baseline, since it's the main existing option for Source Map v3 work in PHP.

Scenarios:

- **A**: parse + 1 lookup (cold path).
- **B**: parse + 20 lookups across about 5 distinct source files (realistic stack trace).
- **C**: parse + 20 lookups on a single line in the middle of the map (worst case for lazy parsing. The first lookup must decode everything up to that line, the remaining 19 are cached).

```
fixture  sc    axy(wall ms) ours(wall ms)  Δwall   axy(peak MiB) ours(peak MiB)  Δpeak
----------------------------------------------------------------------------------------
small    A            4.61          2.35    -49%           4.00           4.00     +0%
small    B           12.27          2.37    -81%           4.00           4.00     +0%
small    C           12.26          2.33    -81%           4.00           4.00     +0%
medium   A           49.97          0.51    -99%          26.00           4.00    -85%
medium   B           50.35          0.64    -99%          26.00           4.00    -85%
medium   C           50.11         17.82    -64%          26.00           6.00    -77%
large    A          399.11          3.74    -99%         190.97          17.97    -91%
large    B          399.28          3.84    -99%         190.97          17.97    -91%
large    C          403.11        117.19    -71%         190.97          36.47    -81%
```

Run it yourself:

```
composer bench
```
