Skip to content

Commit

Permalink
frankenphp-symfony: perf improvement (#148)
Browse files Browse the repository at this point in the history
Backport of some micro-optimizations by @francislavoie
laravel/octane#764 (comment)

---------

Co-authored-by: Francis Lavoie <[email protected]>
  • Loading branch information
dunglas and francislavoie authored Oct 30, 2023
1 parent 3e665c7 commit 088a56f
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 19 deletions.
10 changes: 1 addition & 9 deletions psalm.baseline.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,7 @@
</file>
<file src="src/frankenphp-symfony/src/Runner.php">
<UndefinedFunction>
<code><![CDATA[\frankenphp_handle_request(function () use ($server, &$sfRequest, &$sfResponse): void {
// Merge the environment variables coming from DotEnv with the ones tight to the current request
$_SERVER += $server;
$sfRequest = Request::createFromGlobals();
$sfResponse = $this->kernel->handle($sfRequest);
$sfResponse->send();
})]]></code>
<code><![CDATA[\frankenphp_handle_request($handler)]]></code>
</UndefinedFunction>
</file>
<file src="src/google-cloud/router.php">
Expand Down
23 changes: 13 additions & 10 deletions src/frankenphp-symfony/src/Runner.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,22 +22,25 @@ public function __construct(private HttpKernelInterface $kernel)

public function run(): int
{
$kernel = $this->kernel;
$server = array_filter($_SERVER, static fn (string $key) => !str_starts_with($key, 'HTTP_'), ARRAY_FILTER_USE_KEY);
$server['APP_RUNTIME_MODE'] = 'web=1&worker=1';

do {
$ret = \frankenphp_handle_request(function () use ($server, &$sfRequest, &$sfResponse): void {
// Merge the environment variables coming from DotEnv with the ones tight to the current request
$_SERVER += $server;
$handler = static function () use ($kernel, $server, &$sfRequest, &$sfResponse): void {
// Merge the environment variables coming from DotEnv with the ones tied to the current request
$_SERVER += $server;

$sfRequest = Request::createFromGlobals();
$sfResponse = $kernel->handle($sfRequest);

$sfRequest = Request::createFromGlobals();
$sfResponse = $this->kernel->handle($sfRequest);
$sfResponse->send();
};

$sfResponse->send();
});
do {
$ret = \frankenphp_handle_request($handler);

if ($this->kernel instanceof TerminableInterface && $sfRequest && $sfResponse) {
$this->kernel->terminate($sfRequest, $sfResponse);
if ($kernel instanceof TerminableInterface && $sfRequest && $sfResponse) {
$kernel->terminate($sfRequest, $sfResponse);
}

gc_collect_cycles();
Expand Down

0 comments on commit 088a56f

Please sign in to comment.