Lessons

An overabundance of small pictures

To download a file, the browser spends time on service operations: establishing a connection, sending a request, receiving a response, closing a connection. This time is constant and does not depend on the speed of the Internet connection. For example, with a very fast Internet connection, it will take 1 millisecond to download the contents of the file, and up to 100 for service operations. The execution time of service operations depends on the network latency — ping, and not on the speed of the Internet connection.

To speed up the site, programmers group many small icons into one large file. This is usually a CSS or HTML file. This is done using data url technology.

Here are examples of the data url of a 1-by-1 pixel PNG image.

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQIW2P4DwQACfsD/Z8fLAAAAAAASUVORK5CYII=">
.element {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQIW2P4DwQACfsD/Z8fLAAAAAAASUVORK5CYII=)
}

You can convert any file to data url. [Conversion service](https://datauri.ai /) files.

Below is an example of how the download speed changes if the icons are not uploaded as a separate file, but transferred to HTML code as a data url.

Demonstration
PHP code
HTML code
<?php
$mode = $_GET['mode'] ?? '';
$base64 = 'data:image/png;base64,'.base64_encode(file_get_contents('icon-64.png'));
?><!DOCTYPE html>
<html>
    <head>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <style>
            .btn {
                color: #000;
                display: inline-block;
                margin-bottom: 5px;
                text-decoration: none;
                padding: 5px 10px;
                border: 1px solid #000;
                border-radius: 5px;
            }
            .btn:hover {
                background-color: #ddd;
            }
            .btn.active {
                background-color: #000;
                color: #fff;
            }

        </style>
        <script>
            window.addEventListener("load", (event) => {
                document.querySelector('#page-load').innerHTML = 'Страница загрузилась (событие window.onload) за <b>'+(performance.now()/1000)+'с</b>.';
            });
        </script>
    </head>
    <body style="font-family: sans-serif;">
        Режим: <a class="btn <?=$mode === '' ? 'active' : ''?>" href="./icons_count.php">Иконки файлами</a> <a class="btn <?=$mode === '64' ? 'active' : ''?>" href="./icons_count.php?mode=64">Иконки base64</a>
        <br />
        <p>На странице 100 иконок.</p>
        <p id="page-load">Тут отобразится время загрузки страницы (вызова события window.onload)</p>
<?php for($i = 0; $i < 100;++$i) { ?>
        <img src="<?=$mode === '64' ? $base64 : './icon-64.png?t='.microtime(true).'.'.$i ?>" />
<?php } ?>
    </body>
</html>
<!DOCTYPE html>
<html>
    <head>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <style>
            .btn {
                color: #000;
                display: inline-block;
                margin-bottom: 5px;
                text-decoration: none;
                padding: 5px 10px;
                border: 1px solid #000;
                border-radius: 5px;
            }
            .btn:hover {
                background-color: #ddd;
            }
            .btn.active {
                background-color: #000;
                color: #fff;
            }

        </style>
        <script>
            window.addEventListener("load", (event) => {
                document.querySelector('#page-load').innerHTML = 'Страница загрузилась (событие window.onload) за <b>'+(performance.now()/1000)+'с</b>.';
            });
        </script>
    </head>
    <body style="font-family: sans-serif;">
        Режим: <a class="btn active" href="./icons_count.php">Иконки файлами</a> <a class="btn " href="./icons_count.php?mode=64">Иконки base64</a>
        <br />
        <p>На странице 100 иконок.</p>
        <p id="page-load">Тут отобразится время загрузки страницы (вызова события window.onload)</p>
        <img src="./icon-64.png?t=1772916254.6354.0" />
        <img src="./icon-64.png?t=1772916254.6354.1" />
        <img src="./icon-64.png?t=1772916254.6355.2" />
        <img src="./icon-64.png?t=1772916254.6355.3" />
        <img src="./icon-64.png?t=1772916254.6355.4" />
        <img src="./icon-64.png?t=1772916254.6355.5" />
        <img src="./icon-64.png?t=1772916254.6355.6" />
        <img src="./icon-64.png?t=1772916254.6355.7" />
        <img src="./icon-64.png?t=1772916254.6355.8" />
        <img src="./icon-64.png?t=1772916254.6355.9" />
        <img src="./icon-64.png?t=1772916254.6355.10" />
        <img src="./icon-64.png?t=1772916254.6355.11" />
        <img src="./icon-64.png?t=1772916254.6355.12" />
        <img src="./icon-64.png?t=1772916254.6355.13" />
        <img src="./icon-64.png?t=1772916254.6355.14" />
        <img src="./icon-64.png?t=1772916254.6355.15" />
        <img src="./icon-64.png?t=1772916254.6355.16" />
        <img src="./icon-64.png?t=1772916254.6355.17" />
        <img src="./icon-64.png?t=1772916254.6355.18" />
        <img src="./icon-64.png?t=1772916254.6355.19" />
        <img src="./icon-64.png?t=1772916254.6355.20" />
        <img src="./icon-64.png?t=1772916254.6355.21" />
        <img src="./icon-64.png?t=1772916254.6355.22" />
        <img src="./icon-64.png?t=1772916254.6355.23" />
        <img src="./icon-64.png?t=1772916254.6355.24" />
        <img src="./icon-64.png?t=1772916254.6355.25" />
        <img src="./icon-64.png?t=1772916254.6355.26" />
        <img src="./icon-64.png?t=1772916254.6355.27" />
        <img src="./icon-64.png?t=1772916254.6355.28" />
        <img src="./icon-64.png?t=1772916254.6355.29" />
        <img src="./icon-64.png?t=1772916254.6355.30" />
        <img src="./icon-64.png?t=1772916254.6355.31" />
        <img src="./icon-64.png?t=1772916254.6355.32" />
        <img src="./icon-64.png?t=1772916254.6355.33" />
        <img src="./icon-64.png?t=1772916254.6355.34" />
        <img src="./icon-64.png?t=1772916254.6355.35" />
        <img src="./icon-64.png?t=1772916254.6355.36" />
        <img src="./icon-64.png?t=1772916254.6355.37" />
        <img src="./icon-64.png?t=1772916254.6355.38" />
        <img src="./icon-64.png?t=1772916254.6355.39" />
        <img src="./icon-64.png?t=1772916254.6355.40" />
        <img src="./icon-64.png?t=1772916254.6355.41" />
        <img src="./icon-64.png?t=1772916254.6355.42" />
        <img src="./icon-64.png?t=1772916254.6355.43" />
        <img src="./icon-64.png?t=1772916254.6355.44" />
        <img src="./icon-64.png?t=1772916254.6355.45" />
        <img src="./icon-64.png?t=1772916254.6355.46" />
        <img src="./icon-64.png?t=1772916254.6355.47" />
        <img src="./icon-64.png?t=1772916254.6355.48" />
        <img src="./icon-64.png?t=1772916254.6355.49" />
        <img src="./icon-64.png?t=1772916254.6355.50" />
        <img src="./icon-64.png?t=1772916254.6355.51" />
        <img src="./icon-64.png?t=1772916254.6355.52" />
        <img src="./icon-64.png?t=1772916254.6355.53" />
        <img src="./icon-64.png?t=1772916254.6355.54" />
        <img src="./icon-64.png?t=1772916254.6355.55" />
        <img src="./icon-64.png?t=1772916254.6355.56" />
        <img src="./icon-64.png?t=1772916254.6355.57" />
        <img src="./icon-64.png?t=1772916254.6355.58" />
        <img src="./icon-64.png?t=1772916254.6355.59" />
        <img src="./icon-64.png?t=1772916254.6355.60" />
        <img src="./icon-64.png?t=1772916254.6355.61" />
        <img src="./icon-64.png?t=1772916254.6355.62" />
        <img src="./icon-64.png?t=1772916254.6355.63" />
        <img src="./icon-64.png?t=1772916254.6355.64" />
        <img src="./icon-64.png?t=1772916254.6355.65" />
        <img src="./icon-64.png?t=1772916254.6355.66" />
        <img src="./icon-64.png?t=1772916254.6355.67" />
        <img src="./icon-64.png?t=1772916254.6355.68" />
        <img src="./icon-64.png?t=1772916254.6355.69" />
        <img src="./icon-64.png?t=1772916254.6355.70" />
        <img src="./icon-64.png?t=1772916254.6355.71" />
        <img src="./icon-64.png?t=1772916254.6355.72" />
        <img src="./icon-64.png?t=1772916254.6355.73" />
        <img src="./icon-64.png?t=1772916254.6355.74" />
        <img src="./icon-64.png?t=1772916254.6355.75" />
        <img src="./icon-64.png?t=1772916254.6355.76" />
        <img src="./icon-64.png?t=1772916254.6355.77" />
        <img src="./icon-64.png?t=1772916254.6355.78" />
        <img src="./icon-64.png?t=1772916254.6355.79" />
        <img src="./icon-64.png?t=1772916254.6355.80" />
        <img src="./icon-64.png?t=1772916254.6355.81" />
        <img src="./icon-64.png?t=1772916254.6355.82" />
        <img src="./icon-64.png?t=1772916254.6355.83" />
        <img src="./icon-64.png?t=1772916254.6355.84" />
        <img src="./icon-64.png?t=1772916254.6355.85" />
        <img src="./icon-64.png?t=1772916254.6355.86" />
        <img src="./icon-64.png?t=1772916254.6355.87" />
        <img src="./icon-64.png?t=1772916254.6355.88" />
        <img src="./icon-64.png?t=1772916254.6355.89" />
        <img src="./icon-64.png?t=1772916254.6355.90" />
        <img src="./icon-64.png?t=1772916254.6355.91" />
        <img src="./icon-64.png?t=1772916254.6355.92" />
        <img src="./icon-64.png?t=1772916254.6355.93" />
        <img src="./icon-64.png?t=1772916254.6355.94" />
        <img src="./icon-64.png?t=1772916254.6355.95" />
        <img src="./icon-64.png?t=1772916254.6355.96" />
        <img src="./icon-64.png?t=1772916254.6355.97" />
        <img src="./icon-64.png?t=1772916254.6355.98" />
        <img src="./icon-64.png?t=1772916254.6355.99" />
    </body>
</html>

PRO subscription for working with the service

Promo
Checking 50 pages in the tool "Checking the page"
190 ₽
The subscription is activated for 10 days and is linked to a specific site.
PRO subscription
3,500 pages per week in tools "Checking the page" and "Full site scan".
1 580 ₽
The subscription is activated for 30 days and you can scan any site.
Wallet
Additional pages that are credited to a separate balance. For checking large sites.
200 ₽
Number of pages
An active PRO subscription is required.
We use cookies. By continuing to use the site, you agree to the processing of personal data in accordance with privacy policy. I agree