Skip to content

itxshakil#215

Open
itxshakil wants to merge 5 commits intotempestphp:mainfrom
itxshakil:main
Open

itxshakil#215
itxshakil wants to merge 5 commits intotempestphp:mainfrom
itxshakil:main

Conversation

@itxshakil
Copy link

No description provided.

@itxshakil
Copy link
Author

/bench

@brendt
Copy link
Member

brendt commented Mar 1, 2026

Benchmarking complete! Mean execution time: 60.4547954796s

- Replace `explode()` and `parse_url()` with manual `strpos()` and `substr()` for faster data extraction.
- Use `rtrim()` instead of `trim()` to avoid unnecessary leading whitespace scanning.
- Reduce memory allocations and function call overhead in the main loop.
@itxshakil
Copy link
Author

/bench

@brendt
Copy link
Member

brendt commented Mar 1, 2026

Benchmarking complete! Mean execution time: 52.56947885558s

@brendt
Copy link
Member

brendt commented Mar 1, 2026

You just made the CPU do less cardio. 🫀
🏆 leaderboard.csv

@brendt
Copy link
Member

brendt commented Mar 1, 2026

You just made the CPU do less cardio. 🫀
🏆 leaderboard-single-thread.csv

@itxshakil
Copy link
Author

/bench

@brendt
Copy link
Member

brendt commented Mar 1, 2026

Benchmarking complete! Mean execution time: 45.10318612694s

@brendt
Copy link
Member

brendt commented Mar 1, 2026

I think there's room for one more improvement… 👀
🏆 leaderboard.csv

@brendt
Copy link
Member

brendt commented Mar 1, 2026

You've improved your result! Have a cookie: 🍪
🏆 leaderboard-single-thread.csv

@itxshakil
Copy link
Author

/bench

@brendt
Copy link
Member

brendt commented Mar 1, 2026

Failed to run benchmark:

Cloning into '/Users/brentroose/Dev/100-million-row-challenge/app/Commands/../../.benchmark/pr-215'...
Installing dependencies from lock file
Verifying lock file contents can be installed on current platform.
Package operations: 62 installs, 0 updates, 0 removals
    0 [>---------------------------]    0 [->--------------------------]
  - Installing doctrine/lexer (3.0.1): Extracting archive
  - Installing guzzlehttp/promises (2.3.0): Extracting archive
  - Installing ralouphie/getallheaders (3.0.3): Extracting archive
  - Installing psr/http-message (2.0): Extracting archive
  - Installing psr/http-factory (1.1.0): Extracting archive
  - Installing guzzlehttp/psr7 (2.8.0): Extracting archive
  - Installing nette/utils (v4.1.3): Extracting archive
  - Installing nette/schema (v1.3.5): Extracting archive
  - Installing dflydev/dot-access-data (v3.0.3): Extracting archive
  - Installing league/config (v1.2.0): Extracting archive
  - Installing league/mime-type-detection (1.16.0): Extracting archive
  - Installing league/flysystem-local (3.31.0): Extracting archive
  - Installing league/flysystem (3.31.0): Extracting archive
  - Installing phpstan/phpstan (2.1.39): Extracting archive
  - Installing composer/semver (3.4.4): Extracting archive
  - Installing psr-discovery/discovery (1.2.0): Extracting archive
  - Installing psr/cache (3.0.0): Extracting archive
  - Installing symfony/cache-contracts (v3.6.0): Extracting archive
  - Installing psr/event-dispatcher (1.0.0): Extracting archive
  - Installing symfony/event-dispatcher-contracts (v3.6.0): Extracting archive
  - Installing symfony/event-dispatcher (v8.0.4): Extracting archive
  - Installing symfony/polyfill-mbstring (v1.33.0): Extracting archive
  - Installing symfony/polyfill-intl-normalizer (v1.33.0): Extracting archive
  - Installing symfony/polyfill-intl-idn (v1.33.0): Extracting archive
  - Installing symfony/mime (v8.0.5): Extracting archive
  - Installing symfony/polyfill-uuid (v1.33.0): Extracting archive
  - Installing symfony/deprecation-contracts (v3.6.0): Extracting archive
  - Installing psr/container (2.0.2): Extracting archive
  - Installing symfony/service-contracts (v3.6.1): Extracting archive
  - Installing voku/portable-ascii (2.0.3): Extracting archive
  - Installing symfony/polyfill-php80 (v1.33.0): Extracting archive
  - Installing symfony/polyfill-ctype (v1.33.0): Extracting archive
  - Installing phpoption/phpoption (1.9.5): Extracting archive
  - Installing graham-campbell/result-type (v1.1.4): Extracting archive
  - Installing vlucas/phpdotenv (v5.6.3): Extracting archive
  - Installing tempest/highlight (2.17.1): Extracting archive
  - Installing symfony/yaml (v7.4.1): Extracting archive
  - Installing symfony/var-exporter (v7.4.0): Extracting archive
  - Installing symfony/var-dumper (v7.4.4): Extracting archive
  - Installing symfony/uid (v7.4.4): Extracting archive
  - Installing symfony/process (v7.4.5): Extracting archive
  - Installing psr/log (3.0.2): Extracting archive
  - Installing egulias/email-validator (4.0.4): Extracting archive
  - Installing symfony/mailer (v7.4.4): Extracting archive
  - Installing symfony/filesystem (v7.4.0): Extracting archive
  - Installing symfony/cache (v7.4.5): Extracting archive
  - Installing rector/rector (2.3.1): Extracting archive
  - Installing psr/http-client (1.0.3): Extracting archive
  - Installing psr/clock (1.0.0): Extracting archive
  - Installing psr-discovery/http-factory-implementations (1.2.0): Extracting archive
  - Installing psr-discovery/http-client-implementations (1.4.0): Extracting archive
  - Installing nikic/php-parser (v5.7.0): Extracting archive
  - Installing nette/php-generator (v4.2.1): Extracting archive
  - Installing monolog/monolog (3.10.0): Extracting archive
  - Installing guzzlehttp/guzzle (7.10.0): Extracting archive
  - Installing league/oauth2-client (2.9.0): Extracting archive
  - Installing league/commonmark (2.8.0): Extracting archive
  - Installing laminas/laminas-diactoros (3.8.0): Extracting archive
  - Installing giggsey/libphonenumber-for-php-lite (9.0.23): Extracting archive
  - Installing filp/whoops (2.18.4): Extracting archive
  - Installing doctrine/inflector (2.1.0): Extracting archive
  - Installing tempest/framework (v3.2.1): Extracting archive
  0/62 [>---------------------------]   0%
 32/62 [==============>-------------]  51%
 45/62 [====================>-------]  72%
 55/62 [========================>---]  88%
 59/62 [==========================>-]  95%
 62/62 [============================] 100%
Generating optimized autoload files
41 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
Benchmark 1: cd /Users/brentroose/Dev/100-million-row-challenge/app/Commands/../../.benchmark/pr-215 && php -dmax_execution_time=300 tempest data:parse --input-path="/Users/brentroose/Dev/100-million-row-challenge/app/Commands/../../data/real-data.csv" --output-path="/Users/brentroose/Dev/100-million-row-challenge/app/Commands/../../data/real-data-actual.json"

× // ErrorException
× // file_get_contents(): Read of 7509683019 bytes failed with errno=22 Invalid argument

In /Users/brentroose/Dev/100-million-row-challenge/.benchmark/pr-215/app/Parser.php:15

 9 {
10     /**
11      * @throws Exception
12      */
13     public function parse(string $inputPath, string $outputPath): void
14     {
15         $content = file_get_contents($inputPath);  <<<
16         if ($content === false) {
17             throw new RuntimeException("Could not open input file: $inputPath");
18         }

#0 Tempest\Core\FrameworkKernel->{closure:Tempest\Core\FrameworkKernel::registerExceptionHandler():250}()
#1 /Users/brentroose/Dev/100-million-row-challenge/.benchmark/pr-215/app/Parser.php:15

   Run with -v to show more.

@itxshakil
Copy link
Author

/bench

@brendt
Copy link
Member

brendt commented Mar 1, 2026

Benchmarking complete! Mean execution time: 41.77086063634s

@brendt
Copy link
Member

brendt commented Mar 1, 2026

That's a mean time you've got there. 🥁
🏆 leaderboard.csv

@brendt
Copy link
Member

brendt commented Mar 1, 2026

Mean time goes down, confidence goes up
🏆 leaderboard-single-thread.csv

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants