лайтхаус что это такое

Квадрохаусы, твинхаусы и лейнхаусы. Что это такое? на сайте Недвио

Многие жители больших городов, особенно те, кто устал от жизни в «бетонных клетках», всегда ищут варианты улучшения жилищных условий. Кто-то просто переезжает в деревню, кто-то начинает строить загородный дом, а кто-то обратил свое внимание на квартиры в небольших жилых комплексах, таунхаусы, и производные от них дуплексы, квадрохаусы и похожие форматы жилья.

Строения такого типа можно смело назвать альтернативой к квартирам, расположенным в городской черте, и загородным домам. Их объединяет одна идея – вокруг неплотная застройка, мало соседей, внутри нестандартная планировка и есть некоторая удаленность от города. Но, в тоже время между этими видами строений существуют серьезные отличия.

История происхождения

Так называемые сблоченные (сблокированные или совмещенные) форматы загородного жилья изначально появились в Великобритании в XIX веке. Изначально они возводились в виде отдельных зданий, но со временем, к ним присоединялись пристройки, в которых поселялись родственники, друзья и пр.

Постепенно стали формироваться городские кварталы, заполненные такими зданиями и перемещаться за пределы городской черты. Так в США, некоторые крупные мегаполисы оказались застроенными «в кольце» таунхаусов.

В СССР, здания этого класса впервые появились в начале 80-х годов. Пионером такой застройки стал поселок, расположенный рядом с р. Истрой. А 90-е годы можно назвать временем начала массовой застройки сблокированных домов — таунхаусов.

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

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

Таунхаус: что это такое?

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

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

В нашей стране, таунхаусы, как правило, строятся в современных коттеджных поселках, с единой архитектурой, инфраструктурой, со своими инженерными коммуникациями и пр.

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

К достоинствам такого формата можно отнести следующее:

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

Сюда можно отнести:

Этот список далеко не полный, поскольку архитекторы и застройщики постоянно предлагают новые форматы загородных поселков. В действительности, все вышеперечисленные типы сооружений – это «близкие родственники» таунхауса.

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

Что называют Квадрохаусом?

При проектировании квадрохауса (второе название — мезонет) загородный дом и прилегающий участок делят на четыре равные доли. Как это будет выполнено застройщиком, не играет особой роли.

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

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

Что такое Дуплексы?

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

Такие дома очень популярны в Великобритании. В России этот формат достаточно новый. Однако, в последнее время, при строительстве новых поселков, застройщики все чаще предпочитают застраивать их небольшими кварталами с дуплексами. Толчком к росту строительства подобных объектов послужили кризисные явления 2008 года, когда, что бы остаться на плаву, девелоперы стали придумывать новые типы жилья.

Планировка дуплексов

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

Однако есть и другие варианты. Так, в США, получили популярность дуплексы, состоящие из трех секций. Две – типовые, а третья может быть использована под спортивный зал или прачечную. В этом случае, добавленная секция становится общим помещением.

Отличия и сходства с таунхаусом

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

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

Твинхаусы

В переводе с английского языка «Twinhouse» звучит как «дом-близнец». Этот тип жилья широко распространен в небольших городах США.

Такой дом рассчитан на проживание двух семей. В здании такого формата реализовано интересное архитектурное решение – по сути, это два одинаковых, зеркально симметричных дома. А объединяет их общая стена.

Лейнхаусы

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

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

Вилетты

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

Правда, этот формат у нас так и не стал популярным, так как вилетты довольно сложно адаптировать к суровым российским климатическим условиям. Поселков с такими домами построено пока что единицы.

Британхаусы

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

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

Заключение

В целом, таунхаус и его другие производные форматы загородного жилья, вполне могут стать прекрасным вариантом для тех, кто хочет совместить комфортное проживание за пределами городской черты, и одновременной близостью к ней. При всем этом, удивить очень приятной ценой за квадратный метр (значительно дешевле, чем городская квартира). В подтверждение этому есть статистика — как правило, поселки этого типа возводят на расстоянии не далее 10-20 км от города.

Не забудьте добавить сайт Недвио в Закладки. Рассказываем о строительстве, ремонте, загородной недвижимости интересно, с пользой и понятным языком.

Источник

Что такое лейнхаус?

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

Если раньше собственным особняком называли скромную дачу или роскошный коттедж, то сегодня перечень вариантов намного шире. Лейнхаус – что это такое и чем он отличается от других форматов жилья, вы узнаете из обзора.

Читайте также:  как узнать что грузит пк через интернет

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

Все типы таунхаусов

