Pull to refresh
-9

Системный инженер

2
Subscribers
Send message
Как-то не очень экономно… для любого размера кратного MEMORY_ALIGN будут выделяться лишние MEMORY_ALIGN байт.

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

Чего явно не хватает — это автоматического отказа от всего без вопросов (а-ля Do Not Track в запросе), если бы регуляторы обязали всех ему следовать — то и попапы поредели бы.
netdata умеет собирать данные со многих хостов (где она же может быть чисто коллектором), оповещать в случае проблем с любым из них (т.е. alerts работают по всем собранным данным), и умеет хранить — с версии 1.15 появился dbengine, что (в качестве побочного эффекта) сильно сократило требования по памяти, даже если хранить историю за неделю (раньше всего лишь день при сэмплинге в 1 секунду мог легко сожрать гиг оперативки).
Если нужен RAID1/RAID10 — то по производительности (как и по загрузке проца) практической разницы железного с софтовым не будет (по крайней мере на современных процах), по надёжности тоже. Если говорить про RAID5/6, то всё зависит от нагрузок, но всё равно в большинстве случаев всё упирается в производительность самих дисков и размеры кэша (под линухом тут сильно может помочь bcache).

С другой стороны, из личного опыта — за последние 20 лет была куча проблем с железными, причём именно Adaptec — от полной потери данных массива (когда они сходили с ума) до банальных проблем вроде недоступности всего массива после выхода из строя всего одного диска. Не то что бы часто такое случалось, но сам факт несколько расстраивает — от железного RAID такой подставы совсем не ожидаешь. В то же время, с софтовыми (mdadm) вообще ни разу проблем не было, не говоря уже о том что с ними, в случае чего, нет проблем с восстановлением.
Это больше пугалка чем шевелилка. Пока DNSSEC повсеместно не используется (а именно для него важны EDNS и DNS-over-TCP), ни первый, ни второй DNS Flag Day ровным счётом ничего не меняют для подавляющего большинства клиентов (и серверов) — т.е. всё что резолвилось раньше будет и дальше резолвится, разве что всех клиентских резолверов принудительно заставят использовать DNS-over-TCP для обычных запросов (что практически невероятно).
Частично эту проблему решает CAA в DNS, но малоэффективно пока не защищено DNSSEC или аналогичными механизмами.
Есть предположение, что это скрипты яндексовской рекламы и фреймворки тут ни при чём.

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

Гора элементов с кучей классов и атрибутов не имеет никакого отношения к фреймворкам.

Я так думаю, это зависит от фреймворка. Некотоые из них явно сгенерированные, так что не вижу кто ещё мог это сделать.

Вы хотите обвинить меня в том, что я пишу неоптимизированные приложения?

Извините, ничего личного — речь шла об абстрактном «вы».

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

Какая бизнес-логика? Это UI, клиентская часть — там не должно быть бизнес-логики, разве что минимальная валидация. Задача браузера — это быстро и эффективно отображать UI, с учётом динамического изменения элементов — всё. Любой js который к нему отправляется должен решать только эту задачу, не более. Конечно, SPA/WebApp слегка другой вопрос, но фреймворки в основном используются не для SPA, и логика всё равно на стороне сервера.
Наличие кастомного viewport, как минимум, лишает возможности использовать поиск средствами браузера, так что с этой точки зрения от пагинации он не отличается.

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

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

Да или просто первая страница яндекса — всё влезает на один экран, но там только одого js уже 500 кб (причём минимизированного) — вот о чём речь.

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

Может, вы привыкли смотреть страницы на чём-то с процом типа i8700 и 32GB памяти, но есть масса людей у которых всего 2G (из них половина сожрана системой, и ещё четверть всякой служебной фигнёй) и нечто вроде атома/арма — там всё это вызывает большую боль.

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

Разметка нужна не только для редактирования, если это сложная таблица с несколькими колонками, вероятно с иконками, разными шрифтами или цветами — вот вам уже минимум десяток элементов на строку.

А вот насчёт 1000 строк — это зависит. К примеру, когда я просматриваю события системы мониторинга или журналы — то бывает и по 10 тыс. строк, это гораздо удобней чем листать по 100. Опыт показывает что отдача браузеру маркапа (созданного либо на сервере либо в самом js) существенно ускоряет рендеринг.

Я думаю если появится такой «вумный» компилятор-фреймворк который всё оптимизирует примерно так как я описываю (код только там где невозможно обойтись html) — он очень быстро захватит мир.
getElementById() можно вызвать только один раз — потом переиспользовать результат (элемент-то статичен).

И да, 9 ms это конечно мало — но и элементов всего 1000. А если их 1000 и в каждом ещё по два десятка вложенных (если это табличка с расчётом на модификацию значений пользователем)?

А теперь представьте что это выполняется не на топовом железе а на средненьком мобильном или просто нетбуке — эти 9 ms легко могут превратиться во все 100 ms.

Мне кажется, если бы девелоперов заставить тестировать продукцию на слабом железе с ограниченными ресурсами, то ситуация с оптимизацией резко бы изменилась, но сейчас, увы, тенденция — наращивание мощности процессоров и памяти…
Если он статический, зачем его переиспользовать?
Это зависит от приложения, часто бывает так что изменяемый контент составляет сравнительно небольшую часть по отношению к статике. Яркий пример — некоторые dashboards, где собственно статика (стили, маркап) занимают 70-80%.
Прошу прощения. Видимо, мне просто попался такой фрагмент кода на angular — со вставками markup, и я экстраполировал на весь фреймворк.
Ok, хорошо — но остается всё же массивный объем кода для создания даже статики. Банальный
<div>static text</div>
создается посредством js:
div = element("div");
div.textContent = "static text";
т.е. для сравнительного большого темплейта будет куча кода. А куча кода это куча кода — даже если он выполняется один раз.

Зачем такой огород если можно просто скормить браузеру собственно html с нужными вставками?
чтобы получить ссылки на ноды(иначе как работать фреймворку?)

getElementById() же, нет? Темплейт в слегка переработанном виде отдаётся браузеру, где надо расставляются id, по этим id один раз (при инициализации) берутся объекты, а дальше меняется только то что должно, без репарсинга. Компилятор ведь всё равно разбирает темплейт, так что создать эффективный код не должно быть проблемой.

Для любых контейнеров где внутри нет HTML достаточно будет менять innerText, а не innerHTML, можно даже делать это более эффективно, если «добавить воды»:
<div>Hello, {name}!</div>

транслируется в что-то типа:
<div>Hello, <span id="var-name" ></span></div>

после чего меняется только innerText в #var-name (адрес которого берется один раз).

И в любом случае, браузер гораздо быстрее и эффективнее разберет фрагмент html чем вы «вручную» будете его создавать в js посредством манипуляции DOM. Проведите эксперимент — создайте динамически (js) таблицу с большим количеством элементов, а потом её же но уже через установку innerHTML — разница будет ощутима.
Если переменная name изменяется, элемент будет пересоздаваться — весь, снова и снова — в этом я и вижу проблему.
Чем же лучше react/angular/flutter & co, где шаблон хорошо разбавлен кодом (или наоборот)? Уж лучше один файл но в нём отдельно шаблон и код, чём php-style 15-ти летней давности, пусть и с улучшенным синтаксисом.
У Svelte, равно как и множества других реактивных фреймворков, есть большой недостаток — это динамическое (пере)создание элементов при обновлении их содержимого. К примеру, даже сравнительно статический фрагмент из банального &lth1>Hello {name}&lt/h1> превращается в такой код:
c() {
	h1 = element("h1");
	t0 = text("Hello ");
	t1 = text(name);
	t2 = text("!");
},

m(target, anchor) {
	insert(target, h1, anchor);
	append(h1, t0);
	append(h1, t1);
	append(h1, t2);
},

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

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

Собственно сам browser намного быстрее всё отрендерит и построит из html, чем из js-кода, изменения только контента намного быстрее чем полное пересоздание элементов.

Пока же, увы, тенденция такова что темплейты в html просто тупо транслируются в js, фактически убивая всё то хорошее ради чего был создан собственно html (попробуйте ради интереса сделать в свелте &ltdiv>static text&ltdiv> — получите тоже кусок js).

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

Information

Rating
Does not participate
Location
Nordrhein-Westfalen, Германия
Registered
Activity