В блоге WebKit появилась статья про проблему повышенного энергопотребления web-контентом — "How Web Content Can Affect Power Usage".
Повышенное энергопотребление очень критично для мобильных устройств. Основные потребители энергии — экран, CPU, GPU и сеть. Экран потребляет энергию предсказуемо, чего нельзя сказать про CPU, GPU и сеть. Энергопотребление CPU, GPU и сети напрямую зависят от текущей выполняемой задачи (парсинг страницы, рендеринг, выполнение JavaScript).
Когда страница переходит в неактивный режим (переключение на другую вкладку) браузеры могут приостановить выполняемый на странице код. В Safari на iOS работа внутри вкладки при первой возможности полностью останавливается. Тем не менее такие "замороженные" вкладки могут вызывать потребление CPU, если на странице работают таймеры, установленные с помощью
Статья хорошая. Она рассказывает про особенности работы WebKit на Apple-устройствах, но тем не менее большая часть статьи актуальна для всех браузеров.
#webkit #mobile
https://webkit.org/blog/8970/how-web-content-can-affect-power-usage/
Повышенное энергопотребление очень критично для мобильных устройств. Основные потребители энергии — экран, CPU, GPU и сеть. Экран потребляет энергию предсказуемо, чего нельзя сказать про CPU, GPU и сеть. Энергопотребление CPU, GPU и сети напрямую зависят от текущей выполняемой задачи (парсинг страницы, рендеринг, выполнение JavaScript).
Когда страница переходит в неактивный режим (переключение на другую вкладку) браузеры могут приостановить выполняемый на странице код. В Safari на iOS работа внутри вкладки при первой возможности полностью останавливается. Тем не менее такие "замороженные" вкладки могут вызывать потребление CPU, если на странице работают таймеры, установленные с помощью
setTimeout и setInterval или происходит работа с сетью. С помощью Page Visibility API и события blur можно отслеживать, когда страница перестаёт быть видимой или становится неактивной и, например, ставить на паузу обновление UI или отключать анимации.Статья хорошая. Она рассказывает про особенности работы WebKit на Apple-устройствах, но тем не менее большая часть статьи актуальна для всех браузеров.
#webkit #mobile
https://webkit.org/blog/8970/how-web-content-can-affect-power-usage/
WebKit
How Web Content Can Affect Power Usage
Users spend a large proportion of their online time on mobile devices, and a significant fraction of the rest is users on untethered laptop computers.
Safari 13 был выпущен в сентябре. Прошло больше двух месяцев, и в блоге WebKit появился пост про все новые фичи, которые стали доступны — "New WebKit Features in Safari 13".
Safari на iPadOS (кроме iPad Mini) теперь по умолчанию отправляет User Agent десктопного Safari. В режиме многозадачности, когда браузер занимает одну треть экрана, User Agent становится Safari для iOS.
Была добавлена поддержка нового API Pointer Events, который абстрагирует разные устройства ввода и предоставляет информацию о координатах указателя, нажатых кнопках, наклоне стилуса и силы его нажатия.
Добавили Visual Viewport API, благодаря которому можно получить координаты части страницы, которая видима пользователю в данный момент. С помощью этого API можно адаптировать отображаемый контент, например, когда открывается экранная клавиатура.
С версии Safari 13 скролл с инерцией применяется ко всем элементам с
Благодаря новому WebDriver теперь можно использовать реальные устройства (iPad, iPhone) для автоматического тестирования сайтов.
Улучшили производительность движка. На 50% ускорили загрузку сайтов на watchOS. Добавили поддержку тёмного режима. Работали над улучшением механизма предотвращения трекинга пользователей. Добавили поддержку физических ключей безопасности FIDO2. Apple Pay теперь доступен во WebView. Улучшили поддержку медиа-источников — WebKit сейчас поддерживает прозрачность в видео с альфа-каналом. Улучшили инструменты разработчика.
#webkit #announcement
https://webkit.org/blog/9674/new-webkit-features-in-safari-13/
Safari на iPadOS (кроме iPad Mini) теперь по умолчанию отправляет User Agent десктопного Safari. В режиме многозадачности, когда браузер занимает одну треть экрана, User Agent становится Safari для iOS.
Была добавлена поддержка нового API Pointer Events, который абстрагирует разные устройства ввода и предоставляет информацию о координатах указателя, нажатых кнопках, наклоне стилуса и силы его нажатия.
Добавили Visual Viewport API, благодаря которому можно получить координаты части страницы, которая видима пользователю в данный момент. С помощью этого API можно адаптировать отображаемый контент, например, когда открывается экранная клавиатура.
С версии Safari 13 скролл с инерцией применяется ко всем элементам с
overflow: scroll. Ранее для этого использовалось свойство -webkit-overflow-scrolling: touch; — сейчас оно потеряло свою актуальность.Благодаря новому WebDriver теперь можно использовать реальные устройства (iPad, iPhone) для автоматического тестирования сайтов.
Улучшили производительность движка. На 50% ускорили загрузку сайтов на watchOS. Добавили поддержку тёмного режима. Работали над улучшением механизма предотвращения трекинга пользователей. Добавили поддержку физических ключей безопасности FIDO2. Apple Pay теперь доступен во WebView. Улучшили поддержку медиа-источников — WebKit сейчас поддерживает прозрачность в видео с альфа-каналом. Улучшили инструменты разработчика.
#webkit #announcement
https://webkit.org/blog/9674/new-webkit-features-in-safari-13/
WebKit
New WebKit Features in Safari 13
This year’s releases of Safari 13 for macOS Catalina, iPadOS, iOS 13, and watchOS 6 include a tremendous number of WebKit improvements for the web across Apple’s platforms.
Джастин Микауд в блоге WebKit написал статью про ускорение операции удаления свойства объекта в JavaScriptCore — "A Tour of Inline Caching with Delete".
Самая распространённая рекомендация для написания быстрого JS-кода — не использовать оператор
Инлайн-кэш — это техника оптимизации, использующаяся для ускорения операций работы с объектами, суть которой состоит в модификации генерируемого кода на основе результатов его предыдущего выполнения (интересный факт, эта оптимизация впервые появилась в Smalltalk). Информация, собранная при генерации инлайн-кэша, используется оптимизирующим компилятором. После всех исправлений в JavaScriptCore компилятор может производить дополнительные оптимизации оператора
Довольно хардкорная и интересная статья. Must read, если интересуетесь тем, как работают js-движки под капотом.
#performance #js #internals #webkit
https://webkit.org/blog/10298/inline-caching-delete/
Самая распространённая рекомендация для написания быстрого JS-кода — не использовать оператор
delete. Как пример, в JavaScriptCore delete приводил к деоптимизации, из-за того что при удалении свойства движок использовал внутреннее представление js-объекта, которое не использует информацию об уже созданных ранее объектах. Для исправления этой проблемы потребовалось адаптировать механизмы, которые используются для кеширования общих частей объектов (Structure и Transitions). Исправление этой части сделало возможным генерацию инлайн-кэша (inline cache) на уровне JIT при удалении свойств объекта.Инлайн-кэш — это техника оптимизации, использующаяся для ускорения операций работы с объектами, суть которой состоит в модификации генерируемого кода на основе результатов его предыдущего выполнения (интересный факт, эта оптимизация впервые появилась в Smalltalk). Информация, собранная при генерации инлайн-кэша, используется оптимизирующим компилятором. После всех исправлений в JavaScriptCore компилятор может производить дополнительные оптимизации оператора
delete, например, полностью его удалять из генерируемого машинного кода, если он не влияет на работу программы.Довольно хардкорная и интересная статья. Must read, если интересуетесь тем, как работают js-движки под капотом.
#performance #js #internals #webkit
https://webkit.org/blog/10298/inline-caching-delete/
WebKit
A Tour of Inline Caching with Delete
If you search for any JavaScript performance advice, a very popular recommendation is to avoid the delete operator.
Трекинг пользователей Safari 15 с помощью в IndexedDB
Мартин Бажаник рассказал про баг Safari, который позволяет узнать, с какими сайтами сейчас работает пользователь — "Exploiting IndexedDB API information leaks in Safari 15".
В Safari 15 при любом взаимодействии с IndexedDB из-за ошибки для всех активных сайтов в рамках одной сессии создаётся пустая база с именем запрошенной базы. Так как имена баз для разных сайтов отличаются друг от друга, то по этому имени можно вычислить, какой именно сайт сейчас открыт у пользователя. Данный баг позволяет вычислить Twitter, YouTube, Bloomberg, Alibaba, Netflix, VK, Instagram и другие сайты. Ситуация ухудшается тем, что у YouTube, Google Keep и Google Calendar в названии базы данных находится идентификатор пользователя, с помощью которого можно узнать информацию о пользователе.
Ошибка воспроизводится в Safari 15 и во всех браузерах на iOS 15 и iPadOS 15. На данный момент баг в трекере WebKit уже исправлен, фикс скорее всего выкатится со следующим обновлением системы.
#privacy #safari #webkit
https://fingerprintjs.com/blog/indexeddb-api-browser-vulnerability-safari-15/
Мартин Бажаник рассказал про баг Safari, который позволяет узнать, с какими сайтами сейчас работает пользователь — "Exploiting IndexedDB API information leaks in Safari 15".
В Safari 15 при любом взаимодействии с IndexedDB из-за ошибки для всех активных сайтов в рамках одной сессии создаётся пустая база с именем запрошенной базы. Так как имена баз для разных сайтов отличаются друг от друга, то по этому имени можно вычислить, какой именно сайт сейчас открыт у пользователя. Данный баг позволяет вычислить Twitter, YouTube, Bloomberg, Alibaba, Netflix, VK, Instagram и другие сайты. Ситуация ухудшается тем, что у YouTube, Google Keep и Google Calendar в названии базы данных находится идентификатор пользователя, с помощью которого можно узнать информацию о пользователе.
Ошибка воспроизводится в Safari 15 и во всех браузерах на iOS 15 и iPadOS 15. На данный момент баг в трекере WebKit уже исправлен, фикс скорее всего выкатится со следующим обновлением системы.
#privacy #safari #webkit
https://fingerprintjs.com/blog/indexeddb-api-browser-vulnerability-safari-15/
Fingerprint
Exploiting IndexedDB API information leaks in Safari 15
Discover how a software bug in Safari 15's IndexedDB API can track your online activity and reveal your identity.
👍9🔥1