SeoA

Рейтинг
52
Регистрация
12.04.2024
Это связано с удобством, организацией и технической необходимостью, а не с низкоуровневой скоростью обработки (парсинга) основных стилей.
Вот несколько причин, почему этот порядок стал классическим:
1. Организация и Удобство Разработчика
Это самый главный фактор. Файл стилей организуется по логике зависимостей и влияния на общую картину:
 * Ресет/Нормалайз: Должны идти первыми, чтобы сбросить или нормализовать стили браузеров до того, как будут применяться все остальные стили.
 * Переменные. Если переменные объявлены в начале (:root {}), они становятся доступными для использования во всем последующем коде.
 * Шрифты (@font-face): Они объявляются в начале, чтобы убедиться, что браузер начнет их загрузку как можно раньше.
Это позволяет любому разработчику, открывшему файл, быстро понять базовые настройки проекта.
2. Принцип Каскада (Для конфликтов)
Хотя ты не о нем, он играет роль:
 * Стили, которые должны быть легко переопределены (например, стили тегов в ресете), идут первыми.
 * Стили, которые должны быть последним словом (например, специфичные стили для модулей или утилит), часто идут ближе к концу, чтобы победить в случае конфликта с более общими правилами с одинаковой специфичностью.
3. Технические Исключения (Директива @charset)
Ты правильно указал на единственное строгое исключение — директиву @charset.


 * Назначение: Директива @charset указывает кодировку символов для таблицы стилей.
 * Требование: Согласно спецификации CSS, она должна быть самым первым элементом в таблице стилей (ей не может предшествовать даже пробел), кроме BOM  если он используется. Если она стоит ниже, парсер ее просто игнорирует.
Это не связано со скоростью рендеринга, а исключительно с правилами, которые парсер должен применить, чтобы правильно декодировать байты файла в символы, которые он может прочитать.

В итоге:

Таоё первоначальное понимание остается верным:

> Порядок стилей внутри CSS-файла (кроме @charset и логических зависимостей) не влияет на низкоуровневую скорость парсинга и обработки основных свойств.
Браузер считывает весь файл, строит CSSOM, а затем использует его, чтобы вычислить конечные стили для всех элементов разом, а не отрисовывает их по мере прочтения. Организация сверху вниз — это, прежде всего, стандартная практика разработки для обеспечения порядка и читаемости.

Dmitriy_2014 #:
Ну то есть смысла переставлять самые важные свойства вверх нет, что они будут в самом начале, что в самом конце css файла, не влияет ровным счетом не на что(Ну кроме каскадирования, но я не про него), правильно я понял.

Да,  абсолютно правильно.

Смысла переставлять "самые важные" свойства в начало CSS-файла (или даже в начало блока правил) нет. Это не повлияет на скорость обработки или рендеринга страницы.

Суть процесса

* Парсинг всего файла: Браузер сначала полностью загружает и парсит весь CSS-файл, чтобы построить CSSOM (CSS Object Model).

* Вычисление стилей: После построения CSSOM и DOM (из HTML) браузер вычисляет конечный, объединенный набор стилей для каждого элемента на странице. Он не применяет свойства по одному, проходя по файлу сверху вниз. Он видит все свойства сразу.

* Применение каскада: Правила каскада (специфичность, важность, и, в последнюю очередь, порядок в файле) используются только для разрешения конфликтов между разными правилами. Если конфликта нет (например, ты просто переставляешь width и height местами), порядок не имеет значения.

Итог: Для производительности и скорости рендеринга не имеет значения, где в файле находится правило для body или main-container. Важно, чтобы файл был загружен и разобран (parsed) как можно быстрее, а не в каком порядке внутри него расположены правила.

Теперь ты спросишь, а как же отрисовка?

Обработка CSS связана с процессом отрисовки (Rendering).

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

Как CSSOM влияет на Отрисовку

Процесс отрисовки (Критический Путь Рендеринга) состоит из нескольких ключевых шагов:

