Pull to refresh

Comments 17

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

Huawei и Samsung предоставляют такой кейс :)
image

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

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

нет не буду. Это лишь мое мнение основанное на наблюдениях и анализе других сайтов («здесь и сейчас»). Если взять среднестатистического пользователя с мобильным устройством, для которых я делал сайты, то о ресайзе окна там никто не задумывается, это очень редкий кейс. А по поводу смены ориентации, то на мобильном устройстве горизонталка — это как смотреть в амбразуру, и некоторые сайты просят пользователя вернуться в вертикальное положение устройства. При этом, мне никто не мешает резко отказаться от медизапросов и лить все воедино.
static get styles() {
  const mobileStyle = css`p { color: red; }`;
  const desktopStyle = css`p { color: green; }`;

  return [
    mobileStyle,
    desktopStyle
  ];
}

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

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

Как мне кажется, браузер сам достаточно умный, чтобы игнорировать неподходящие @media блоки.
У вас есть какое-то подтверждение ускорения после этой оптимизации? Без него это выглядит как призыв экономить на спичках.

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

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


Именно это и побудило меня оставить коммент

Сорь, но:
  1. Из текста «Я не являюсь экспертом в данной технологии», «это дико, но имеет место быть», «Мое мнение». Я не считаю нужным вешать там огромный баннер «не делайте так!», там где высказываю личное мнение. По поводу бесполезности оптимизации, если есть желание, я предлагаю Вам доказать несостоятельность этого подхода. Я высказал свое мнение и в комментах подтверждаю «По идее, это должно повлиять на конечную скорость отрисовки. А по факту, в большинстве случаев — это «экономия на спичках».»
  2. На этом, считаю, что данная ветка в дальнейшем не актуальна. Если есть желание в дальнейшем подискутировать на эту тему, то велком в личку

использовать динамический импорт и нет проблем с объемом

А вот это интересно. Как можно сделать динамический импорт стилей в lit-element?

еще не пробовал. ща попробую сделать такую сборку и посмотреть что получится
немного фуфуфу, но самый простой вариант например такой codesandbox.io/s/my55o3zywx
Для поддержки абсолютно не рабочий вариант и нужно еще сменить parcel на что то более управляемое, что бы дробил на чанки, но как пример сойдет

У lit-element есть еще интересное св-во updateComplete ( https://lit-element.polymer-project.org/guide/lifecycle#updatecomplete ) — это промис, который резолвится после того, как компонент обновился.


async someAction() {
   this.prop = 'new value';
   await this.updateComplete;
   console.log('update complete');
}

Но, это таит в себе подводный камень. В том же реакте, функция componentDidUpdate вызовется только после того, как обновятся все дочерние компоненты ( грубо говоря, сначала у дочерних компонентов вызывается componentDidUpdate, а потом у родительского ), тут это не так и updateComplete не гарантирует, что обновились дочерние элементы. Видимо это из-за специфики веб-компонентов ( shadowRoot и так далее ), поэтому приходится в простых случаях писать так


async someAction() {
  this.prop = 'new value';
  await this.updateComplete;
  await children.updateComplete;
}

В более сложных пилить костыли.

спасибо. еще не пользовался этим методом. учту в дальнейшей работе

Полезная статья, спасибо за труд.


По поводу динамической подгрузки веб-компонентов, можете сказать на сколько большими они у вас получились, что пришлось делать Lazy Loading?


И на сколько, на ваш взгляд, стоит заморачиваться с общим решением для этого? Судя по моему опыту и issue в большинстве случаев при разработке приложений routing и code splitting решает проблему больших бандлов. Помимо него можно воспользоваться динамической загрузкой дочерних компонентов из основного по разного рода хукам (как понимаю, в последнем списке вы один из таки алгоритмов и описываете).

День добрый.
При переработке текущего сайта мы изначально взяли модель ленивой подгрузки логики и стилей для компонентов, на основе вью браузера и динамических импортов, тем самым заложив на будующее основу при которой не придется сильно беспокоиться о размере бандла и кол-ве лишнего кода (по крайней мере, надеемся на это)а так же, возможно поможет при построении микрофронтендов.
В динамическую подгрузку попадают элементы которые предположительно могут быть переиспользованны на сайте независимо от страницы и контекста, компоненты от которых они зависят однозначно импортируются без динамики в ленивые компоненты, далее webpack сам разбивает код на чанки в зависимости от зависимостей для каждго компонента.
При таком подходе, мне на пилотных проектах удавалось достичь общего размера js не более 60кб (учитывая, что там еще и css в этих js) и 1/3 из этого загружалась только тогда, когда пользователь долистывал до футера. А используя http2 протокол мы можем дробить наши компонентики как угодно мелко.
Опять же, нам понадобилась такая система при SSR на java, где «пользователю» предоставлен режим автора и он может на страницу накидать все что угодно и это должно как то работать между собой и не ломаться
Sign up to leave a comment.

Articles