Community Hangout - Status Update: 2021-March

Read time: 6 minutes
Community Hangout - Status Update: 2021-March

This is going to be a rather long-ish post with our latest update. We will have a community hangout this weekend to discuss all these in detail. First and foremost, we are going to have a community hangout this week coming, to discuss our latest progress with Phalcon and several changes that are required.

What we will discuss is as follows:

Method types - Interfaces

Zephir and subsequently Phalcon do not enjoy the ease of use and early detection of errors that pure PHP applications do, by using tools such as Psalm, PhpStan etc.

As a result, and especially for version 3, we had a lot of interface mis-alignments. Sadly, Zephir could not pick that up, and unless a developer wrote a custom component using the interface, these bugs remained undetected and of course not fixed.

Example:

Db/Adapter/AdapterInterface

public function fetchOne(
    string $sqlQuery, 
    int $fetchMode = 2, 
    placeholders = null
): array;

Db/Adapter/AbstractAdapter

public function fetchOne(
    string $sqlQuery, 
    $fetchMode = Enum::FETCH_ASSOC, 
    $bindParams = null, 
    $bindTypes = null
): array

The above still exists in the codebase, even with v4. Unfortunately, we missed that and a few others.

Because of the fact that Phalcon follows SemVer, we cannot change these interfaces in a minor version. It has to be a major one, and ample time given to developers to adjust their applications. More on the upcoming versions below.

Luckily, with the latest Zephir changes by Jeckerson and Alexndr, these misalignments are now detectable and will no longer be an issue in the future.

Phalcon versions

Because of the misalgined interfaces mentioned above, we cannot release a minor version, it has to be a major one (SemVer].

Our next version will be v5, which will be Phalcon v4 (as it is now), with corrected interfaces, supporting PHP 7.4 and PHP 8.0.

The PHP based version, the rewrite that we have been working on, translating Zephir code to PHP, will become v6.

PHP 8

Work has been continuous with Phalcon v4 and PHP 8. A new version of Zephir has been released - 0.13. This version will support only PHP 7.4 and PHP 8.0.

At the moment, for PHP 8.0, all tests are passing. What is left to do is check the Windows DLL builds. Sadly, we are still using AppVeyor for these builds which is a bit time consuming - we never had the chance to move that process to GitHub Actions, which we will do at some point in the future. One more thing in the todo list.

Incubator work

We have commissioned two members of the community to help with fully translating all the incubator code to v4. BeMySlaveDarlin and Arrim have been working on the relevant incubator repositories and we have seen significant progress in those repositories. The goal is to have everything ready very soon.

Benchmarks

Since v4 has been a big leap forward for Phalcon with numerous changes, PHP version changes and additional corrections - mostly bugs that lingered in the framework for years - we have to figure out whether what we did made the framework faster or slower.

We mentioned in the past that our goal with Phalcon is to have full benchmark tests for every part of the code - similar to our goal to have full code coverage with our testing suite.

Our initial benchmarks revealled that Phalcon v4 with PHP 7.4 is twice as fast as for instance Symfony. The only slow area is a mass update (shown below). This will be investigated and adjusted as much as possible.

Symfony

Running 15s test @ http://tfb-server:8080/updates?queries=20
  32 threads and 512 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   177.55ms  153.24ms   1.40s    83.53%
    Req/Sec   102.93     30.65   212.00     67.85%
  Latency Distribution
     50%  134.50ms
     75%  244.08ms
     90%  377.61ms
     99%  716.98ms
  49393 requests in 15.07s, 39.45MB read
Requests/sec:   3277.69
Transfer/sec:      2.62MB

Phalcon

Running 15s test @ http://tfb-server:8080/update?queries=20
  32 threads and 512 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   356.63ms  120.51ms 708.25ms   65.01%
    Req/Sec    45.97     25.02   141.00     63.28%
  Latency Distribution
     50%  326.07ms
     75%  448.23ms
     90%  541.84ms
     99%  628.60ms
  21393 requests in 15.08s, 17.21MB read
Requests/sec:   1418.42
Transfer/sec:      1.14MB

Source: https://github.com/TechEmpower/FrameworkBenchmarks/pull/6443

For the Fortunes benchmark (pick row from DB, transform to array, add +1 array to row, pass to view, render from view), Phalcon shines, out performing Symfony significantly in requests per second.

Phalcon

Running 15s test @ http://tfb-server:8080/fortunes
  32 threads and 512 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    21.12ms   17.57ms 230.93ms   81.42%
    Req/Sec     0.86k   350.68     3.57k    69.59%
  Latency Distribution
     50%   16.95ms
     75%   28.84ms
     90%   43.69ms
     99%   82.11ms
  411551 requests in 15.09s, 550.26MB read
Requests/sec:  27266.51
Transfer/sec:     36.46MB

Phalcon Micro

Running 15s test @ http://tfb-server:8080/fortunes
  32 threads and 512 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    13.78ms   13.81ms 177.09ms   89.30%
    Req/Sec     1.41k   540.11     4.38k    68.62%
  Latency Distribution
     50%    9.14ms
     75%   17.22ms
     90%   28.44ms
     99%   71.15ms
  675343 requests in 15.10s, 0.88GB read
Requests/sec:  44724.82
Transfer/sec:     59.80MB

Symfony

Running 15s test @ http://tfb-server:8080/fortunes
  32 threads and 512 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    60.57ms   66.00ms 333.89ms   79.91%
    Req/Sec   419.39    131.83     1.61k    70.61%
  Latency Distribution
     50%   21.00ms
     75%  110.08ms
     90%  163.33ms
     99%  229.28ms
  201303 requests in 15.10s, 277.41MB read
Requests/sec:  13330.72
Transfer/sec:     18.37MB

And also (pick random row from DB)

Phalcon (7.4)

Running 15s test @ http://tfb-server:8080/db
  32 threads and 512 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    20.75ms   18.37ms 178.53ms   83.05%
    Req/Sec     0.90k   399.20     2.96k    63.66%
  Latency Distribution
     50%   15.80ms
     75%   28.02ms
     90%   44.33ms
     99%   87.83ms
  433506 requests in 15.10s, 83.01MB read
Requests/sec:  28708.22
Transfer/sec:      5.50MB

Phalcon Micro (7.4)

Running 15s test @ http://tfb-server:8080/db
  32 threads and 512 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    11.03ms   12.62ms 366.82ms   90.57%
    Req/Sec     1.83k   573.82     8.97k    68.32%
  Latency Distribution
     50%    7.04ms
     75%   13.09ms
     90%   22.95ms
     99%   59.35ms
  876569 requests in 15.08s, 167.85MB read
Requests/sec:  58129.93
Transfer/sec:     11.13MB

Symfony (8.0)

Running 15s test @ http://tfb-server:8080/db
  32 threads and 512 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    56.51ms   62.23ms 305.70ms   79.86%
    Req/Sec   463.98    147.24     1.62k    70.71%
  Latency Distribution
     50%   18.16ms
     75%  103.25ms
     90%  154.10ms
     99%  215.93ms
  222923 requests in 15.10s, 49.06MB read
Requests/sec:  14762.27
Transfer/sec:      3.25MB

Finally, from initial tests, we have not seen a boost - as we expected - between Phalcon with PHP 7.4 vs. Phalcon with PHP 8.0 and JIT. The only thing that we saw was a decrease in latency. More benchmarks will be required to see the actual difference between versions.

Conclusion

A lot of work, a lot of things to do. Thanks especially to Jeckerson who has been working on PHP 8 and managing the incubator projects along with other tasks.

Finally, a huge thanks as always to our community for helping out with finding bugs, reporting issues, and sharing ideas for Phalcon.


Chat - Q&A

Support

Social Media

Videos

<3 Phalcon Team

Projects
We're a nonprofit organization that creates solutions for web developers. Our products are Phalcon, Zephir and others. If you would like to help us stay free and open, please consider supporting us.