Ленивая загрузка для wordpress: как добавить ее на сайт

Содержание:

Options

The plugin is very extensible and supports a lot of options that are stored in $.lazyLoadXT object:

$.extend($.lazyLoadXT, {
  edgeY:  200,
  srcAttr: 'data-src'
});

You can either create this object before loading of , or extend it after loading (but before
jQuery’s event).

  • autoInit: auto initialization of the plugin, that is processing of all elements matching selector in
    jQuery’s event, if it is disabled you have to do such initialization manually as explained in section (default )
  • selector: selector for elements that should be lazy-loaded (default )
  • srcAttr: attribute containing actual path, see example below in
    (#hi-dpi-retina-images) section (default )
  • blankImage: blank image for used until actual image is not loaded (default is transparent 1×1 gif image in
    data-uri format )
  • edgeY: expand visible page area (viewport) in vertical direction by specified amount of pixels,
    so that elements start to load even if they are not visible, but will be visible after scroll by pixels
    (default )
  • edgeX: expand visible page area in horizontal direction by specified amount of pixels (default )
  • throttle: time interval (in ms) to check for visible elements, the plugin uses it to speed up page work in the
    case of flow of page change events (default )
  • visibleOnly: being disabled this option forces the plugin to check element position only, but not to check that
    it is actually visible (default )
  • checkDuplicates: prevent re-add lazy-loaded elements (default )
  • scrollContainer: set scroll container () for adding elements (default ),
  • forceLoad: load all elements without checking for visibility (default )
  • loadEvent: space-separated list of events when the plugin starts to found new elements matching
    (default to check AJAX-loaded content in jQueryMobile and to support backward navigation in iPhone)
  • updateEvent: space-separated list of events when the plugin starts to check what elements are visible in
    current viewport (default )
  • forceEvent: space-separated list of events when the plugin starts to load all images independently of are
    they visible or not (default )
  • oninit: handler called when the plugin push elements into internal list of «lazy» elements,
    it may be either a function (DOM element is accessible using object) or an object with and/or
    properties ( is a space-separated list of class names that should be added to the elements,
    and contains class names that should be removed, has higher priority in the case of
    identical class names) (default )
  • onshow: handler called when an element appears in viewport area, it may be either a function or an object by
    analogy to handler, see example below in section (default )
  • onload: handler called when element is successfully loaded, it may be either a function or an object by analogy
    to handler (default )
  • onerror: handler called when browser cannot load the element, it may be either a function or an object by analogy
    to handler (default )
  • oncomplete: handler called when all lazy-loaded elements are loaded (default )

Преимущества отложенной загрузки изображений

Основные преимущества ленивой загрузки разбиты на две области…

Ускорьте загрузку вашей страницы

Основным преимуществом является значительное обновление начального времени загрузки вашего сайта. Если вы используете много изображений в своих сообщениях, они добавят кучу размеров на вашу страницу. На самом деле нет смысла загружать их, пока посетители не смогут их увидеть (кроме вопросов SEO, о которых я расскажу позже).

Поэтому лучше сразу загрузить страницу, а затем заполнять её изображениями по мере необходимости. Вы даже не можете быть уверены, что читатели прокрутят весь путь вниз, что делает их загрузку совершенно ненужной.

Это подводит меня к следующему пункту …

Сохранить пропускную способность ваших пользователей

Не все используют неограниченную пропускную способность. Для людей, которые ограничены, скажем, мобильными тарифными планами 3G (или просто ужасными интернет-провайдерами), вы можете сделать им одолжение, лениво загружая ваши изображения. Им нужно будет использовать данные только для изображений, которые они на самом деле видят.

Возможно, они никогда не узнают, но это приятно делать, особенно на вашем мобильном сайте.

More than images

Images are not the only page elements that may be lazy loaded. Though default value for is
, you can append it by to use lazy-loading for iframes, for videos,
etc. Full list of supported tags include all tags with attribute: , , ,
, , , .

We distribute special «extra» version of the plugin with additional code for lazyloading of elements and
ed YouTube videos. To use this version, it’s necessary to just load instead of
.

-embedded Videos (YouTube, Vimeo, etc.)

Most of video hostings allow to embed videos as elements (e.g. Youtube, Vimeo, DailyMotion, and even KickStarter)
and they may be lazy loaded in the way similar to images (by replacing attribute by ):

<script src="jquery.lazyloadxt.extra.js"></script>
<iframe width="420" height="315" data-src="//www.youtube.com/embed/uOzO9O15gwI?rel=0" frameborder="" allowfullscreen></iframe>

Support tag

It is easy too, just replace attribute by and by (if exists).

<script src="jquery.lazyloadxt.extra.js"></script>
<video data-poster="/path/to/poster.jpg" width="320" height="240" controls>
  <source data-src="/path/to/video.mp4" type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"'>
  <source data-src="/path/to/video.ogv" type='video/ogg; codecs="theora, vorbis"'>
</video>

<video data-src="/path/to/video2.mp4" width="320" height="240" controls></video>

Usage

HTMLAttribute Style

<div id="you-want-lazyload" data-lazyload="&lt;p&gt;Anything you want to lazyload&lt;/p&gt;">
</div>

Script Style

<div id="you-want-lazyload">
  <script type="text/lazyload">
    <p>Anything you want to lazyload</p>
  </script>
</div>

Comment Style

<div id="you-want-lazyload">
  <!--
    <p>Anything you want to lazyload</p>
  -->
</div>

JavaScript

$('#you-want-lazyload').lazyload(options);

You should choose only one style. When multiple styles set, priority is Attribute > Script > Comment.

Options

threshold: (default: )

Sets the pixels to load earlier. Setting threshold to 200 causes image to load 200 pixels before it appears on viewport. It should be greater or equal zero.

load: (default: )

Sets the callback function when the load event is firing.

: The content in lazyload tag will be returned as a jQuery object.

trigger: (default: )

Sets events to trigger lazyload. Default is customized event , it will trigger when element appear in screen. You could set other events including each one separated by a space, ex: .

Methods

$.lazyload.setInterval(inverval)

Set interval of timer that check container display status.

inverval: (default: )

Interval of timer. Set 0 to disable timer, and you can use to trigger detection manually.

$.lazyload.refresh(selector)

Refresh status of elements bound event. Element will bind scroll event to parent scrollable automatically when initializing as lazyload. If you move element, you should use this method to bind again.

selector: or (default: )

The elements that you want to refresh. It will refresh all lazyload elements if you don’t pass this parameter.

  • You should initialize after the element add to page. Or it can’t detect whether it’s in screen. If you do that, you still can use to force detection.
  • Detection uses jQuery , it will return false if element’s width and height are equal to zero. So you have to make sure the lazyload element with any width or height.

Reviews

http-equiv=»Content-Type» content=»text/html;charset=UTF-8″>lass=»plugin-reviews»>

… it just works.

The description doesn’t seem to mention oembed … but it works for those too.

Works as it says. Defer youtube videos.

An excellent, simple-to-use plugin. Recommended for any website that includes embedded videos.

This is a very good plugin. It works the way it should. You just add a video link and it does all the work.

I’ve tried some other plugins and this is great.

I’m very satisfied.

A big thank you to the author!

Hi there, This plugin is super wonderful and worked out of the box as expected. However the play button appears as a transparency on top of the image and in some cases it looks weird if I have a play button underneath.

So I would like to be able to control the play button transparency or somehow figure out why I am getting 2 play buttons which looks funny. Otherwise works as needed!

My post went from page speed insights score of 38 to 80. I sent you lunch as you deserve it

? Search Engine Optimization (SEO)

are using the following strategy by default:

Server side rendering (SSR)

If the incoming request is from a bot; it will set to on the image (letting the browser loading the image right away). Useful if the bot don’t understand javascript.

If the request is not from a bot (or if we can’t decide), don’t do anything and let the client fix the images (see below).

You can chang this behavior by implementing your own function (see above). Let’s say you always want to show the image ASAP for SSR, regardles of if the user is a bot or not:

import { isPlatformServer } from '@angular/common';
import { IntersectionObserverHooks, Attributes } from 'ng-lazyload-image';

class LazyLoadImageHooks extends IntersectionObserverHooks {
  skipLazyLoading(attributes: Attributes) {
    // Skipping lazyloading the image for SSR
    return isPlatformServer(this.platformId); 
  }
}

Client side

  • If the user is a bot (see hook above), render all the images right away. (useful if the bot understand javascript)
  • If the user is not a bot (or if we can’t decide), lazy load the images

? FAQ

Q How can I manually trigger the loading of images?

A You can either use the hook if you can trigger the loading outside the dom or you can use the input, see

Q Does this library work with ionic or some other wrapper for Angular?

A Yes, but ionic and some other library wraps the whole document inside an other div so you might need to create your own scroll listener.

Q How can I add a transition effect between the default image and the lazy loaded image?

A See: https://github.com/tjoskar/ng-lazyload-image/issues/300

Q It doesn’t work with

A Are you using the scroll preset? If so, take a look at this issue.

Q Can I add a debounce time before loading the image?

A Yes, take a look at this issue.

Q Can I cancel image loading when the user change page?

A Yes, take a look at this issue.

Q I can’t get it to work. Can you help me?

A Sure, create an issue and describe your issue in as much detail as possible.

WHY BE LAZY?

  • bLazy is used on big sites with millions of monthly visitors so it has been tested out in the real world.
  • bLazy is written in pure JavaScript why it doesn’t depend on 3rd-party libraries such as jQuery.
  • bLazy is lightweight, less than 1.4KB and less than 1.25KB if you don’t need IE7- support.
  • bLazy is very fast. It has focus on performance why it also auto-destroys when it’s done lazy loading.
  • bLazy can lazy load all types of images including background images.
  • bLazy is future-proof. It supports srcset and the picture element.
  • bLazy can serve retina images on retina devices.
  • bLazy can lazy load everything with a src like iframes, HTML5 videos, scripts, unity games etc.
  • bLazy supports all browsers used today including legacy browsers like IE7 and 8.
  • bLazy supports all main module formats like AMD, CommonJS and globals.

Example of page preparation in PHP

Instead of manipulating tags directly (that is to replace by ,
add fallback image, etc.), it’s possible to do html page postprocessing using language.
Here is example of how to do it using PHP:

/* PHP */
function addLazyLoading($html) {
  $dom = new DOMDocument();
  if (!@$dom->loadHTML('<?xml encoding="UTF-8">' . $html)) // trick to set charset
    return $html;
  foreach ($dom->childNodes as $item)
    if ($item->nodeType === XML_PI_NODE) {
      $dom->removeChild($item);
      break;
    }
  $dom->encoding = 'UTF-8';
  $images = $dom->getElementsByTagName('img');
  $blankImage = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';
  for ($i = $images->length - 1; $i >= ; $i--) {
    $node     = $images->item($i);
    $clone    = $node->cloneNode();
    $noscript = $dom->createElement('noscript');
    $noscript->appendChild($clone);
    $node->parentNode->insertBefore($noscript, $node);
    $node->setAttribute('data-src', $node->getAttribute('src'));
    $node->setAttribute('src',      $blankImage);
    $node->setAttribute('class',    trim($node->getAttribute('class') . ' lazy'));
  }
  $newHtml = $dom->saveHTML();
  if (!$newHtml)
    return $html;
  return $newHtml;
}

? Usages

A simple usecase is to use a -tag and give it the image to lazyload to and an optional default image to . The default image will be shown while the «real» image is getting loaded.

Example:

import { Component } from '@angular/core';

@Component({
  selector: 'image',
  template: ` <img ="defaultImage" ="image" /> `,
})
class ImageComponent {
  defaultImage = 'https://www.placecage.com/1000/1000';
  image = 'https://images.unsplash.com/photo-1443890923422-7819ed4101c0?fm=jpg';
}

Background images

It also supports background images:

@Component({
  selector: 'image',
  template: ` <div ="defaultImage" ="image"></div> `,
})
class ImageComponent {
  defaultImage = 'https://www.placecage.com/1000/1000';
  image = 'https://images.unsplash.com/photo-1443890923422-7819ed4101c0?fm=jpg';
}

Responsive images

If using responsive images in a plain tag, you’ll need to set the attribute to :

@Component({
  selector: 'image',
  template: ` <img ="defaultImage" ="images" ="true" /> `,
})
class ImageComponent {
  defaultImage = 'https://www.placecage.com/1000/1000';
  images = `https://images.unsplash.com/photo-1434725039720-aaad6dd32dfe?fm=jpg 700w,
            https://images.unsplash.com/photo-1437818628339-19ded67ade8e?fm=jpg 1100w`;
}

If using responsive images in a tag, set the default tag as usual with etc. attributes.
You can use , and attributes for elements.
There’s no need to set for elements, as is used by default.
A simple example for a tag:

@Component({
  selector: 'image',
  template: `
    <picture>
      <source media="(min-width: ` screen_lg `)" ="defaultImage" ="image2" />
      <source media="(min-width: ` screen_md `)" ="defaultImage" ="image3" />
      <img ="defaultImage" ="image1" />
    </picture>
  `,
})
class ImageComponent {
  screen_lg = '1200px';
  screen_md = '992px';
  defaultImage = 'https://www.placecage.com/1000/1000';
  image1 = 'https://images.unsplash.com/photo-1422004707501-e8dad229e17a?fm=jpg';
  image2 = 'https://images.unsplash.com/photo-1439931444800-9bcc83f804a6?fm=jpg';
  image3 = 'https://images.unsplash.com/photo-1417128281290-30a42da46277?fm=jpg';
}

You can load image async or change the url on the fly, eg.

<img ="image$ | async" />

Custom observable

Sometimes you want to get more controll over when the we should check if the image is in viewport. let’s you create your own observable.

This will change the functionality of when we chek if the image is in the viewport. It does not change the functionality of how to detect if an image is in the viewport or not. Meaning: if you are using IntersectionObserver (default), it is important that the obserer that you pass to will emit objects that looks like: . You can change this behavior by implementing your own (see below for more information).

If you are using the ScrollHooks-preset, you can just pass and the reset will be handle automatically.

import { merge, fromEvent } from 'rxjs'

...

constructor() {
  this.scroll$ = merge(
    fromEvent(window, 'scroll'),
    fromEvent(someDivRef, 'scroll')
  );
}
<img ="scroll$" ... />

Ionic

If you are using Ionic and don’t want to use IntersectionObserver, you may need to include your own scroll observable or change the scroll target. For instans if you want to have multiple scroll targets:

@Component({
  selector: 'page-image',
  template: `
    <ion-content #container padding>
      <img ="https://www.placecage.com/1000/1000" ="lazyLoadImage" ="container.ionScroll" />
    </ion-content>
  `,
})
export class AboutPage {
  lazyLoadImage = 'https://hd.unsplash.com/photo-1431400445088-1750c997c6b5';
}

In case of using ion-slides in Ionic 2+, you can include your own scroll observable as below.

@Component({
  selector: 'page-image',
  template: `
    <ion-content #container padding>
      <img ="https:  //www.placecage.com/1000/1000" ="lazyLoadImage" ="container.ionSlideWillChange" />
    </ion-content>
  `,
})
export class AboutPage {
  lazyLoadImage = 'https://hd.unsplash.com/photo-1431400445088-1750c997c6b5';
}

FAQ #

Are there plans to automatically lazy-load images in Chrome?

Chromium already automatically
lazy-loads any images that are well suited to being deferred if Lite
mode is enabled on Chrome for Android. This is primarily aimed at users who are conscious about data-savings.

Can I change how close an image needs to be before a load is triggered?

These values are hardcoded and can’t be changed through the API. However, they may change in the
future as browsers experiment with different threshold distances and variables.

Can CSS background images take advantage of the attribute?

How does the attribute work with images that are in the viewport but not immediately visible (for example: behind a carousel, or hidden by CSS for certain screen sizes)?

What if I’m already using a third-party library or a script to lazy-load images?

The attribute should not affect code that currently lazy-loads your assets in any way, but
there are a few important things to consider:

  1. If your custom lazy-loader attempts to load images or frames sooner than when Chrome loads them
    normally—that is, at a distance greater than the —
    they are still deferred and load based on normal browser behavior.
  2. If your custom lazy-loader uses a shorter distance to determine when to load a particular image than the browser, then the behavior would conform to your custom settings.

One of the important reasons to continue to use a third-party library along with is
to provide a polyfill for browsers that do not yet support the attribute.

How do I handle browsers that don’t yet support lazy-loading?

Create a polyfill or use a third-party library to lazy-load images on your site. The
property can be used to detect if the feature is supported in the browser:

For example, lazysizes is a popular JavaScript lazy-loading
library. You can detect support for the attribute to load lazysizes as a fallback
library only when isn’t supported. This works as follows:

  • Replace with to avoid an eager load in unsupported browsers. If the
    attribute is supported, swap for .
  • If is not supported, load a fallback (lazysizes) and initiate it. As per lazysizes docs, you use the
    class as a way to indicate to lazysizes which images to lazy-load.

Here’s a demo of this pattern. Try
it out in a browser like Firefox or Safari to see the fallback in action.

The lazysizes library also provides a loading plugin
that uses browser-level lazy-loading when available but falls back to the library’s custom functionality when needed.

Is lazy-loading for iframes also supported in Chrome?

was recently standardized and is already implemented in Chromium. This allows you to lazy-load iframes using the attribute. A dedicated article about iframe lazy-loading will be published on web.dev shortly.

The attribute affects iframes differently than images, depending on whether the iframe is
hidden. (Hidden iframes are often used for analytics or communication purposes.) Chrome uses the
following criteria to determine whether an iframe is hidden:

  • The iframe’s width and height are 4 px or smaller.
  • or is applied.
  • The iframe is placed off-screen using negative X or Y positioning.

If an iframe meets any of these conditions, Chrome considers it hidden and won’t lazy-load it in
most cases. Iframes that aren’t hidden will only load when they’re within the .
A placeholder shows for lazy-loaded iframes that are still being fetched.

How are images handled when a web page is printed?

Although the functionality isn’t in Chrome currently, there’s an open
issue to ensure that all images and
iframes are immediately loaded if a page is printed.

Does Lighthouse recognize browser-level lazy-loading?

Earlier versions of Lighthouse would still highlight that pages using on images required a strategy for loading offscreen images. Lighthouse 6.0 and above better factor in approaches for offscreen image lazy-loading that may use different thresholds, allowing them to pass the Defer offscreen images audit.

Каким сайтам нужно внедрять отложенную загрузку

В пятом выпуске рубрики «Спроси PR-CY» один из пользователей задал эксперту вопрос о способах оптимизации картинок на сайте:

Ответил Михаил Шакин, автор SEO-блога и специалист по продвижению сайтов в рунете и англоязычном интернете:

Ориентируйтесь на целесообразность внедрения функции на ваш сайт. С одной стороны, использование такой оптимизации ускорит загрузку сайта, уменьшит время ожидания пользователей и сэкономит им трафик, поскольку они будут использовать его только для картинок, которые видят.

С другой, веб-мастеру нужно прикладывать дополнительные усилия по настройке функции, которая пока будет работать не на всех браузерах.

В каких случаях стоит внедрять lazy loading:

  1. На страницах много больших изображений.
  2. Картинки составляют основную часть контента — вы продвигаете сервисы с фотографиями, фотостоки, статейники с большим количеством иллюстраций и фреймов.
  3. Невысокий балл PageSpeed ​​Insights.
  4. Много посетителей с мобильных устройств, больше 50%.
  5. Конкуренты быстрее вас, хотя вы уже провели оптимизацию и ускорение страниц.
  6. Сервер слабый и не может дать быструю загрузку.

Как проверить, работает ли Lazy Load на сайте?

После внедрения Lazy Load нужно проверить, работает ли она так, как задумано. Самый простой способ — открыть инструменты разработчика в браузере Chrome.

Перейдите на вкладку «Сеть»> «Изображения». Здесь, когда вы обновляете страницу в первый раз, должны загружаться только те изображения, которые должны быть загружены стразу. Затем, когда вы начнете прокручивать страницу вниз, будут запущены и загружены другие запросы на загрузку изображений. В этом представлении показано время загрузки изображения в виде водопада. Это поможет определить проблемы с загрузкой изображения.

Другой способ — запустить отчет о проверке Google Chrome Lighthouse на своей странице после внесения изменений и поиска предложений в разделе «Изображения за пределами экрана» .

Последние отзывы клиентов Хоум Кредит Банка

Что такое ленивая загрузка

Lazy Load – метод, предназначенный для отложенной загрузки изображений. Фактически, изображения загружаются только тогда, когда пользователь до них долистал. Ну, или почти долистал.

Без плагинов такой тип загрузки можно подключить только с помощью написания довольно сложной структуры из смеси php/js/css. Также можно использовать готовые решения. Например, jquery.lazyload.js. Но практически все плагины с данной функцией так или иначе используют данную библиотеку. Потому, в данном случае гораздо целесообразнее использовать готовое решение.

Итак, я решил протестировать несколько плагинов, реализующих отложенную загрузку изображений. Давайте сначала посмотрим результаты без использования данной функции.

Итак, обратите внимание на вес страницы и скорость, про количество запросов тоже не забудьте. Чем их больше, тем серьезнее нагрузка на сервер

А вот здесь указан суммарный вес изображений. Тестировать все буду на одной и той же странице. Обозревать будем от худшего плагина к лучшему.

Условия таковы:

  • только бесплатные плагины;

  • доступны в репозитории WordPress;

  • обновлялись не позднее, чем пол года назад.

Поехали!

Lazy Load by WP Rocket

Довольно популярный плагин. Но его результаты не впечатлили. Вес страницы сократил минимально, зато длительность загрузки увеличил многократно. Настроить под себя невозможно, только включить интересующие функции и все.

Посмотрите на эти цифры! Это попросту кошмар. Объяснить, почему такое происходит, я так и не смог. Но затестировал даже на нескольких сайтах. Результат аналогичный. Куда смотрят тем, кто его юзает, крайне интересно.

Вес картинок сократился минимально. Фактически, никакого профита от использования данного поделия не вижу. Можете, конечно, попробовать, но если что, я предупреждал.

Smush

Популярный плагин для оптимизации медиафайлов. Предназначен для сжатия JPEG, PNG и других форматов. Но в режиме бета-тестирования запустили функцию ленивой загрузки картинок. Итак, смотрим на результат.

Я провел несколько тестирований, в итоге результат был примерно такой же.

А вот вес изображений сократился гораздо лучше. Считай на треть. Неплохой результат. Ну, функция пока что еще в разработке, так что стоит подождать, возможно, в скором будущем станет работать заметно лучше. Пока что выкладываю актуальные результаты.

WordPress Infinite Scroll — Ajax Load More

Вылезает по запросу в списке плагинов для WordPress. Ну, просто смотрите на скрины.

По-моему, отношения к нужному функционалу никакого не имеет, такие результаты уже видели в начале. Самое смешное, они все равно лучше, чем у предложенных выше вариантов.

Lazy Load Optimizer

Тут уже более менее, работает плагин на ура. Ничего не рушит, все прекрасно. Правда, чуть подтормаживает сайт, но все в пределах погрешности. Так что, претензий особо не будет.

Вес изображений сократился незначительно, так что свою функцию выполняет не лучшим образом. Игрища с настройками не помогли.

В общем, применять можно, плагин довольно мягко реализует отложенную загрузку медиафайлов. По крайней мере, вероятность конфликта не кажется высокой.

PageSpeed Ninja

О данном плагине уже рассказывал в отдельном обзоре. Можете посмотреть и познакомиться с многофункциональным и полезным плагином для ускорения сайта на WordPress. Функция ленивой загрузки у него также есть. Причем, реализована достаточно хорошо. Смотрите на результаты.

Как видите, вес страницы неплохо сократился. К тому же, количество запросов оказалось также урезано. Неплохой результат.

Тут как раз-таки наглядно видно, насколько сократился вес изображений на странице. Считай втрое. Это позволяет затрачивать меньше времени на загрузку и быстрее выдавать пользователю результат.

A3 Lazy Load

Безусловный лидер, который не сдружился сходу с некоторыми слайдерами. Но если покопаться в настройках плагина, то с проблемой можно разобраться. Фактически, по результатам — лучший вариант.

С ним получается максимальная производительность, на ресурсах, где много изображений.

Видите, насколько сильно сократился вес изображений? Крайне серьезный результат. В целом, это один из самых лучших плагинов для реализации ленивой загрузки, более крутой альтернативы так и не нашел.

Сделайте сайт быстрым

Как видите, реализовать ленивую загрузку изображений на WordPress с помощью плагинов довольно легко, выбирайте, какой вам подойдет лучше и вперед, покорять вершины скорости загрузки сайта!

Выпуск канализации

Чтобы вывести трубу через фундамент, необходимо установить в подготовленное отверстие гильзу – кусок трубы, большего диаметра, чем труба выпуска.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector