Skip to content
Muhammet Şafak
tr

Research

last updated:

Deep Research and Measurement

A claim that rests on neither a source nor a number is a preference. This page is where my research lives: which question I chased, how I went at it, what I found and how far I trust it.

3
programmes
3
records
3
measurements

How do I arrive at a finding?

Research is worth something when it can be repeated. Four rules govern what I publish here; a record that breaks one of them does not go up.

  1. 01

    The record carries its provenance

    In a measurement: hardware, versions and configuration go into the environment block.

    In an analysis: every source is listed with its title, address and access date.

  2. 02

    One instance is not evidence

    In a measurement: a single run is not a measurement; the repeat count and the reported value are stated.

    In an analysis: a single source is not a finding; a claim is met with at least two independent ones.

  3. 03

    Evidence is linked

    In a measurement: raw data is linked at a downloadable address and the repeat command is given.

    In an analysis: each source gets its own address; a quotation is linked, not paraphrased.

  4. 04

    Negative results are published too

    A result that fails to confirm the expectation is still a result. An unpublished finding is research that never happened.

Featured record

Service & load Measurement

Seven PHP frameworks under identical load: the gap narrows as soon as the request does real work

On the same hardware, the same PHP build and the same seven routes, how many requests a second do Laravel, Symfony, CodeIgniter, Yii2, Phalcon, Laminas and Slim serve, and at what latency?

Finding

On an empty route the fastest is 4.4× the slowest (Slim 25,975, Laravel 5,966 req/s). As soon as the request does real work the gap closes: 3.7× for a single row from the database, 3.5× for twenty rows. Phalcon is third on an empty route and fifth once a query is involved — being a C extension buys nothing while the process waits on MySQL. And the expensive decision is not the framework: Laravel's own default `web` middleware group takes the same response from 5,858 to 2,176 req/s, so one default costs more than most of the distance between the frameworks.

25,975 req/s
Empty route, fastest
5,966 req/s
Empty route, slowest
4.4× → 3.7×
Gap: empty route → database
Medium confidence Read the report
Frontend performance Measurement

How you import Chart.js decides how many kilobytes the visitor downloads

In a real production build, what is the difference between `chart.js/auto` and a selective `Chart.register()` — in kilobytes?

Finding

Selective registration saves 9.7 kB gzip over `chart.js/auto` (67.8 → 58.1 kB, 14.3%). The larger drop is not in the library core but in leaving unused controllers out: a page that registers only the bar chart falls to 46.0 kB — two thirds of auto.

58.1 kB
Selective register
67.8 kB
chart.js/auto
46.0 kB
Bar only
High confidence Read the report

6 research programmes

Records are not picked at random: each one narrows the question of one of these programmes. Touch a programme to filter the list.

Findings ledger

Every record’s question and its outcome, one line each. Open a row for the detail.

Showing 3 records — All programmes

  • Tooling comparison

    4 metrics

    Question

    The fixed cost of installing a PHP framework: disk size tells you nothing

    How many megabytes on disk, how many files per request and how many milliseconds on the first request do seven PHP frameworks cost — and which of those numbers actually predicts throughput under load?

    Finding

    Disk size predicts nothing: Yii2 has the largest vendor tree at 34.1 MB and loads only 62 files per request, among the fewest in the field. Files per request predicts nothing either: CodeIgniter loads 96 files and serves 6,431 req/s, Symfony loads 224 and serves 13,067. The one number that genuinely separates them is the first request served with a cold opcache: 2.2 ms for Phalcon, 72.2 ms for Laravel — thirty-three times. That is the compile bill the first visitor pays after every deploy, and it is measured in tens of milliseconds, not kilobytes.

    Measurement High confidence
  • Service & load

    4 metrics

    Question

    Seven PHP frameworks under identical load: the gap narrows as soon as the request does real work

    On the same hardware, the same PHP build and the same seven routes, how many requests a second do Laravel, Symfony, CodeIgniter, Yii2, Phalcon, Laminas and Slim serve, and at what latency?

    Finding

    On an empty route the fastest is 4.4× the slowest (Slim 25,975, Laravel 5,966 req/s). As soon as the request does real work the gap closes: 3.7× for a single row from the database, 3.5× for twenty rows. Phalcon is third on an empty route and fifth once a query is involved — being a C extension buys nothing while the process waits on MySQL. And the expensive decision is not the framework: Laravel's own default `web` middleware group takes the same response from 5,858 to 2,176 req/s, so one default costs more than most of the distance between the frameworks.

    Measurement Medium confidence
  • Frontend performance

    4 metrics

    Question

    How you import Chart.js decides how many kilobytes the visitor downloads

    In a real production build, what is the difference between `chart.js/auto` and a selective `Chart.register()` — in kilobytes?

    Finding

    Selective registration saves 9.7 kB gzip over `chart.js/auto` (67.8 → 58.1 kB, 14.3%). The larger drop is not in the library core but in leaving unused controllers out: a page that registers only the bar chart falls to 46.0 kB — two thirds of auto.

    Measurement High confidence

Something you want looked into

If there is a question or a comparison you are curious about, write — it could be the next record.

Search the site

Start typing to search posts, projects and pages.

Esc to close Powered by Pagefind