Size: a a a

2020 April 27

AS

Alexey Schebelev in Svelte [svelt]
Дмитрий Гриднев
Подскажите пожалуйста по CSS анимации. Использую 3D Transform.
Логика написана в классе. При определенном состояниии переменой в компоненте, я добавляю в class новый индикатор, в нем описано CSS анимация. Она работает, но проблема в том, что в Safari все ок, а на движке хромиум очень жесткие лаги.
Если писать анимации используя JS(стандартные возможности Svelte) все ок, но это делать сложно, ибо никогда не писал руками изменение анимации. Можно ли как то заставить адекватно работать анимации чистого CSS?
При нативном подходе Svelte он в style постоянно переписывает анимации и все ок работает.
Кажется, это вопрос не про Svelte.  Если при добавлении class анимация тормозит, то это какая-то более общая проблема. (Будет ли то же самое в чистом html?).
Встроенные анимации Svelte тоже используют CSS трансформации, не JS.
источник

DN

Denys Novakov in Svelte [svelt]
Bohdan Shulha
> всегда будет работать на старых или сильно загруженных машинах

Почему?

- setTimeout ставит коллбек в очередь, отдаёт управление
- JS движок продолжает выполнение с места вызова setTimeout, где отрабатывает синхронная внутрянка svelte
- EventLoop опрашивает очередь на предмет готовых тасок
- EventLoop запускает готовые таски

Здесь нет места случайности, последовательность выполнения линейна.

BTW, если setTimeout не передавать, собственно, таймаут (или он будет равен 0), то коллбек запустится со “скоростью” работы EventLoop. Этим свойством я воспользовался

https://codesandbox.io/s/youthful-heisenberg-ywfpt?file=/App.svelte
"EventLoop запускает готовые таски"

Вообще-то только одну.
источник

DK

Dmitry Kutran in Svelte [svelt]
Таски из кучи идут в очередь, потом в стэк
источник

DN

Denys Novakov in Svelte [svelt]
Dmitry Kutran
Таски из кучи идут в очередь, потом в стэк
Но из очереди идут по одной.
источник

DK

Dmitry Kutran in Svelte [svelt]
Куча - таски, по типу которых запускаются в setTimeout
источник

DK

Dmitry Kutran in Svelte [svelt]
Denys Novakov
Но из очереди идут по одной.
Да
источник

DN

Denys Novakov in Svelte [svelt]
Точнее вся очередь не исполняется сразу.
источник

BS

Bohdan Shulha in Svelte [svelt]
Денис, для вас принципиально “исправлять” ваших собеседников? Я не давал и не ставил перед собой цель детально описать работу EventLoop.
источник

DN

Denys Novakov in Svelte [svelt]
Bohdan Shulha
Денис, для вас принципиально “исправлять” ваших собеседников? Я не давал и не ставил перед собой цель детально описать работу EventLoop.
Просто не надо вводить людей в заблуждение.
источник

BS

Bohdan Shulha in Svelte [svelt]
Denys Novakov
Точнее вся очередь не исполняется сразу.
Мне смешно, если честно. Я думаю, что, раз люди говорят о EventLoop, то они знают, что паралельного исполнения JS кода в современных JS нет (за исключением вебворкеров в браузере и воркертредов в ноде).

> Ну тогда не надо вводить людей в заблуждение, даже случайно.

Если человеку необходимо будет разобраться в деталях, как работает таки EL - он пойдёт в YT и подберёт прекраснейшие доклады по первому же результату поиска
источник

DK

Dmitry Kutran in Svelte [svelt]
Bohdan Shulha
Денис, для вас принципиально “исправлять” ваших собеседников? Я не давал и не ставил перед собой цель детально описать работу EventLoop.
Согласен с Денисом. Умейте принять критику или исправление, чтобы не вводить людей в заблуждение. Я к тому, что даже setTimeout 0 приведёт к исполнению задачи после того, как стэк будет пустым, а не «со скоростью eventloop”, это в корне не правильно
источник

DK

Dmitry Kutran in Svelte [svelt]
Для микротасок есть промисы и requestAnimationFrame
источник

DN

Denys Novakov in Svelte [svelt]
Bohdan Shulha
Мне смешно, если честно. Я думаю, что, раз люди говорят о EventLoop, то они знают, что паралельного исполнения JS кода в современных JS нет (за исключением вебворкеров в браузере и воркертредов в ноде).

> Ну тогда не надо вводить людей в заблуждение, даже случайно.

Если человеку необходимо будет разобраться в деталях, как работает таки EL - он пойдёт в YT и подберёт прекраснейшие доклады по первому же результату поиска
Разница в том, что очередь микротасков исполняется сразу вся, а очередь Сообщений исполняется по одному коллбеку за один пробег Event  Loop.
источник

BS

Bohdan Shulha in Svelte [svelt]
> приведёт к исполнению задачи после того, как стэк будет пустым

Хорошо. В следующий раз буду писать все граничные граничные условия, вида “если очередь EL пустая” (нет).
источник

DK

Dmitry Kutran in Svelte [svelt]
Bohdan Shulha
> приведёт к исполнению задачи после того, как стэк будет пустым

Хорошо. В следующий раз буду писать все граничные граничные условия, вида “если очередь EL пустая” (нет).
Это базовые условия, а не граничные, но я очень рад, что мы пришли к консенсусу)
источник

BS

Bohdan Shulha in Svelte [svelt]
❤️
источник

B

Bulat in Svelte [svelt]
Всем привет, незнаю писали здесь или нет, нашел баг в #await при деструктуризации в then если промис поменять на что-то другое то значения берутся из глобального скоупа, крч вот https://svelte.dev/repl/99b8e361a0c64a4ba2039dbc097b3dce?version=3.21.0
источник

DN

Denys Novakov in Svelte [svelt]
Dmitry Kutran
Для микротасок есть промисы и requestAnimationFrame
queueMicrotask(callback);
источник

DK

Dmitry Kutran in Svelte [svelt]
Denys Novakov
queueMicrotask(callback);
+
источник

DK

Dmitry Kutran in Svelte [svelt]
Он недавно появился, ещё не успел заюзать
источник