Таунхаусы в РФ пришли из США и Европы. Они имеют вид загородных домов небольшой этажности. Одна постройка рассчитана на несколько хозяев, но в каждую часть предусмотрены отдельные ходы.

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

Собственный дом требует значительных затрат либо будет слишком скромным. Таунхаус – это компромисс в плане стоимости и качества.

Британхаусы

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

Другие особенности построек:

Дуплексы

Дома на пару семей с отдельными входами для каждой. Идеальный вариант для больших семей, которые хотят жить рядом, но не в одной квартире. На первом этаже удобно размещать старшее поколение, а на втором младшее (или наоборот).

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

Другие особенности построек:

Мезонеты (квадрохаусы)

Следующий тип построек рассматриваемой категории. Дома состоят из четырех равных частей, деление (планировка) продольное либо поперечное. Этажей чаще всего два, хотя возможны варианты.

Другие особенности мезонетов:

Лейнхаусы

Лейнхаусы представляют собой сблокированные загородные дома. Они популярны в европейских странах, возводятся с применением разных архитектурных концепций.

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

Другие особенности:

Вилетты

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

Другие особенности вилетт:

Лейнхаусы в России

Как понятно из написанного выше, лейнхаусы представляют собой сблокированные в ряд особняки со смежными боковыми стенками. От обычного таунхауса их отличает фасад, оформленный в уникальном стиле. Площадь тоже будет больше – от 300 до 500 метров против стандартных 150-200 квадратов. Каждый владелец лейнхауса получает около 6 соток земли.

Для лейнхаусов характерно нелинейное расположение. Оно создает интересные архитектурные решения и уютную атмосферу переулков.

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

Аудитория – элитные клиенты с доходами выше среднего. Лейнхаусы и другие таунхаусы стоят дороже обычных квартир, но дешевле премиального жилья, покупка которого доступна немногим.

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

Источник

Создаём максимально недоступный сайт с идеальной оценкой Lighthouse

Встроенный инструмент тестирования Google Lighthouse оценивает доступность (accessibility) сайтов по шкале от 0 до 100. Похвально стремиться к максимальной читаемости контента, но оценка 100 не означает, что сайт идеально доступен. Для доказательства я провёл небольшой эксперимент.

Всегда приятно видеть, как люди хвастаются в твиттере своими оценками Lighthouse: это значит, что они заботятся о качестве.

Lighthouse награждает лучшие сайты зелёным кружочком с цифрой 100, которую вы с гордостью показываете клиентам и друзьям.

Оценка качества кода важна, но ещё важнее правильно её интерпретировать. Если автоматический инструмент говорит, что сайт доступен на 100%, это не обязательно так. Это только значит, что мы заложили основу для тестирования вручную. Для тестов Lighthouse использует библиотеку axe-core со своим набором правил. Она выявляет некоторые плохие практики, но не все. Другие практики не плохи сами по себе, но могут быть вредными, если ими злоупотреблять.

Одним автоматическим тестированием вы не обеспечите хорошее качество. Для доказательства я создал максимально недоступный сайт с идеальной оценкой Lighthouse.

Предыстория

Зак Летерман недавно написал в твиттере:

Как построить самый медленный веб-сайт с идеальной оценкой Lighthouse

И ответ Вадима Макеева вдохновил меня на работу.

Было бы интересно почитать! Подкидываю идейку:

Я подумал, что это замечательная мысль: не только запутать максимальное количество посетителей сайта, но и получить сверху идеальную оценку Lighthouse.

Отсекаем как можно больше людей

Возьмём за основу эту простую, хорошо доступную страницу.

Обязательный CSS


Идеально чистая страница

hidden визуально скрывает содержимое и удаляет его из дерева доступности (accessibility tree). Одного этого достаточно, чтобы устранить абсолютно всех посетителей и пройти тесты Lighthouse, но мы не ищем лёгких путей. Я хочу создать сайт, который совершенно недоступен и технически всё ещё отображает контент. Итак, добавим CSS и вернём контент обратно.

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

Обязательный JS

Добавим ещё одну зависимость. Класс для отображения контента я теперь добавляю не в HTML, а через JS.

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

Кажется, пришло время для первого испытания Lighthouse. Скрестим пальцы!

Идеальный результат на сайте c CSS и JS. Это здорово, но мы можем сделать лучше.

К чёрту пользователей со скрин-ридерами

Отсекаем пользователей с клавиатурами

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

Давай избавимся от этого.

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

Наше приложение теперь удаляет функциональность по умолчанию всех клавиш.

Время для следующего теста.

Ладно, пришло время для грязных трюков.

Эксплоит для режима высокой контрастности

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

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

