|
93 | 93 | </html>
|
94 | 94 | ```
|
95 | 95 |
|
96 |
| -Такое поведение называют "синхронным". Как правило, оно вполне нормально, но бывает беда. |
| 96 | +Такое поведение называют "синхронным". Как правило, оно вполне нормально, но есть один нюанс. |
97 | 97 |
|
98 |
| -Внешние скрипты `<script src="...">` блокируют отображение страницы не только на время выполнения, которое обычно небольшое, но и на время загрузки тоже! |
| 98 | +**Пока браузер не загрузит и не выполнит внешний скрипт, он не покажет часть страницы под ним.** |
99 | 99 |
|
100 |
| -В ряде случаев это совсем неуместно. Например, мы подключаем внешний скрипт, который показывает рекламу. По-хорошему, он не должен никак задерживать отображение страницы сайта. Реклама -- это дополнение к странице, она не должна как-то тормозить сайт и нарушать его функционал. |
| 100 | +В ряде случаев это совсем неуместно. Например, мы подключаем внешний скрипт, который показывает рекламу или вставляет счётчик посещений, а затем идёт наша страница. Конечно, неправильно, что пока счётчик или реклама не подгрузятся -- оставшаяся часть страницы не показывается. Счётчик посещений не должен никак задерживать отображение страницы сайта. Реклама -- это дополнение к странице, она не должна как-то тормозить сайт и нарушать его функционал. |
101 | 101 |
|
102 |
| -А представим на минуту, что сервер, с которого загружается внешний скрипт, перегружен и долго не отвечает? Тогда вся страница "подвиснет", пока он не загрузится. |
| 102 | +А что, если сервер, с которого загружается внешний скрипт, перегружен? Посетитель в этом случае может ждать очень долго. |
103 | 103 |
|
104 | 104 | Вот пример, с подобным скриптом (стоит искусственная задержка загрузки):
|
105 | 105 |
|
|
114 | 114 |
|
115 | 115 | В примере выше важная информация не покажется, пока не загрузится внешний скрипт. Но действительно ли он так важен, что мы хотим заставить посетителя ждать? Если это реклама или счётчик посещаемости, то вряд ли.
|
116 | 116 |
|
117 |
| -Можно поставить все подобные скрипты в конец страницы -- это уменьшит проблему, но не избавит от неё полностью, поскольку если какой-то один скрипт тормозит или завис, то последующие будут его ждать. |
| 117 | +Можно поставить все подобные скрипты в конец страницы -- это уменьшит проблему, но не избавит от неё полностью, поскольку скриптов может быть несколько, и если какой-то один скрипт тормозит или завис, то последующие будут его ждать. |
118 | 118 |
|
119 |
| -Чтобы это обойти, можно использовать для скриптов атрибуты `async` или `defer`: |
| 119 | +Кроме того, когда скрипты в конце страницы -- то они начнут грузиться только тогда, когда вся страница загрузится. А это не всегда правильно, например счётчик посещений наиболее точно сработает, если загрузить его пораньше. |
| 120 | + |
| 121 | +Кардинально решить эту проблему помогут атрибуты `async` или `defer`: |
120 | 122 | <dl>
|
121 | 123 | <dt>Атрибут `async`</dt>
|
122 | 124 | <dd>Поддерживается всеми браузерами, кроме IE9-. Скрипт выполняется полностью асинхронно. То есть, при обнаружении `<script async src="...">` браузер не останавливает обработку страницы, а спокойно работает дальше. Когда скрипт будет загружен -- он выполнится.</dd>
|
|
0 commit comments