1. Построение CSSOM (CSS Object Model)

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

2. Построение Дерева Рендеринга (Render Tree)

Дерево рендеринга создается путем объединения DOM (содержимое) и CSSOM (стили).

* Браузер проходит по каждому узлу DOM.

* Он собирает все потенциально применимые правила из CSSOM (используя правила каскада, специфичности и наследования).

* Он вычисляет конечный, абсолютный (например, из em в px) набор стилей для этого узла.

* Он добавляет узел и его вычисленные стили в Дерево Рендеринга. Ну кроме display: none не включаются в это дерево.

3. Компоновка 

После того как Дерево Рендеринга сформировано, браузер определяет точное геометрическое положение и размер каждого элемента на экране. Этот процесс называется компоновкой или перекомпоновкой (reflow). Он должен знать, где именно находится каждый элемент, чтобы начать его рисовать.

4. Отрисовка 

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

в итоге что? Роль CSS в отрисовке

Таким образом, твой CSS-файл напрямую не "рисует" страницу, пока браузер идет по нему сверху вниз. Вместо этого:

* CSS-файл должен быть полностью обработан для создания CSSOM.

* CSSOM является основой для создания Дерева Рендеринга.

* Дерево Рендеринга является основой для Компоновки и Отрисовки.

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

Все просто.


Dmitriy_2014 #:
Хорошо, но как он это делает, допустим загружает и парсит 20% процентов кода css файла сверху, потом на основе этого Построение дерева рендеринга и вычисление стилей, Компановка и отрисовка, или сразу 100%. Кусочками или сразу все? Или там задержка пока до 100% компоновка и отрисовка не дойдет. Но у меня были то-ли баги, из-за инета то-ли видения, что страница не полностью загрузилась, то есть часть стилей есть, а часть неотрисовалась, вроде бы.

браузер сначала парсит весь CSS-файл и создает древовидную структуру CSSOM (Объектная Модель CSS). Это похоже на то, как вы читаете весь рецепт от начала до конца, прежде чем начать готовить. На этом этапе браузер просто составляет полный каталог всех существующих правил.

Дальше идёт каскадность, то есть по сути это алгоритм разрешения конфликтов. Например у тебя для тэга р есть 5 стилей color: red; color: white; и тп. браузер применит самый последний.

У тебя видимо проблема именно с каскадированием. 

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

ArbNet #:

Время покажет, кто не шарит чувак 😉

ЗЫ. А таким как вы объяснять, только время терять..

Взаимно!

domen77 #:

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

Выше привел пример про 21 млн квартир. Кто-то ответит как такое может быть? Кто продал биткоин за 100К?😐

А как де тогда эьи цифры на мониторе превращались в реальные деньги и наоборот? Хочешь сказать этого всего не було?

Коллеги, ну это же основы основ, что вы пишите ерунду?
 Правильно так:

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

1. Загрузка и парсинг.

2. Построение дерева рендеринга и вычисление стилей.

3. Компановка и отрисовка. 

Вот и всё. Всё просто.

Дополню, пока не начали задавать вопросы:

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

ArbNet #:

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

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

ellienoise #:
Да, там есть какой то набор лицензионного контента, но говорить, что он может заменить пиратские киносайты с их ассортиментом и выбором разных озвучек это просто смешно)

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

Так и с кино: включил, показывает, смотрим.

EdwardEdit #:
Когда пришло осознание, я вообще выключил телевизор - фильмы, сериалы и прочее, не имеющее смысла, отвалилось практически полностью за последние пять лет, только познавательное, только то, что мне интересно... ляляля...

Ты не мог бы выражать свои мысли правильно? Пришло осознание чего? Конца света, завтра понедельник, опять всё сожрал или что? 

Сейчас нет достойных новинок и народа нет. 
Плюс сейчас всё есть на рутубе: никаких впн, включай и смотри.
Всего: 712