Мы можем таргетировать свойство media специально на этих пользователей.

Эти правила применяются только в том случае, если включён режим высокой контрастности в Windows. К сожалению, мы не знаем, какие цвета использует тема: светлые или тёмные. Установка цвета #000000 для всех элементов может сработать, а может и нет, в зависимости от предпочтений пользователя. Такая вероятность 50% меня не устраивает, но нам повезло: контрастные цвета Windows сопоставляются с ключевыми словами системного цвета CSS. Можно использовать эти ключевые слова и убедиться, что наш текст всегда соответствует цвету любого фона в режиме высокой контрастности. Фоновый цвет в ОС сопоставляется с цветом windows в CSS. Итак, укажем этот цвет для всего текста на странице.

О боже. Это так подло. Теперь мне посыпятся предложения на работу от Facebook и Uber.

К чёрту пользователей с мышками

Здесь совсем легко: просто удаляем с экрана курсор.

Ну вот, другое дело. После указания pointer-events: none; пользователи больше не могут нажать ни на какой элемент. Это свойство хорошо поддерживается, но чтобы функция работала на как можно большем количестве браузеров, желательно применить принцип прогрессивной деградации.

Здорово! Сайт по-прежнему совершенно доступен!

К чёрту читаемость

Мы больше не можем использовать мышь или клавиатуру, но всё ещё видим текст на странице. Непорядок.

Контент остался на странице, но почти не заметен. Потрясающе!

Эксплоит режима чтения в Safari

Тестируя сайт в разных браузерах, я заметил, что он по-прежнему доступен в Safari в режиме чтения.

Долой просмотр исходника

Сайт недоступен для людей с низким и хорошим зрением, пользователей мыши, клавиатуры и скрин-ридеров.

Читайте также:  куртка без воротника женская с чем носить

Если опытный пользователь попадёт на такой сайт, в нём может проснуться внутренний хакер и он попытается хакнуть его. Я имею в виду, просмотреть исходный код страницы.

Вишенка на торте недоступности нашего сайта — конвертация текста в HTML-мнемоники. Эти мнемоники (entity) обычно используются для отображения зарезервированных, невидимых символов и тех, которые трудно ввести с помощью стандартной клавиатуры. Мы используем их для обфускации.

И последнее испытание.

Выводы

В статье я вовсе не хотел поиздеваться над системой Lighthouse или её движком axe-core. Я регулярно пользуюсь обоими инструментами и рад, что они есть.

Это статья о нас. Оценки указывают на качество наших приложений и сайтов, но мы не должны слепо доверять этим цифрам. Мы должны понимать, что автоматическое тестирование — только первый шаг.

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

«Данная проверка определяет возможности для улучшения доступности вашего веб-приложения. Автоматическая проверка способна обнаружить только часть проблем, поэтому рекомендуется также провести ручное тестирование».

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

Источник

Как собрать свой Lighthouse

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

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

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

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

Но если мы занимаемся этим регулярно, то постепенно у нас складывается «джентльменский набор»:

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

Потом добавляются bundle-анализаторы, чтобы посмотреть, что у нас содержится в ресурсах и из чего они состоят.

Еще мы можем добавить DevTools CPU Profile, чтобы понять, насколько быстро выполняется JS — и в подробностях ознакомиться с временем выполнения кода.

И напоследок — Lighthouse или Google PageSpeed Insight в качестве overview по метрикам.

Со временем это всё превращается в стандартный flow, и мы начинаем что-то оптимизировать — и добиваемся, скажем, ускорения по какой-то ключевой метрике на целых 30%. Но вдруг происходит деплой тридцати фич — каждый разработчик добавил по одному MPM-модулю весом в 500 килобайт. И наша метрика возвращается на исходную или даже ухудшается.

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

Но можно автоматизировать этот процесс, чтобы не затормозился или не остановился feature-delivering. После отправки pull request’а можно сразу собрать всю нужную информацию для оптимизации, устранить причину ухудшения производительности, если она есть, а после этого — задеплоить уже качественный код.

Но что мы можем использовать для автоматизированного профилирования?

Lighthouse и Lighthouse-ci

Lighthouse — это хороший инструмент, с его помощью вы получите классные отчеты с информацией по всем ключевым метрикам, и даже вполне понятные советы по оптимизациям. Все его User-centric метрики из коробки всегда актуальные, потому что Google следит за этим. Его можно встроить в CI/CD — есть пакет, который основан на Puppeteer — и получать все нужные данные в JSON или даже в виде HTML-отчетов.

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

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

