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;
                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>
        <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;
                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>
        <p>На странице 100 иконок.</p>
        <p id="page-load">Тут отобразится время загрузки страницы (вызова события window.onload)</p>
        <img src="./icon-64.png?t=1770055030.2372.0" />
        <img src="./icon-64.png?t=1770055030.2372.1" />
        <img src="./icon-64.png?t=1770055030.2373.2" />
        <img src="./icon-64.png?t=1770055030.2373.3" />
        <img src="./icon-64.png?t=1770055030.2373.4" />
        <img src="./icon-64.png?t=1770055030.2373.5" />
        <img src="./icon-64.png?t=1770055030.2373.6" />
        <img src="./icon-64.png?t=1770055030.2373.7" />
        <img src="./icon-64.png?t=1770055030.2373.8" />
        <img src="./icon-64.png?t=1770055030.2373.9" />
        <img src="./icon-64.png?t=1770055030.2373.10" />
        <img src="./icon-64.png?t=1770055030.2373.11" />
        <img src="./icon-64.png?t=1770055030.2373.12" />
        <img src="./icon-64.png?t=1770055030.2373.13" />
        <img src="./icon-64.png?t=1770055030.2373.14" />
        <img src="./icon-64.png?t=1770055030.2373.15" />
        <img src="./icon-64.png?t=1770055030.2373.16" />
        <img src="./icon-64.png?t=1770055030.2373.17" />
        <img src="./icon-64.png?t=1770055030.2373.18" />
        <img src="./icon-64.png?t=1770055030.2373.19" />
        <img src="./icon-64.png?t=1770055030.2373.20" />
        <img src="./icon-64.png?t=1770055030.2373.21" />
        <img src="./icon-64.png?t=1770055030.2373.22" />
        <img src="./icon-64.png?t=1770055030.2373.23" />
        <img src="./icon-64.png?t=1770055030.2373.24" />
        <img src="./icon-64.png?t=1770055030.2373.25" />
        <img src="./icon-64.png?t=1770055030.2373.26" />
        <img src="./icon-64.png?t=1770055030.2373.27" />
        <img src="./icon-64.png?t=1770055030.2373.28" />
        <img src="./icon-64.png?t=1770055030.2373.29" />
        <img src="./icon-64.png?t=1770055030.2373.30" />
        <img src="./icon-64.png?t=1770055030.2373.31" />
        <img src="./icon-64.png?t=1770055030.2373.32" />
        <img src="./icon-64.png?t=1770055030.2373.33" />
        <img src="./icon-64.png?t=1770055030.2373.34" />
        <img src="./icon-64.png?t=1770055030.2373.35" />
        <img src="./icon-64.png?t=1770055030.2373.36" />
        <img src="./icon-64.png?t=1770055030.2373.37" />
        <img src="./icon-64.png?t=1770055030.2373.38" />
        <img src="./icon-64.png?t=1770055030.2373.39" />
        <img src="./icon-64.png?t=1770055030.2373.40" />
        <img src="./icon-64.png?t=1770055030.2373.41" />
        <img src="./icon-64.png?t=1770055030.2373.42" />
        <img src="./icon-64.png?t=1770055030.2373.43" />
        <img src="./icon-64.png?t=1770055030.2373.44" />
        <img src="./icon-64.png?t=1770055030.2373.45" />
        <img src="./icon-64.png?t=1770055030.2373.46" />
        <img src="./icon-64.png?t=1770055030.2373.47" />
        <img src="./icon-64.png?t=1770055030.2373.48" />
        <img src="./icon-64.png?t=1770055030.2373.49" />
        <img src="./icon-64.png?t=1770055030.2373.50" />
        <img src="./icon-64.png?t=1770055030.2373.51" />
        <img src="./icon-64.png?t=1770055030.2373.52" />
        <img src="./icon-64.png?t=1770055030.2373.53" />
        <img src="./icon-64.png?t=1770055030.2373.54" />
        <img src="./icon-64.png?t=1770055030.2373.55" />
        <img src="./icon-64.png?t=1770055030.2373.56" />
        <img src="./icon-64.png?t=1770055030.2373.57" />
        <img src="./icon-64.png?t=1770055030.2373.58" />
        <img src="./icon-64.png?t=1770055030.2373.59" />
        <img src="./icon-64.png?t=1770055030.2373.60" />
        <img src="./icon-64.png?t=1770055030.2373.61" />
        <img src="./icon-64.png?t=1770055030.2373.62" />
        <img src="./icon-64.png?t=1770055030.2373.63" />
        <img src="./icon-64.png?t=1770055030.2373.64" />
        <img src="./icon-64.png?t=1770055030.2373.65" />
        <img src="./icon-64.png?t=1770055030.2373.66" />
        <img src="./icon-64.png?t=1770055030.2373.67" />
        <img src="./icon-64.png?t=1770055030.2373.68" />
        <img src="./icon-64.png?t=1770055030.2373.69" />
        <img src="./icon-64.png?t=1770055030.2373.70" />
        <img src="./icon-64.png?t=1770055030.2373.71" />
        <img src="./icon-64.png?t=1770055030.2373.72" />
        <img src="./icon-64.png?t=1770055030.2373.73" />
        <img src="./icon-64.png?t=1770055030.2373.74" />
        <img src="./icon-64.png?t=1770055030.2373.75" />
        <img src="./icon-64.png?t=1770055030.2373.76" />
        <img src="./icon-64.png?t=1770055030.2373.77" />
        <img src="./icon-64.png?t=1770055030.2373.78" />
        <img src="./icon-64.png?t=1770055030.2373.79" />
        <img src="./icon-64.png?t=1770055030.2373.80" />
        <img src="./icon-64.png?t=1770055030.2373.81" />
        <img src="./icon-64.png?t=1770055030.2373.82" />
        <img src="./icon-64.png?t=1770055030.2373.83" />
        <img src="./icon-64.png?t=1770055030.2373.84" />
        <img src="./icon-64.png?t=1770055030.2373.85" />
        <img src="./icon-64.png?t=1770055030.2373.86" />
        <img src="./icon-64.png?t=1770055030.2373.87" />
        <img src="./icon-64.png?t=1770055030.2373.88" />
        <img src="./icon-64.png?t=1770055030.2373.89" />
        <img src="./icon-64.png?t=1770055030.2373.90" />
        <img src="./icon-64.png?t=1770055030.2373.91" />
        <img src="./icon-64.png?t=1770055030.2373.92" />
        <img src="./icon-64.png?t=1770055030.2373.93" />
        <img src="./icon-64.png?t=1770055030.2373.94" />
        <img src="./icon-64.png?t=1770055030.2373.95" />
        <img src="./icon-64.png?t=1770055030.2373.96" />
        <img src="./icon-64.png?t=1770055030.2373.97" />
        <img src="./icon-64.png?t=1770055030.2373.98" />
        <img src="./icon-64.png?t=1770055030.2373.99" />
    </body>
</html>

PRO subscription for working with the service

Promo
To prepare a commercial offer.
190 ₽
50 pages for 10 days
  • 1 page gives 1 tool launch Checking the page.
  • Purchased for a specific site
  • Restrictions on other tools remain the same
PRO subscription
For regular work on a site or a group of sites.
1 580 ₽
3,500 pages per week. The subscription period is 1 month.
Wallet
A separate page balance that complements the PRO subscription balance.
190 ₽
Number of pages
  • An active PRO subscription is required to use the wallet balance
We use cookies. By continuing to use the site, you agree to the processing of personal data in accordance with privacy policy. I agree