Ещё ему нужен Performance-бюджет — особенно если вы попытаетесь встроить его в CI. При этом он измеряет только загрузку страницы. Из коробки у него нет ретроспективы, то есть вы постоянно рассматриваете ситуацию в режиме настоящего времени, не представляя, какие показатели были раньше и что вообще на них повлияло. В Lighthouse-ci есть чуть более продвинутая тема по сравнению замеров различных ревизий между собой, но в Lighthouse ее нет совсем.

Даже если вы встроите Lighthouse в CI, всё равно придется запускать профайлер и webpack-bundle-analyzer, чтобы основательно разобраться в том, что влияет на производительность. То есть мы снова вернулись к ручному анализу:

Как мы можем это переоформить, чтобы вместо постоянного и довольно сложного flow у нас было время для более полезных вещей? Во-первых, стоит всё-таки отказаться от Lighthouse, потому что загрузка страницы — это не единственный показатель перфоманса, за которым стоит следить. Несмотря на то, что Google таргетит на него, у нас есть, например, SPA. А каждый второй сайт имеет какую-то динамику в своей основе — и за этим тоже нужно следить.

Как собрать свой Lighthouse

Вместо Lighthouse прекрасно работает Puppeteer — это Chrome, но без головы. На нем можно писать функциональные тесты, и там есть CDP — Chrome DevTools Protocol. Это программный интерфейс к DevTools — самая важная его часть, которая позволит нам сделать из него всё что угодно. Для нас будут полезными Tracing, Network, Emulation и Coverage:

Tracing даст нам записи тех тайм-лайнов, которые мы видим во вкладке Perfomance.

Network — это эмуляция сети для троттлинга, обработчиков запросов, и так далее.

Emulation — это эмуляция непосредственно в viewport девайса, который мы хотим замерить.

Coverage — это выполнение кода на странице, чтобы понять, какой код у нас на странице выполнялся, а какой — нет.

Профайлер из Chrome DevTools можно заменить на некий эвристический велосипед, а bundle analyzer — на простой JSON, который можно сортировать по определенным критериям и предоставлять разработчику. В результате получим triforce, который будет решать проблемы профилирования для разработчиков.

Покажу, как мы можем собрать наш Lighthouse.

Пишем профайлер

Что нам нужно для этого от Puppeteer? User-centric метрики из Lighthouse. Navigation timing, чтобы иметь представление о том, когда у нас какие ресурсы загрузились, на каком timestamp’е находилась страница и прочие детали. Данные о выполнении скриптов, чтобы, например, подсчитать Time to Interactive или просто понимать, что у нас на странице выполнялось. И данные о содержимом ресурсов, тех же чанков.

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

Читайте также:  критические обновления windows 7 x64

И попробуем сразу собрать трейсинги. Настраиваем окружение, которое нам позволит нормализовать сеть, сделать ее Fast 3G, затроттлить CPU и сделать окружение, которое будет троттлить всю страницу и показывать результаты для среднестатистического пользователя. Для записи трейсингов у Puppeteer есть встроенные методы, которые перенаправляют вызов метода в CDP. Перейдя на страницу, можно получить этот трейсинг в строковом формате, и запарсить его.

В результате получится масштабный JSON, своего рода Big Data для фронтенда. Его структура данных — это Trace Events. Она используется не только на фронтенде, а также в ядре Linux и Android для одного и того же — построения трейсингов, тайм-лайнов, где видно, что у вас происходило. Но из документации по этому формату есть только общие описания того, что в нем может быть. Они находятся в проекте Catapult-project на GitHub — у них, кстати, очень много тулзов, которые помогают измерять производительность.

В этом формате нам пригодятся 4 основных свойства. В первую очередь это args — полезная нагрузка, где содержатся какие-то произвольные объекты и структуры данных. Они коррелируются с именем события. Далее, это ph — фаза, которая описывает тип события в этом трейсинге. Из ключевых событий — Duration Events, Complete Events и Mark Events. Duration event связан с событиями begin и end, а Mark Events — это отметки на тайм-лайне с time stamps. Последние нам нужны, чтобы как-то скоординировать этот event и понять, когда он происходил.

В принципе этого всего достаточно, чтобы запарсить все события и собрать нужную нам информацию.

Категория (cat) будет нужна, чтобы отфильтровать событие по какому-то критерию. Например, вам нужны только user-timing. Или понять, какие вообще категории есть у вас в этом трейсинге.

На какие события мы будем смотреть?

Там их порядка 200, но актуальными для перфоманса можно назвать, например, Meaningful-отрисовки, Contentful Paint, Navigation timings и тому подобные штуки. Вот список тех, что использую я:

Нам также будет нужна точка отправки, т.е. с какого момента начала загружаться страница и соответственно — наш парсинг. Для этого найдем в массиве событие с name == responseStart и получим его timestamp.

Выполняем скрипты

Теперь фильтруем весь массив событий по какому-то имени, например, EvaluateScript, и получаем сразу все нужные нам значения: время выполнения скрипта, время начала его выполнения и адрес ресурса.

Дополнительно есть еще другие события, которые описывают отправку запросов, обработчики XML Http Requests, срабатывания таймеров, Request Animation Frame. В принципе, всё, что хотите, можно намайнить в трейсингах и предоставить разработчику. Все события можно найти здесь.

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

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

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

Теперь, чтобы понять, когда загружались конкретные ресурсы, смотрим сеть.

Анализируем сеть

Для этого смотрим четыре связанных с помощью payload события — ResourceSendRequest, ResourceReceiveResponse, ResourceReceivedData и ResourceFinish — и возьмем от них timestamp’ы. Их можно организовать в мапу со всеми события, которые там есть и привязаны к конкретному запросу.

Вместе с этим можно получить все имеющиеся на странице вызовы User TIming API: просто профильтровать массив по категории blink.user_timing. В Lighthouse они отображаются в отчете. Размещаем на странице User Timing, то есть выполняем performance.mark. И найдя в трейсинге событие с таким именем, получаем time stamp.

Получаем User TIming API

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

Оставшиеся события из трейсинга можно собрать в мапу с помощью find — это firstPaint и подобные штуки.

Собираем оставшиеся события

Опции, которых не хватает в Lighthouse

SPA-сценарии

В первую очередь в Lighthouse не хватает функциональных тестов для замеров — например, переходов по роутингу или открытий поп-ап. Каждому разработчику стоит задуматься, насколько у него быстро открываются странички в режиме SPA и какие-то попапы. В Puppeteer это очень легко сделать, есть много методов, которые позволяют манипулировать страницей. Например, click и waitForSelector, которые позволяют на что-то кликнуть и дождаться появления селектора.

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

Содержимое чанков

Оно нужно для понимания того, что у вас вообще там содержится и что стоит выпиливать. Когда мы используем бандлеры — webpack, rollup или parcel, они преобразуют исходники в обезличенные наборы чанков, которые скрываются под хэшами. Это не дает нам представления об их содержимом.

Мне же хотелось получить некую мапу, которая бы нам говорила, какой чанк соответствует какому набору модулей. Тут можно использовать webpack, который поставляет статы с описанием всего, что транспилировалось и бандлеризировалось. Мы получим JSON, который весит порядка 100 мегабайт, но его сложно анализировать.

Поэтому мой коллега, Сергей Милюков, создал вариант лучше. Его плагин помогает собирать более лаконичные данные о том, что содержится в сгенерированных ресурсах. Там есть input и output. В input содержатся модули, которые участвуют в сборке, в output — все чанки на выходе. Это удобно читать в JSON даже глазами, а анализировать с помощью JS — тем более.

Что-то сверху — Script Injection

В Puppeteer, в отличие от Lighthouse, можно встраивать дополнительные скрипты на страницу, выполняя какой-то дополнительный код. Можно манипулировать страницей, обращаться к ней и что-то на ней выполнять перед загрузкой страницы, после чего грузятся уже ваши данные. Также можно добавлять скрипт-теги, например, npm-пакет сразу на страницу в процессе профилирования.

Или можно дождаться получения Boolean результата. Этот метод возвращает promise, который разрезолвится, когда эта, переданная в качестве аргумента, функция вернет его.

Это всё можно применить к очень крутой вещи — Element Timing API. Собрав их с помощью performance observer, можно выполнить этот код сразу перед загрузкой страницы. После этого переходим на страницу, которую хотим замерить, и получаем наши Element timing’s, выполнив просто evaluate. Мы получим еще данные для анализа.

Получаем Element timing’s

Есть нюансы. Аргументы нужно передавать и в коллбэк, и методу evaluate или остальным. И весь код, который работает в коллбэках, будет выполнен в области видимости вашей страницы.

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

Чтобы получить профит, обнаружив ухудшение производительности, нужно применить всё это в Performance-тестах. Об этом я расскажу в следующий раз.

11-12 октября встречаемся в Москве на FrontendConf 2021. Программа составлена, расписание опубликовано. Все подробности на сайте.

Не так давно Глеб Михеев, глава ПК, рассказал про подготовку к конференции и доклады, которые его заинтересовали, пока ПК проводил отбор.

Источник

Образовательный портал