<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="/rss-style.xsl"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title><![CDATA[Team IT Security - Web Tipps]]></title>
<link><![CDATA[https://tsecurity.de/export/rss/web-tipps.xml]]></link>
<description><![CDATA[Willkommen bei Web Tipps, dem Informationsportal für Webentwickler und Webdesigner. Hier findest du eine Auswahl an interessanten Artikeln aus verschiedenen Quellen, die dir helfen, auf dem Laufenden zu bleiben und deine Webkompetenzen zu verbessern. Egal, ob du dich für Docker, VSCode, PHP, KI, Cloud Computing oder andere Webthemen interessierst, hier wirst du fündig. Du kannst auch die RSS Feeds abonnieren, um keine Neuigkeiten zu verpassen. Viel Spaß beim Stöbern und Lernen!]]></description>
<language>de-DE</language>
<lastBuildDate>Sun, 26 Jul 2026 12:59:46 +0200</lastBuildDate>
<pubDate>Sun, 26 Jul 2026 12:59:46 +0200</pubDate>
<ttl>15</ttl>
<copyright>2026 Team IT Security</copyright>
<managingEditor>lakandor@tsecurity.de (Horus Sirius)</managingEditor>
<webMaster>lakandor@tsecurity.de (Horus Sirius)</webMaster>
<category>Web Tipps</category>
<generator>Team IT Security RSS Generator v2.0</generator>
<image>
<url>https://tsecurity.de/favicon.ico</url>
<title><![CDATA[Team IT Security - Web Tipps]]></title>
<link><![CDATA[https://tsecurity.de/export/rss/web-tipps.xml]]></link>
</image>
<atom:link href="https://tsecurity.de/export/rss/web-tipps.xml" rel="self" type="application/rss+xml" />
<item>
<title><![CDATA[Google Workspace Weekly Recap - July 24, 2026]]></title>
<description><![CDATA[Import and create combo charts in Google SheetsGoogle Sheets now offers enhanced support for combo charts, providing a more seamless experience when creating multi-series visualizations. | Learn more.A centralized hub for meeting resources on the new Google Meet homepageFinding the right notes or...]]></description>
<link>https://tsecurity.de/de/3692423/it+betriebssysteme/web+tipps/google+workspace+weekly+recap+-+july+24+2026/</link>
<pubDate>Fri, 24 Jul 2026 21:50:50 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h3>Import and create combo charts in Google Sheets</h3><p>Google Sheets now offers enhanced support for combo charts, providing a more seamless experience when creating multi-series visualizations. | <a href="https://workspaceupdates.googleblog.com/2026/07/import-and-create-combo-charts-in-Google-Sheets.html" target="_blank">Learn more</a>.</p><h3>A centralized hub for meeting resources on the new Google Meet homepage</h3><p>Finding the right notes or attachments for a meeting shouldn't feel like a scavenger hunt. We’re introducing a revamped Google Meet homepage on the web to help you stay organized and prepared throughout your entire meeting workflow. | <a href="https://workspaceupdates.googleblog.com/2026/07/a-centralized-hub-for-meeting-resources-on-the-new-Google-Meet-homepage.html" target="_blank">Learn more</a>.</p><h3>Redesigned Google Classroom homepage with tailored views based on user’s role</h3><p>Soon, Google Classroom will introduce a redesigned homepage globally across all editions to help teachers, students, and administrators easily find relevant content, resources, and tools tailored to their specific roles. | <a href="https://workspaceupdates.googleblog.com/2026/07/redesigned-google-classroom-homepage-with-tailored-views-based-on-users-role.html" target="_blank">Learn more</a>.</p><h3>Gemini Alpha is now Gemini Beta</h3><p>We’re updating the name of the Gemini Alpha program to "Gemini Beta." This new name more accurately reflects both the scale and the quality of the features that enter this launch stage. Please note that this is solely a branding change. This update does not alter any customer configurations, data privacy constraints, or pricing tiers. | <a href="https://workspaceupdates.googleblog.com/2026/07/gemini-alpha-is-now-gemini-beta.html" target="_blank">Learn more</a>.</p><h3>Google Meet now organizes your meeting notes, transcripts, and recordings in your Google Drive</h3><p>We’re making it easier for users to find meeting notes, transcripts and recordings in Google Drive. | <a href="https://workspaceupdates.googleblog.com/2026/07/google-meet-now-organizes-your-meeting-notes-transcripts-and-recordings-in-your-Google-Drive.html" target="_blank">Learn more</a>.</p><h3>View supporting calendar delegates in meeting guest list</h3><p>When viewing a guest list in Google Calendar on the web, you will now see a new icon next to leaders who have a calendar delegate assisting them with scheduling support. Hovering over the icon will display the person’s information, allowing you to easily initiate a chat with them directly. | <a href="https://workspaceupdates.googleblog.com/2026/07/view-supporting-calendar-delegates-in-meeting-guest-list.html" target="_blank">Learn more</a>.</p><p><span>The announcements above were published on the Workspace Updates blog over the last week. Please refer to the original blog posts for complete details.</span></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[View supporting calendar delegates in meeting guest list]]></title>
<description><![CDATA[When viewing a guest list in Google Calendar on the web, you will now see a new icon next to leaders who have a calendar delegate assisting them with scheduling support. Hovering over the icon will display the person’s information, allowing you to easily initiate a chat with them directly.This up...]]></description>
<link>https://tsecurity.de/de/3689570/it+betriebssysteme/web+tipps/view+supporting+calendar+delegates+in+meeting+guest+list/</link>
<pubDate>Thu, 23 Jul 2026 17:53:35 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>When viewing a guest list in Google Calendar on the web, you will now see a new icon next to leaders who have a calendar delegate assisting them with scheduling support. Hovering over the icon will display the person’s information, allowing you to easily initiate a chat with them directly.</p><p>This update helps users quickly identify and contact the appropriate scheduling support for a leader to streamline communication and event coordination.</p><p>This icon is visible in several calendar views:</p><p></p><ul><li>Event details view</li><li>Full-screen creation</li><li>Side-by-side scheduling view</li></ul><p></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container"><tbody><tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5LMGon8DbvIb75H_NX_sx-bv3oZdCH0fI7MNaovk7fUKW416L0sBvXFFMxIywQ5fkZz8Oitaef7ZyqSmAlcXlZMD-2trC1cWq6W99epBcQ7eZe97reUsFk7Cpdlb-FjEdZ0QvJVxLi5M2VZ3vSbpL_elrrPyPTzYxqKy9irfz5h7lc4xlmNiL8V2X_Wk/s1180/View%20supporting%20calendar%20delegates%20in%20meeting%20guest%20list%20-%207060.png"><img border="0" data-original-height="452" data-original-width="1180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5LMGon8DbvIb75H_NX_sx-bv3oZdCH0fI7MNaovk7fUKW416L0sBvXFFMxIywQ5fkZz8Oitaef7ZyqSmAlcXlZMD-2trC1cWq6W99epBcQ7eZe97reUsFk7Cpdlb-FjEdZ0QvJVxLi5M2VZ3vSbpL_elrrPyPTzYxqKy9irfz5h7lc4xlmNiL8V2X_Wk/s1600/View%20supporting%20calendar%20delegates%20in%20meeting%20guest%20list%20-%207060.png"></a></td></tr><tr><td class="tr-caption"><br>New icon surfacing the calendar delegate of a leader in the guest list in event details view</td></tr></tbody></table><h3>Getting started</h3><p></p><ul><li><b>Admins: </b>There is no admin control for this feature.</li><li><b>End users: </b>There is no end-user setting for this feature. Simply hover over the icon next to the person’s name to see more information about their scheduling support.</li></ul><p></p><h3>Rollout pace</h3><p></p><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release domains:</a> Gradual rollout (up to 15 days for feature visibility) starting on July 23, 2026</li><li><a href="https://support.google.com/a/answer/172177" target="_blank">Scheduled Release domains:</a> Full rollout (1–3 days for feature visibility) starting on August 3, 2026</li></ul><p></p><h3>Availability</h3><p></p><ul><li>Available to all Google Workspace customers, Workspace Individual subscribers, and users with personal Google accounts</li></ul><p></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Gemini Alpha is now Gemini Beta]]></title>
<description><![CDATA[We’re updating the name of the Gemini Alpha program to "Gemini Beta." This new name more accurately reflects both the scale and the quality of the features that enter this launch stage. Please note that this is solely a branding change. This update does not alter any customer configurations, data...]]></description>
<link>https://tsecurity.de/de/3687298/it+betriebssysteme/web+tipps/gemini+alpha+is+now+gemini+beta/</link>
<pubDate>Wed, 22 Jul 2026 20:31:40 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>We’re updating the name of the Gemini Alpha program to "Gemini Beta." This new name more accurately reflects both the scale and the quality of the features that enter this launch stage. Please note that this is solely a branding change. This update does not alter any customer configurations, data privacy constraints, or pricing tiers. All existing admin controls and customer opt-ins are fully preserved. Your current Terms of Service continue to apply, and customers do not need to re-sign any agreements.</p><p>As a reminder, we’ll continue to announce new Gemini Beta features in the <a href="https://discuss.google.dev/c/workspace-releases/22" target="_blank">Google Developer Program (GDP)</a> forum and the <a href="https://knowledge.workspace.google.com/p/gemini-beta" target="_blank">Gemini Beta Help Center</a>. You must be an active Workspace customer and register to access GDP content; follow these <a href="https://docs.google.com/document/d/16_AW7LIHrI7de_7jTZIWQIFS3us1Cm8sAmASSFQP56c/edit?usp=sharing" target="_blank">instructions to sign up</a>.</p><h3>Getting started</h3><p></p><ul><li><b>Admins: </b>There is no change to <a href="https://knowledge.workspace.google.com/p/gemini-beta" target="_blank">existing admin controls</a>. You will begin to see the "Gemini Beta" label replace "Gemini Alpha" in the Admin console and Help Center articles over the next several weeks.</li><li><b>End users:</b> There is no end user setting for this change.</li></ul><p></p><h3>Rollout pace</h3><p></p><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Gradual rollout (up to 15 days for feature visibility) starting on July 22, 2026</li></ul><p></p><h3>Availability</h3><p></p><ul><li><b>Business: </b>Business Starter, Standard, and Plus</li><li><b>Enterprise: </b>Enterprise Starter, Standard, and Plus</li><li><b>Education Add-ons:</b> Google AI Pro for Education</li></ul><p></p><h3>Resources</h3><p></p><ul><li>Google Workspace Admin Help: <a href="https://knowledge.workspace.google.com/admin/generative-ai/workspace-with-gemini/turn-access-to-google-workspace-with-gemini-alpha-on-or-off" target="_blank">Turn access to Google Workspace with Gemini Beta on or off</a></li><li>Google Developer Program: <a href="https://discuss.google.dev/c/workspace-releases/workspace-alpha/workspace-alpha-forum/222" target="_blank">Workspace Alpha Forum</a></li></ul><p></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Google Meet now organizes your meeting notes, transcripts, and recordings in your Google Drive]]></title>
<description><![CDATA[We’re making it easier for users to find meeting notes, transcripts and recordings in Google Drive with the following improvements:After a meeting, we’ll automatically upload these files to a new folder in the host’s My Drive called “Google Meet.”Within that “Google Meet” folder, these files will...]]></description>
<link>https://tsecurity.de/de/3687297/it+betriebssysteme/web+tipps/google+meet+now+organizes+your+meeting+notes+transcripts+and+recordings+in+your+google+drive/</link>
<pubDate>Wed, 22 Jul 2026 20:31:36 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>We’re making it easier for users to find <a href="https://support.google.com/meet/answer/14754931?hl=en&amp;ref_topic=14073938&amp;sjid=8385333923985479419-NA" target="_blank">meeting notes</a>, <a href="https://support.google.com/meet/answer/12849897?hl=en&amp;ref_topic=14074639&amp;sjid=8385333923985479419-NA" target="_blank">transcripts</a> and <a href="https://support.google.com/meet/answer/9308681?sjid=8385333923985479419-NA" target="_blank">recordings</a> in Google Drive with the following improvements:</p><p></p><ul><li>After a meeting, we’ll automatically upload these files to a new folder in the host’s My Drive called “Google Meet.”</li><li>Within that “Google Meet” folder, these files will be automatically organized into subfolders for each meeting. Files from different instances of a recurring meeting will share one folder.</li><li>Any meeting attendees with access to the meeting files will see shortcuts to these source files in their “Google Meet” Drive folders too..</li></ul><p></p><p>Previously, these files were only uploaded to the host’s My Drive, not the attendees’, and the files weren’t organized by meeting.</p><p><b>Note: </b>Shortly after we roll out this change, we’ll automatically move the existing “Meet Recordings” folder into the new “Google Meet” folder and rename it “Legacy Meet Recordings.” Users may see both “Meet Recordings” and “Google Meet” in their Google Drive for a brief period during this transition.</p><p><br></p><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjif_xiHfQODyvVZEK_IgvjWOBfXcMxvi-TjSnhY1uHzaxm4DVMj8KHMqT6EjNwfTtL0a3H6kGjHZURCwJAeMRA3nHUIRb1qjsuogkjDz2k_JMPHhVvdoR6KAHrmpFslOzpnBP1UMaQOaylbUiBRVUSfzEx58SgmgTNK_XEeclBatwlU3nJVDBCAWaCk3c/s2048/Google%20Meet%20now%20organizes%20your%20meeting%20notes,%20transcripts,%20and%20recordings%20in%20your%20Google%20Drive%20-%207148.jpeg" imageanchor="1"><img border="0" data-original-height="1152" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjif_xiHfQODyvVZEK_IgvjWOBfXcMxvi-TjSnhY1uHzaxm4DVMj8KHMqT6EjNwfTtL0a3H6kGjHZURCwJAeMRA3nHUIRb1qjsuogkjDz2k_JMPHhVvdoR6KAHrmpFslOzpnBP1UMaQOaylbUiBRVUSfzEx58SgmgTNK_XEeclBatwlU3nJVDBCAWaCk3c/s1600/Google%20Meet%20now%20organizes%20your%20meeting%20notes,%20transcripts,%20and%20recordings%20in%20your%20Google%20Drive%20-%207148.jpeg"></a></div><h3>Getting started</h3><p></p><ul><li><b>Admins: </b>Existing "Meet Recordings" folders will be renamed to "Legacy Meet Recordings" and moved under the new "Google Meet" folder topology. Admins should audit any API scripts or automated workflows that rely on specific folder names or IDs.</li><li><b>End users: </b>Users will see their meeting artifacts automatically organized into meeting-specific sub-folders within the "Google Meet" folder, with shortcuts for easier findability.</li></ul><p></p><h3>Rollout pace</h3><p></p><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release domains:</a> Full rollout (1–3 days for feature visibility) starting on July 22, 2026</li><li><a href="https://support.google.com/a/answer/172177" target="_blank">Scheduled Release domains:</a> Full rollout (1–3 days for feature visibility) starting on July 30, 2026</li></ul><p></p><h3>Availability</h3><p></p><ul><li>Available to all Google Workspace customers</li></ul><p></p><h3>Resources</h3><p></p><ul><li>Google Meet Help: <a href="https://support.google.com/meet/answer/9308681" target="_blank">Record a video meeting</a></li><li>Google Meet Help: <a href="https://support.google.com/meet/answer/14754931?hl=en&amp;ref_topic=14073938&amp;sjid=8385333923985479419-NA" target="_blank">Take notes for me in Google Meet</a></li></ul><p></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[A centralized hub for meeting resources on the new Google Meet homepage]]></title>
<description><![CDATA[Finding the right notes or attachments for a meeting shouldn't feel like a scavenger hunt. We’re introducing a revamped Google Meet homepage on the web to help you stay organized and prepared throughout your entire meeting workflow.The new homepage provides a centralized view of your meeting agen...]]></description>
<link>https://tsecurity.de/de/3684693/it+betriebssysteme/web+tipps/a+centralized+hub+for+meeting+resources+on+the+new+google+meet+homepage/</link>
<pubDate>Tue, 21 Jul 2026 21:17:36 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Finding the right notes or attachments for a meeting shouldn't feel like a scavenger hunt. We’re introducing a revamped <a href="http://meet.google.com/" target="_blank">Google Meet homepage</a> on the web to help you stay organized and prepared throughout your entire meeting workflow.</p><p>The new homepage provides a centralized view of your meeting agenda and essential artifacts, allowing you to:</p><p></p><ul><li><b>Prepare effectively:</b> Quickly access meeting descriptions and calendar attachments for upcoming calls. </li><li><b>Follow through easily: </b>Find meeting notes, recordings, and transcripts from past meetings without digging through your inbox or Drive.</li><li><b>Manage your time:</b> Use the new week and month navigators to look ahead at your schedule or revisit previous discussions.</li></ul><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhj97q6323Azup-mSVmBw7RHnzSg7_xZtEyApn_SM4M_BFl7r0rc_z0hIYwSlHCI7-MMg_yzFKMZNj8e25olawT_ETkeezqA5rTj4qkUY5NxxMUi2BtikHg_c5-G29uienFKv_nNemimnK7J7lTrfnA8qnJcWoaQjxzNsRbWYkkvL6lGd7C2-yYEcmFY98/s1280/A%20centralized%20hub%20for%20meeting%20resources%20on%20the%20new%20Google%20Meet%20homepage%20-%206698.png"><img border="0" data-original-height="826" data-original-width="1280" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhj97q6323Azup-mSVmBw7RHnzSg7_xZtEyApn_SM4M_BFl7r0rc_z0hIYwSlHCI7-MMg_yzFKMZNj8e25olawT_ETkeezqA5rTj4qkUY5NxxMUi2BtikHg_c5-G29uienFKv_nNemimnK7J7lTrfnA8qnJcWoaQjxzNsRbWYkkvL6lGd7C2-yYEcmFY98/s1600/A%20centralized%20hub%20for%20meeting%20resources%20on%20the%20new%20Google%20Meet%20homepage%20-%206698.png"></a></div><p></p><h3>Getting started</h3><p></p><ul><li><b>Admins: </b>There is no admin control for this feature. The new homepage experience will be available to all users with access to Google Meet on the web.</li><li><b>End users: </b>The new homepage experience will be available to all Meet users on the web. Visit meet.google.com to get started.</li></ul><p></p><h3>Rollout pace</h3><p></p><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release domains:</a> Gradual rollout (up to 15 days for feature visibility) starting on July 21, 2026 </li><li><a href="https://support.google.com/a/answer/172177" target="_blank">Scheduled Release domains:</a> Gradual rollout (up to 15 days for feature visibility) starting on August 17, 2026</li></ul><p></p><h3>Availability</h3><p></p><ul><li>Available to all Google Workspace customers and Workspace Individual subscribers</li></ul><p></p><h3>Resources</h3><p></p><ul><li>Google Meet: <a href="http://meet.google.com/" target="_blank">Google Meet Homepage</a></li><li>Google Meet Help: <a href="https://support.google.com/meet/answer/17302648" target="_blank">Use the Google Meet homepage</a></li></ul><p></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Redesigned Google Classroom homepage with tailored views based on user’s role]]></title>
<description><![CDATA[Soon, Google Classroom will introduce a redesigned homepage globally across all editions to help teachers, students, and administrators easily find relevant content, resources, and tools tailored to their specific roles. The updated interface transforms the homepage into a dynamic, centralized hu...]]></description>
<link>https://tsecurity.de/de/3684691/it+betriebssysteme/web+tipps/redesigned+google+classroom+homepage+with+tailored+views+based+on+users+role/</link>
<pubDate>Tue, 21 Jul 2026 21:17:35 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Soon, Google Classroom will introduce a redesigned homepage globally across all editions to help teachers, students, and administrators easily find relevant content, resources, and tools tailored to their specific roles. The updated interface transforms the homepage into a dynamic, centralized hub that more easily surfaces existing information and tools that were previously located in different areas of Classroom. Users can still access classes in the side navigation panel and a dedicated classes module on the homepage.</p><p>The new experience, which will begin rolling out on <b>July 27, 2026</b>, is personalized based on a user's role and available features:</p><p></p><ul><li><b>For teachers,</b> a new dashboard gives actionable insights, highlights student classwork interactions, tracks assignment completion, and surfaces a feature spotlight to help discover instructional tools and resources.</li></ul><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4z5Jr1F8pgnppJhAO67dlTGF8_s396SdXAfVwirKZRyDRNWel62ZKjkHhyem1myWeDm_W1EZqy9W0aXp8ag-Mhi0gcyRpcH3D9uW_T7XbpdHUodupn25qr0jOknsQ54WM6Zq8THkBpvrmz5XCK_Ujn61JDcQlssIER4Dm_R-f49Tdzq4lp7e_OWijIZE/s2048/Redesigned%20Google%20Classroom%20homepage%20with%20tailored%20views%20based%20on%20user%E2%80%99s%20role%20-%205844%20-%201.png" imageanchor="1"><img border="0" data-original-height="2048" data-original-width="1684" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4z5Jr1F8pgnppJhAO67dlTGF8_s396SdXAfVwirKZRyDRNWel62ZKjkHhyem1myWeDm_W1EZqy9W0aXp8ag-Mhi0gcyRpcH3D9uW_T7XbpdHUodupn25qr0jOknsQ54WM6Zq8THkBpvrmz5XCK_Ujn61JDcQlssIER4Dm_R-f49Tdzq4lp7e_OWijIZE/s1600/Redesigned%20Google%20Classroom%20homepage%20with%20tailored%20views%20based%20on%20user%E2%80%99s%20role%20-%205844%20-%201.png"></a></div><div><br></div><ul><li><b>For students,</b> a dedicated ‘Enrolled’ view reminds learners of coursework that is due soon and helps them manage their deadlines.</li></ul><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2DeMpYAsE8KjpOol-GTGgKsRfuDX_lWVbVBUuwgqjhYFPNJmrjY2PvBeYFpoD41VPtPap2B1bdgG4jy6b8-ih2SpV-A7gj2X3ak4cHe-L0Ymq0PY8DwJraldsEDBEnwasX56dzjnj_dvOSsY1RXTNFx56JvmWnRGMCBiKQVimy9Kb4JwC9F4XJ8IZwUc/s2048/Redesigned%20Google%20Classroom%20homepage%20with%20tailored%20views%20based%20on%20user%E2%80%99s%20role%20-%205844%20-%202.png" imageanchor="1"><img border="0" data-original-height="1595" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2DeMpYAsE8KjpOol-GTGgKsRfuDX_lWVbVBUuwgqjhYFPNJmrjY2PvBeYFpoD41VPtPap2B1bdgG4jy6b8-ih2SpV-A7gj2X3ak4cHe-L0Ymq0PY8DwJraldsEDBEnwasX56dzjnj_dvOSsY1RXTNFx56JvmWnRGMCBiKQVimy9Kb4JwC9F4XJ8IZwUc/s1600/Redesigned%20Google%20Classroom%20homepage%20with%20tailored%20views%20based%20on%20user%E2%80%99s%20role%20-%205844%20-%202.png"></a></div><div><br></div><ul><li><b>For school leaders and IT administrators, </b>the homepage provides a centralized view to monitor high-level performance analytics, access shortcuts for backend administrative settings, and discover relevant tools to support educators and staff.</li></ul><p></p><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_5pTQCpASv_YNL4r0fWvhMZJLsDay8uBJUNu3lmdHX5hVnXd2xLZ9RxGk6jOeSuqdspW4iqCa-evGdJc3zVG6vF0mA_rE1DeOsMgzGGh3xZyh5YGM-mX3LcgT4xLdXjbuex8rkHkt-YtL5KdSxJ6O-tOUmhi3jJwhwjZ5AHe3pNeKnnGHkZ_pXyJXnEA/s2048/Redesigned%20Google%20Classroom%20homepage%20with%20tailored%20views%20based%20on%20user%E2%80%99s%20role%20-%205844%20-%203.png" imageanchor="1"><img border="0" data-original-height="2048" data-original-width="1528" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_5pTQCpASv_YNL4r0fWvhMZJLsDay8uBJUNu3lmdHX5hVnXd2xLZ9RxGk6jOeSuqdspW4iqCa-evGdJc3zVG6vF0mA_rE1DeOsMgzGGh3xZyh5YGM-mX3LcgT4xLdXjbuex8rkHkt-YtL5KdSxJ6O-tOUmhi3jJwhwjZ5AHe3pNeKnnGHkZ_pXyJXnEA/s1600/Redesigned%20Google%20Classroom%20homepage%20with%20tailored%20views%20based%20on%20user%E2%80%99s%20role%20-%205844%20-%203.png"></a></div><p><br></p><p>Users who have multiple roles (such as a teacher taking a professional development class) can easily change their view dashboard by clicking into another role (for example, Teaching, Enrolled, or Admin). When a user loads the homepage, it returns to the previous role view.</p><p>To help users control their view and focus on what matters most to them, all new homepage modules are collapsible.</p><p><br></p><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMrTE36s6kLkXAffV-F1O0SzB3un4nX0Pd_lFGBuCFl2Ag9dlPY53pOSeJQQMmdn2mWYpUpSxMIN4kGLgO7NDXkiOEQz0I0cT1Bv-taqWkp5I1pmmzAcB2nonL3qz5OVwCBRpYwvpl09UCiLbnbERcpmsUontJsPtvIL2kz2SfZQCTQNVIuw3rk3Dftp0/s1800/Redesigned%20Google%20Classroom%20homepage%20with%20tailored%20views%20based%20on%20user%E2%80%99s%20role%20-%205844%20-%204.png" imageanchor="1"><img border="0" data-original-height="1000" data-original-width="1800" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMrTE36s6kLkXAffV-F1O0SzB3un4nX0Pd_lFGBuCFl2Ag9dlPY53pOSeJQQMmdn2mWYpUpSxMIN4kGLgO7NDXkiOEQz0I0cT1Bv-taqWkp5I1pmmzAcB2nonL3qz5OVwCBRpYwvpl09UCiLbnbERcpmsUontJsPtvIL2kz2SfZQCTQNVIuw3rk3Dftp0/s1600/Redesigned%20Google%20Classroom%20homepage%20with%20tailored%20views%20based%20on%20user%E2%80%99s%20role%20-%205844%20-%204.png"></a></div><p><br></p><p><i>Please note that not all features and views will be available to all users. Eligibility is determined by the user’s role, feature access, account type, and settings.</i></p><h3>Getting started</h3><p></p><ul><li><b>Admins: </b>There is no admin control for the new Classroom homepage. Gemini and <a href="https://blog.google/innovation-and-ai/products/gemini-notebook/notebooklm-gemini-notebook/" target="_blank">Gemini Notebook</a> features will only appear if the user is in an OU with Gemini in Classroom, Gemini app, and/or Gemini Notebook enabled. Visit the Help Center to learn about managing access to <a href="http://support.google.com/a/answer/16291887" target="_blank">Gemini in Classroom</a>, <a href="https://knowledge.workspace.google.com/admin/gemini/turn-the-gemini-app-on-or-off" target="_blank">Gemini app</a>, <a href="https://knowledge.workspace.google.com/admin/users/access/turn-notebooklm-on-or-off-for-users" target="_blank">Gemini Notebook</a>, and the option to turn these services on or off for users in the Admin console.</li><li><b>End users: </b>There is no end user setting for the new Classroom homepage. Visit the Help Center to <a href="https://support.google.com/edu/classroom/answer/17231999?hl=en&amp;ref_topic=11987016&amp;sjid=11637609375205384704-NC" target="_blank">learn more about the new Classroom homepage</a>.</li></ul><p></p><h3>Rollout pace</h3><p></p><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Full rollout (1-3 days for visibility) starting July 27, 2026</li></ul><p></p><h3>Availability</h3><p></p><ul><li>Available to all Google Workspace customers, Workspace Individual subscribers, and users with personal Google accounts</li></ul><p></p><h3>Resources</h3><p></p><ul><li>Google Classroom Help: <a href="https://support.google.com/edu/classroom/answer/17231999?hl=en&amp;ref_topic=11987016&amp;sjid=11637609375205384704-NC" target="_blank">Navigate your Classroom Homepage</a></li><li>2026: What’s New in Google for Education: <a href="https://docs.google.com/presentation/d/1nJAZYHrAe-K0OOqZ3HA1-YrY6aNO5yOIV5MosOkaIOU/preview?slide=id.g3ef4e3366dc_69_1186#slide=id.g3ef4e3366dc_69_1186" target="_blank">Overview of Classroom Homepage</a></li></ul><p></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Import and create combo charts in Google Sheets]]></title>
<description><![CDATA[Google Sheets now offers enhanced support for combo charts, providing a more seamless experience when creating multi-series visualizations. Users can create new “Combo” chart types, enabling complex dataset visualization with different scales and metrics without requiring manual re-plotting. Thes...]]></description>
<link>https://tsecurity.de/de/3681962/it+betriebssysteme/web+tipps/import+and+create+combo+charts+in+google+sheets/</link>
<pubDate>Mon, 20 Jul 2026 20:42:08 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Google Sheets now offers enhanced support for combo charts, providing a more seamless experience when creating multi-series visualizations. Users can create new “Combo” chart types, enabling complex dataset visualization with different scales and metrics without requiring manual re-plotting. These include:<div><br><div><div><ul><li>Clustered Column - Line</li><li>Clustered Column - Line on Secondary Axis</li><li>Custom Combo</li></ul></div><div>Sheets combo chart support also comes with enhanced Microsoft Excel import compatibility. Previously, importing external files that contained combo charts with a secondary axis would result in the secondary axis being dropped. This update ensures that secondary axis configurations and combo chart types are preserved during file import.</div></div><div><br></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container"><tbody><tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiu9RcdUjK5Z9hkBQX7Z87mRMidxzVVT_4B8yEtSbj2qpg-mz1tIiSMR0qLMXRDLGSsyxhxxVL_TtOJ0qOCTefWK6pi7u3ZIX6aJRRdsSNlQLU-f-VWRCcXYVOEv-4Pe4ilBNRY9tTl3OdWg4DyPT3n42RoL_tzzQQDpo0Wn73kX_WoDg4rwpCE5JVXKDM/s2048/Import%20and%20create%20combo%20charts%20in%20Google%20Sheets%20-%206843.png" imageanchor="1"><img border="0" data-original-height="1279" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiu9RcdUjK5Z9hkBQX7Z87mRMidxzVVT_4B8yEtSbj2qpg-mz1tIiSMR0qLMXRDLGSsyxhxxVL_TtOJ0qOCTefWK6pi7u3ZIX6aJRRdsSNlQLU-f-VWRCcXYVOEv-4Pe4ilBNRY9tTl3OdWg4DyPT3n42RoL_tzzQQDpo0Wn73kX_WoDg4rwpCE5JVXKDM/s1600/Import%20and%20create%20combo%20charts%20in%20Google%20Sheets%20-%206843.png"></a></td></tr><tr><td class="tr-caption"><br>User creating a combo chart in Google Sheets</td></tr></tbody></table><h3>Getting started</h3><div><ul><li><b>Admins: </b>There is no admin control for this feature.</li><li><b>End users: </b>Visit the Help Center to <a href="https://support.google.com/docs/answer/63824" target="_blank">learn more about adding and editing a chart in Google Sheets.</a></li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release domains:</a> Gradual rollout (up to 15 days for feature visibility) starting on July 20, 2026 </li><li><a href="https://support.google.com/a/answer/172177" target="_blank">Scheduled Release domains:</a> Gradual rollout (up to 15 days for feature visibility) starting on August 4, 2026 </li></ul></div><h3>Availability</h3><div><ul><li>Available to all Google Workspace customers and users with personal Google accounts</li></ul></div><h3>Resources</h3><div><ul><li>Google Docs Editors Help: <a href="https://support.google.com/docs/answer/63824" target="_blank">Add &amp; edit a chart or graph</a></li></ul></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Google Workspace Weekly Recap - July 17, 2026]]></title>
<description><![CDATA[Google Credential Provider for Windows (GCPW) now supports FIDO2-compliant physical security keys as a second factor for authenticationGoogle Credential Provider for Windows (GCPW) has been updated to support FIDO2-compliant physical security keys as a second factor for authentication. This updat...]]></description>
<link>https://tsecurity.de/de/3677046/it+betriebssysteme/web+tipps/google+workspace+weekly+recap+-+july+17+2026/</link>
<pubDate>Fri, 17 Jul 2026 23:11:52 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h3>Google Credential Provider for Windows (GCPW) now supports FIDO2-compliant physical security keys as a second factor for authentication</h3><p>Google Credential Provider for Windows (GCPW) has been updated to support FIDO2-compliant physical security keys as a second factor for authentication. This update helps organizations improve their security posture by enabling administrators to enforce 2-Step Verification (2SV) using hardware security keys at the Windows login screen. | <a href="https://workspaceupdates.googleblog.com/2026/07/google-credential-provider-for-windows-now-supports-FIDO2-compliant-physical-security-keys-as-a-second-factor-for-authentication.html" target="_blank">Learn more</a>.</p><h3>Improvement to in-room problem reporting for Google Meet hardware</h3><p>Maintaining an enterprise-grade video conferencing environment requires visibility into the health of its devices. We're introducing new ways to see Google Meet hardware user-reported feedback directly in the Admin console. | <a href="https://workspaceupdates.googleblog.com/2026/07/improvement-to-in-room-problem-reporting-for-Google-Meet-hardware.html" target="_blank">Learn more</a>.</p><h3>New refinement capabilities allow custom editing with Help me write in Gmail</h3><p>Users can now edit and revise their email drafts in Gmail via the prompt bar, using custom refine instructions in Help me write. Previously the refines were limited to preset options like Polish, Formalize, and Shorten. | <a href="https://workspaceupdates.googleblog.com/2026/07/new-refinement-capabilities-allow-custom-editing-with-Help-me-write-in-Gmail.html" target="_blank">Learn more</a>.</p><h3>Now available: group conversations with external collaborators in Google Chat</h3><p>For many teams, it’s essential to be able to work in real-time with partners from outside your organization. We’re improving external collaboration in Google Chat by making it possible to create group conversations that include external users. | <a href="https://workspaceupdates.googleblog.com/2026/07/now-available-group-conversations-with-external-collaborators-in-Google-Chat.html" target="_blank">Learn more</a>.</p><h3>NotebookLM is now Gemini Notebook</h3><p>We’re renaming NotebookLM to Gemini Notebook. While it remains a standalone product focused on being your premier research tool, the new name reflects how it will evolve to do more across the Google ecosystem. | <a href="https://workspaceupdates.googleblog.com/2026/07/notebooklm-now-gemini-notebook.html" target="_blank">Learn more</a>.</p><h3>Easily control the emotions and pacing of AI avatars and AI voiceovers in Google Vids</h3><p>Users can now easily steer voiceover and avatar speaking in Google Vids by typing content within brackets like “[excitedly]”. | <a href="https://workspaceupdates.googleblog.com/2026/06/easily-steer-ai-voiceover-and-avatar-speaking-with-emotions-pacing-and-sound-effects.html" target="_blank">Learn more</a>.</p><h3>Expanded language support for Gemini in Google Docs</h3><p>We are now expanding support for these features to 11 more languages, including Mandarin, Dutch, Malay, Hebrew, Polish, Turkish, Czech, Indonesian, Swedish, Danish, and Norwegian. These new additions join our previously supported languages: English, Spanish, Portuguese, Japanese, French, Korean, German, and Italian. | <a href="https://workspaceupdates.googleblog.com/2026/07/expanded-language-support-for-gemini-in-Google-Docs.html" target="_blank">Learn more</a>.</p><h3>Generate higher quality AI video clips and edit any video with Gemini Omni in Vids</h3><p>Users now have access to Gemini Omni directly within Google Vids. Omni provides higher quality video generation with significant improvements over previous models. Additionally, Omni’s world understanding unlocks simple video edits so you can ask Omni to tweak the video you have to get the video you need. | <a href="https://workspaceupdates.googleblog.com/2026/07/generate-higher-quality-ai-video-clips-and-edit-any-video-with-Gemini-Omni-in-Vids.html" target="_blank">Learn more</a>.</p><h3>Cast yourself in AI video clips using your personal avatar with Gemini Omni in Vids</h3><p>Users now have access to Gemini Omni directly within Google Vids. With Gemini Omni, you can create videos using your personal avatar to scale your presence without the studio time. Use a secure verification process to capture your likeness and then select it as a character in Omni generations within Vids. | <a href="https://workspaceupdates.googleblog.com/2026/07/cast-yourself-in-ai-video-clips-using-your-personal-avatar-with-Gemini-Omni-in-Vids.html" target="_blank">Learn more</a>.</p><h3>New Google Meet 'Take notes for me' settings for admins and end users</h3><p>To help users remember to capture notes for meetings when it’s most valuable, we’re updating the admin and end user settings that let them pre-configure AI note-taking for Google Meet. | <a href="https://workspaceupdates.googleblog.com/2026/07/new-google-meet-take-notes-for-me-settings-for-admins-and-end-users.html" target="_blank">Learn more</a>.</p><p><span>The announcements above were published on the Workspace Updates blog over the last week. Please refer to the original blog posts for complete details.</span></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Cast yourself in AI video clips using your personal avatar with Gemini Omni in Vids]]></title>
<description><![CDATA[Users now have access to Gemini Omni directly within Google Vids. With Gemini Omni, you can create videos using your personal avatar to scale your presence without the studio time. Use a secure verification process to capture your likeness and then select it as a character in Omni generations wit...]]></description>
<link>https://tsecurity.de/de/3674708/it+betriebssysteme/web+tipps/cast+yourself+in+ai+video+clips+using+your+personal+avatar+with+gemini+omni+in+vids/</link>
<pubDate>Thu, 16 Jul 2026 23:56:47 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Users now have access to Gemini Omni directly within <a href="https://docs.google.com/videos/create?usp=blog" target="_blank">Google Vids</a>. With Gemini Omni, you can create videos using your personal avatar to scale your presence without the studio time. Use a secure verification process to capture your likeness and then select it as a character in Omni generations within Vids.</p><p><br></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container"><tbody><tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgeIquZqGygFpCGeo8dOUArA4Hb2K8-9KiKRrSrKiNmb8cMT2Th4VemOsnJSHvvE72c_PoPoVZj-89hlds8sfiVa8759ZYz5bEYgjngBMha0u66Y8d4tkwnjlKvG19Ppu1d0u0J0QB2aDMs5w3WJZSgPg8UylT5_30RU1ASLwvKXVmGlt6v9exwLDfq9c/s1920/Cast%20yourself%20in%20AI%20video%20clips%20using%20your%20personal%20avatar%20with%20Gemini%20Omni%20in%20Vids%20-%206736.png"><img border="0" data-original-height="1200" data-original-width="1920" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgeIquZqGygFpCGeo8dOUArA4Hb2K8-9KiKRrSrKiNmb8cMT2Th4VemOsnJSHvvE72c_PoPoVZj-89hlds8sfiVa8759ZYz5bEYgjngBMha0u66Y8d4tkwnjlKvG19Ppu1d0u0J0QB2aDMs5w3WJZSgPg8UylT5_30RU1ASLwvKXVmGlt6v9exwLDfq9c/s1600/Cast%20yourself%20in%20AI%20video%20clips%20using%20your%20personal%20avatar%20with%20Gemini%20Omni%20in%20Vids%20-%206736.png"></a></td></tr><tr><td class="tr-caption">Personal avatar user experience<br><br></td></tr></tbody></table><p></p><ul><li><b>Secure verification:</b> Verify and manage your personal avatar directly within your <a href="https://myaccount.google.com/video-verification" target="_blank">Google Account</a>.</li><li><b>Seamless integration: </b>Easily add your personal avatar from the selector in Vids.</li><li><b>Administrative oversight: </b>Admins can manage or disable this feature through the Admin console.</li></ul><p></p><h4>A note on language and region availability</h4><p>At launch, personal avatars are available in English only for users 18 years and older. They’re not available in the European Economic Area, Switzerland, or the United Kingdom. Learn more about personal avatar <a href="https://support.google.com/accounts/answer/17100665?visit_id=639190374851512632-1124942400&amp;p=msa_privacy&amp;rd=1#privacy" target="_blank">privacy settings</a>.</p><h3>Getting started</h3><p></p><ul><li><b>Admins: </b>This feature will be ON by default and can be disabled or enabled at the domain level. Visit the Help Center to <a href="https://knowledge.workspace.google.com/admin/users/access/turn-vids-on-or-off-for-users#manage_personal_avatars_in_vids" target="_blank">learn more about managing personal avatars in Vids</a>.</li><li><b>End users: </b>Visit the Help Center to <a href="https://support.google.com/docs/answer/16970930" target="_blank">learn more about using personal avatars in Vids</a>.</li></ul><p></p><h3>Rollout pace</h3><p></p><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release domains:</a> Gradual rollout (up to 15 days for feature visibility) starting on July 16, 2026 </li><li><a href="https://support.google.com/a/answer/172177" target="_blank">Scheduled Release domains:</a> Gradual rollout (up to 15 days for feature visibility) starting on August 5, 2026 </li></ul><p></p><h3>Availability</h3><p></p><ul><li><b>Business: </b>Business Starter, Standard, and Plus</li><li><b>Enterprise: </b>Enterprise Starter, Standard, and Plus</li><li><b>Education: </b>Education Plus</li><li><b>Consumer: </b>Google AI Pro and Ultra</li><li><b>Other Editions:</b> Enterprise Essentials and Enterprise Essentials Plus; Nonprofits</li><li><b>Education Add-ons: </b>Google AI Pro for Education; Teaching and Learning</li><li><b>Other Add-ons: </b>AI Expanded Access*</li></ul><p></p><p><i>*Users with AI Expanded Access add-on licenses have <a href="https://support.google.com/a/answer/14700766" target="_blank">higher limits</a> on usage of Omni in Vids.</i></p><h3>Resources</h3><p></p><ul><li>Google Docs Editors Help: <a href="https://support.google.com/docs/answer/16970930" target="_blank">Create, use &amp; manage your personal avatar with Gemini in Google Vids</a></li><li>Google Docs Editors Help: <a href="https://support.google.com/docs/answer/16143507" target="_blank">Use Omni in Google Vids</a></li></ul><p></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[New Google Meet 'Take notes for me' settings for admins and end users]]></title>
<description><![CDATA[To help users remember to capture notes for meetings when it’s most valuable, we’re updating the admin and end user settings that let them pre-configure AI note-taking for Google Meet.Admin settingsPreviously, admins could only enable or disable automatic note-taking for all meetings. Today, we’r...]]></description>
<link>https://tsecurity.de/de/3674707/it+betriebssysteme/web+tipps/new+google+meet+take+notes+for+me+settings+for+admins+and+end+users/</link>
<pubDate>Thu, 16 Jul 2026 23:56:46 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>To help users remember to capture notes for meetings when it’s most valuable, we’re updating the admin and end user settings that let them pre-configure AI note-taking for Google Meet.</p><h4>Admin settings</h4><p>Previously, admins could only enable or disable automatic note-taking for all meetings. Today, we’re starting to roll out a third option, which will allow admins to enable automatic note-taking only for meetings with three or more people.</p><p>Customers on <b>Business Standard and Business Plus plans</b> will soon see this setting turned <b>ON by default</b>; the setting will be <b>OFF by default</b> for customers on <b>Enterprise Standard, Enterprise Plus, and Frontline Plus plans, as well as those with the Google AI Pro for Education add-on.</b> There will be no impact to the end user experience on any plan before September 21, 2026. If you want to change your settings, you can do so in the Admin console.</p><p><b>If you currently participate in the <a href="https://workspaceupdates.googleblog.com/2026/02/new-take-notes-for-me-configuration-in-admin-console-for-select-gemini-alpha-customers.html" target="_blank">Gemini Alpha program</a>, and previously tested this setting, it may already be ON.</b> Please review the current state of the settings for your organization in the Admin console before September 21, 2026.</p><p><br></p><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEic_OSbGR0fwBG4msocDfSSguGINPugjcREgLF4SHipY0cUB__xjm_iRrs7wGhKCVavLJnc5OTvf-iasWbHSfxD4o_1QItnzRBw0qF0sspBY_cOXvT3tv2uZsAg5I5LbTw0QFpDZzTCv4N2U4uQSzT88WWPi4QT7b5__UYYsqc6ayY1rGZhS_fRpP2h9WE/s1836/New%20Google%20Meet%20'Take%20notes%20for%20me'%20settings%20for%20admins%20and%20end%20users%20-%206508.png"><img border="0" data-original-height="948" data-original-width="1836" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEic_OSbGR0fwBG4msocDfSSguGINPugjcREgLF4SHipY0cUB__xjm_iRrs7wGhKCVavLJnc5OTvf-iasWbHSfxD4o_1QItnzRBw0qF0sspBY_cOXvT3tv2uZsAg5I5LbTw0QFpDZzTCv4N2U4uQSzT88WWPi4QT7b5__UYYsqc6ayY1rGZhS_fRpP2h9WE/s1600/New%20Google%20Meet%20'Take%20notes%20for%20me'%20settings%20for%20admins%20and%20end%20users%20-%206508.png"></a></div><h4>End user settings</h4><p>We’re also introducing a way for end users to enable note-taking only for meetings with three or more participants. Once the “For all meetings I host with 3+ guests” option rolls out, users should revisit their settings to confirm they’re configured as desired. This option will become available no sooner than September 21; stay tuned to the Workspace Updates blog to be notified when that rollout starts.</p><p><br></p><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9v9CuxrTcrnH_UetM2jS-kaJbExG2mXq9SKmhTb7JFEk1bKjkFnf5602JQkscPujszT8qpqOacJaqrNwKyq66Q76ckjHeXPSB46Qwzso2lsNtg2kcfoyEYS0FxuIPoZyeVe3rEhSiKHqlzTqf4nLw_XCHDKw1iOS0nsJ9zKpoAvF7qSGiQfH60fKsVg4/s2048/New%20Google%20Meet%20'Take%20notes%20for%20me'%20settings%20for%20admins%20and%20end%20users%20-%206508%20-%201.png"><img border="0" data-original-height="1420" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9v9CuxrTcrnH_UetM2jS-kaJbExG2mXq9SKmhTb7JFEk1bKjkFnf5602JQkscPujszT8qpqOacJaqrNwKyq66Q76ckjHeXPSB46Qwzso2lsNtg2kcfoyEYS0FxuIPoZyeVe3rEhSiKHqlzTqf4nLw_XCHDKw1iOS0nsJ9zKpoAvF7qSGiQfH60fKsVg4/s1600/New%20Google%20Meet%20'Take%20notes%20for%20me'%20settings%20for%20admins%20and%20end%20users%20-%206508%20-%201.png"></a></div><h3>Getting started</h3><p></p><ul><li><b>Admins for Business Standard and Business Plus organizations: </b>This new setting is ON by default. If you wish to change your settings, you should do so before September 21, 2026, to avoid any impact for end users. Visit the Help Center for <a href="https://knowledge.workspace.google.com/admin/meet/let-google-meet-ai-take-notes-for-my-users?visit_id=639183605324050647-2510769763&amp;rd=1" target="_blank">more information on how to adjust these settings</a>.</li><li><b>Admins for Enterprise Standard, Enterprise Plus, Frontline Plus, and Google AI Pro for Education organizations:</b> This new setting is OFF by default. You can adjust this setting in the Admin console once it appears, but it will not affect the end user experience before September 21, 2026. Visit the Help Center for <a href="https://knowledge.workspace.google.com/admin/meet/let-google-meet-ai-take-notes-for-my-users?visit_id=639183605324050647-2510769763&amp;rd=1" target="_blank">more information on how to adjust these settings</a>.</li><li><b>Admins for organizations participating in Gemini Alpha program:</b> Your settings may be impacted by previous configurations. Please review your settings before September 21, 2026, to ensure they’re configured correctly.</li><li><b>End users on all plans: </b>The default set by admins will go into effect for end users no sooner than September 21, 2026. Users can override this default in the Meet user settings after that date. Visit the Help Center to <a href="https://support.google.com/meet/answer/16909639" target="_blank">learn more about Meeting settings for “take notes for me”</a>.</li></ul><p></p><h3>Rollout pace</h3><h4>Admin setting</h4><p></p><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Rolling out now, with expected completion by August 3, 2026</li></ul><p></p><h4>End user setting</h4><p></p><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Gradual rollout (up to 15 days for feature visibility) starting no sooner than September 21, 2026*</li></ul><p></p><p>*We’ll post an update on the Workspace Updates blog when the end user setting rollout begins.</p><h3>Availability</h3><p></p><ul><li><b>Business:</b> Business Standard and Plus</li><li><b>Enterprise: </b>Enterprise Standard and Plus</li><li><b>Other Editions:</b> Frontline Plus</li><li><b>Education Add-ons:</b> Google AI Pro for Education</li></ul><p></p><h3>Resources</h3><p></p><ul><li>Google Meet Help: <a href="https://support.google.com/meet/answer/14754931" target="_blank">Take notes for me in Google Meet</a></li><li>Google Workspace Updates  Blog: <a href="https://workspaceupdates.googleblog.com/2026/02/new-user-controls-for-take-notes-for-me.html" target="_blank">New user controls for Take notes for me</a></li></ul><p></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Generate higher quality AI video clips and edit any video with Gemini Omni in Vids]]></title>
<description><![CDATA[Users now have access to Gemini Omni directly within Google Vids. Omni provides higher quality video generation with significant improvements over previous models. Additionally, Omni’s world understanding unlocks simple video edits so you can ask Omni to tweak the video you have to get the video ...]]></description>
<link>https://tsecurity.de/de/3674570/it+betriebssysteme/web+tipps/generate+higher+quality+ai+video+clips+and+edit+any+video+with+gemini+omni+in+vids/</link>
<pubDate>Thu, 16 Jul 2026 22:08:28 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Users now have access to Gemini Omni directly within <a href="https://docs.google.com/videos/create?usp=blog" target="_blank">Google Vids</a>. Omni provides higher quality video generation with significant improvements over previous models. Additionally, Omni’s world understanding unlocks simple video edits so you can ask Omni to tweak the video you have to get the video you need.</p><p><br></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container"><tbody><tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYR7JnqBXKK14fpEIXgbY3_L4HKT9gDaPhBGyy-5h7Ye7kCQ-ph6OZ10JIFUn98a_YSXh12IinIKMIS_iaEv31z3o5463pooO2jUMaKkgkHv4KiD_s2YYMCJBAU6XDIG5iO4ZkLZ1yLSvzJO3QvYfLXB523dxLbe7QbcEtZtza3MdiR1dd2ViPqffLO7g/s1660/Generate%20higher%20quality%20AI%20video%20clips%20and%20edit%20any%20video%20with%20Gemini%20Omni%20in%20Vids%20-%207022.png" imageanchor="1"><img border="0" data-original-height="1660" data-original-width="1254" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYR7JnqBXKK14fpEIXgbY3_L4HKT9gDaPhBGyy-5h7Ye7kCQ-ph6OZ10JIFUn98a_YSXh12IinIKMIS_iaEv31z3o5463pooO2jUMaKkgkHv4KiD_s2YYMCJBAU6XDIG5iO4ZkLZ1yLSvzJO3QvYfLXB523dxLbe7QbcEtZtza3MdiR1dd2ViPqffLO7g/s1600/Generate%20higher%20quality%20AI%20video%20clips%20and%20edit%20any%20video%20with%20Gemini%20Omni%20in%20Vids%20-%207022.png"></a></td></tr><tr><td class="tr-caption">Omni in Vids user experience<br><br></td></tr></tbody></table><p></p><ul><li><b>Generate clips with higher quality:</b> Generate higher quality videos with improved text rendering, physics, and realism using Google’s latest Omni Flash model.</li><li><b>Edit videos by typing changes:</b> For example, fix the color-grading, restyle the visuals in anime, or remove that New York siren in the background with a simple text instruction in Vids.</li></ul><p></p><h4>A note on language and region availability</h4><p>At launch, editing non-AI videos with Omni is not available in the European Economic Area, Switzerland, United Kingdom, Texas, or Illinois.</p><h3>Getting started</h3><p></p><ul><li><b>Admins:</b> This feature does not have an admin control.</li><li><b>End users:</b> Visit the Help Center to <a href="https://support.google.com/docs/answer/16143507" target="_blank">learn more about using Omni in Vids</a>.</li></ul><p></p><h3>Rollout pace</h3><p></p><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release domains:</a> Gradual rollout (up to 15 days for feature visibility) starting on July 16, 2026 </li><li><a href="https://support.google.com/a/answer/172177" target="_blank">Scheduled Release domains:</a> Gradual rollout (up to 15 days for feature visibility) starting on August 5, 2026 </li></ul><p></p><h3>Availability</h3><p></p><ul><li><b>Business:</b> Business Starter, Standard, and Plus</li><li><b>Enterprise: </b>Enterprise Starter, Standard, and Plus</li><li><b>Education: </b>Education Plus</li><li><b>Consumer: </b>Google AI Pro and Ultra</li><li><b>Other Editions: </b>Enterprise Essentials and Enterprise Essentials Plus; Nonprofits</li><li><b>Education Add-ons: </b>Google AI Pro for Education; Teaching and Learning</li><li><b>Other Add-ons: </b>AI Expanded Access*</li></ul><p></p><p>*Users with AI Expanded Access add-on licenses have <a href="https://support.google.com/a/answer/14700766" target="_blank">higher limits</a> on usage of Omni in Vids.</p><h3>Resources</h3><p></p><ul><li>Google Vids Editors Help: <a href="https://support.google.com/docs/answer/16143507" target="_blank">Use AI to generate video clips</a></li></ul><p></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[NotebookLM is now Gemini Notebook]]></title>
<description><![CDATA[We’re renaming NotebookLM to Gemini Notebook. While it remains a standalone product focused on being your premier research tool, the new name reflects how it will evolve to do more across the Google ecosystem.Users will see the new name and updated logo roll out across different interfaces over t...]]></description>
<link>https://tsecurity.de/de/3674301/it+betriebssysteme/web+tipps/notebooklm+is+now+gemini+notebook/</link>
<pubDate>Thu, 16 Jul 2026 19:38:53 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[We’re <a href="https://blog.google/innovation-and-ai/products/gemini-notebook/notebooklm-gemini-notebook" target="_blank">renaming</a> NotebookLM to <b><a href="https://notebooklm.google/" target="_blank">Gemini Notebook</a></b>. While it remains a standalone product focused on being your premier research tool, the new name reflects how it will evolve to do more across the Google ecosystem.<div><br></div><div>Users will see the new name and updated logo roll out across different interfaces over the next several weeks.</div><div><br></div><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLHit70rqX_IG99XEPEv5lMukGpuKBeXve-q-Hzf_deriea7sqRRNrZoOiWGzNKtp2UPVEljSn7fDZuCU0gVPIv861qgEpdfwnqzZKyk0vA-Na4BV29Rfmx3kEla7DM75ix5YuDhPAFjmAvlYFmr7cp2MeXpkx3uaQnkdFCl3zqxrQqMMhyphenhyphenElg7cjLb2VB/s8614/gemini-notebook__product-icon-lockup__full-color.jpg"><img alt="An image of the new Gemini Notebook logo" border="0" data-original-height="1024" data-original-width="8614" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLHit70rqX_IG99XEPEv5lMukGpuKBeXve-q-Hzf_deriea7sqRRNrZoOiWGzNKtp2UPVEljSn7fDZuCU0gVPIv861qgEpdfwnqzZKyk0vA-Na4BV29Rfmx3kEla7DM75ix5YuDhPAFjmAvlYFmr7cp2MeXpkx3uaQnkdFCl3zqxrQqMMhyphenhyphenElg7cjLb2VB/s1600/gemini-notebook__product-icon-lockup__full-color.jpg"></a></div><div><i><span>NotebookLM is now Gemini Notebook</span></i></div><h3>Getting started</h3><div><ul><li><b>Admins:</b> There is no action required from admins. Automatic redirects will ensure existing shared notebooks and user links continue to work.</li><li><b>End users:</b> Users will see the updated name and logo roll out across different interfaces over the next several weeks. Mobile users may need to update their app.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Extended rollout (potentially longer than 15 days for feature visibility) starting on July 16, 2026</li></ul></div><h3>Impact</h3><div><ul><li>Impacts all Google Workspace customers, Workspace Individual subscribers, and users with personal Google accounts with access to NotebookLM</li></ul></div><h3>Resources</h3><div><ul><li>Keyword: <a href="https://blog.google/innovation-and-ai/products/gemini-notebook/notebooklm-gemini-notebook" target="_blank">NotebookLM is now Gemini Notebook</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Easily control the emotions and pacing of AI avatars and AI voiceovers in Google Vids]]></title>
<description><![CDATA[Users can now easily steer voiceover and avatar speaking in Google Vids by typing content within brackets like “[excitedly]”.When typing open brackets (“[“) Vids will offer a menu of steering tags to customize pacing, emotional delivery, and sound effects. These cues empower you to guide the voic...]]></description>
<link>https://tsecurity.de/de/3674300/it+betriebssysteme/web+tipps/easily+control+the+emotions+and+pacing+of+ai+avatars+and+ai+voiceovers+in+google+vids/</link>
<pubDate>Thu, 16 Jul 2026 19:38:52 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Users can now easily steer voiceover and avatar speaking in <a href="https://docs.google.com/videos/create?usp=blog" target="_blank">Google Vids</a> by typing content within brackets like “[excitedly]”.<div><br></div><div>When typing open brackets (“[“) Vids will offer a menu of steering tags to customize pacing, emotional delivery, and sound effects. These cues empower you to guide the voiceover or avatar’s response to specific moments within your script.</div><div><br></div><div>If you’re short on time, just click "Apply audio tags" for Vids to automatically populate your script with tags based on the content.</div><div><br></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container"><tbody><tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgb6ZoZK5hDFubeT59V5mHN_0XXCo5-EabpxgzaIDN3mYufd8k9jTVrlE3KkaXWnhTcWukuqdn9vVzB1P6uhQa0Gb4wvOG5AiMHLOwgAEHU5tTDgLz6T9KEkLoqTxuEV8wtnlfJA6PibYXiEVlLTkzaoN9BDajfJ6LW9NQJR6igJz3uKFPE-Q-F-8hUKjQ/s2048/Easily%20steer%20AI%20voiceover%20and%20avatar%20speaking%20with%20emotions,%20pacing,%20and%20sound%20effects%20-%206835.gif"><img border="0" data-original-height="2048" data-original-width="799" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgb6ZoZK5hDFubeT59V5mHN_0XXCo5-EabpxgzaIDN3mYufd8k9jTVrlE3KkaXWnhTcWukuqdn9vVzB1P6uhQa0Gb4wvOG5AiMHLOwgAEHU5tTDgLz6T9KEkLoqTxuEV8wtnlfJA6PibYXiEVlLTkzaoN9BDajfJ6LW9NQJR6igJz3uKFPE-Q-F-8hUKjQ/w250-h640/Easily%20steer%20AI%20voiceover%20and%20avatar%20speaking%20with%20emotions,%20pacing,%20and%20sound%20effects%20-%206835.gif" width="250"></a></td></tr><tr><td class="tr-caption"><i><br>Steering suggestions in Vids scripts</i></td></tr></tbody></table><h3>Getting started</h3><div><ul><li><b>Admins:</b> There is no admin control for this feature.</li><li><b>End users:</b> Visit the Help Center to learn more about <a href="https://support.google.com/docs/answer/15070345?hl=en" target="_blank">creating voiceovers with AI</a> and <a href="https://support.google.com/docs/answer/16334946" target="_blank">using AI avatars</a> in Google Vids.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Full rollout (1–3 days for feature visibility) started on July 15, 2026</li></ul></div><h3>Availability</h3><div><ul><li><b>Business:</b> Business Starter, Standard, and Plus</li><li><b>Enterprise:</b> Enterprise Starter, Standard, and Plus</li><li><b>Education: </b>Education Plus</li><li><b>Consumer:</b> All users with personal Google accounts, including Google AI Pro and Ultra</li><li><b>Other Editions:</b> Enterprise Essentials, and Enterprise Essentials Plus; Nonprofits; Individual</li><li><b>Education Add-ons:</b> Teaching and Learning; Google AI Pro for Education</li><li><b>Other Add-ons: </b>AI Expanded Access*</li></ul></div><div><i>*Users with AI Expanded Access add-on licenses have <a href="https://support.google.com/a/answer/14700766" target="_blank">higher limits</a> on usage of AI features in Vids. </i></div><h3>Resources</h3><div><ul><li>Google Docs Editors Help: <a href="https://support.google.com/docs/answer/16334946" target="_blank">Use AI avatars in Google Vids</a></li><li>Google Docs Editors Help: <a href="https://support.google.com/docs/answer/15070345" target="_blank">Create voiceovers with AI in Google Vids</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Expanded language support for Gemini in Google Docs]]></title>
<description><![CDATA[Earlier this year, we introduced new Gemini in Google Docs capabilities that help you move from a blank page to a finished document faster than ever.We are now expanding support for these features to 11 more languages, including Mandarin, Dutch, Malay, Hebrew, Polish, Turkish, Czech, Indonesian, ...]]></description>
<link>https://tsecurity.de/de/3674299/it+betriebssysteme/web+tipps/expanded+language+support+for+gemini+in+google+docs/</link>
<pubDate>Thu, 16 Jul 2026 19:38:51 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Earlier this year, <a href="https://workspaceupdates.googleblog.com/2026/04/new-gemini-capabilities-in-google-docs-help-you-go-from-blank-page-to-brilliance.html" target="_blank">we introduced</a> new Gemini in Google Docs capabilities that help you move from a blank page to a finished document faster than ever.</p><p>We are now expanding support for these features to 11 more languages, including Mandarin, Dutch, Malay, Hebrew, Polish, Turkish, Czech, Indonesian, Swedish, Danish, and Norwegian. These new additions join our previously supported languages: English, Spanish, Portuguese, Japanese, French, Korean, German, and Italian.</p><h4>Reimagined Gemini experience in Docs</h4><p>With this update, Google Docs offers a centralized place to generate, write, and refine your documents with Gemini. Powered by <a href="https://workspace.google.com/blog/product-announcements/introducing-workspace-intelligence" target="_blank">Workspace Intelligence</a>, Gemini leverages data across Drive, Gmail, Chat, and the web to provide personalized, context-aware assistance.</p><p></p><ul><li>The upgraded <b>Help me create</b> experience enables you to generate relevant, fully formatted first drafts that synthesize information from your files, emails, chat, and the web.</li><li>With <b>Help me write</b>, simply prompt Gemini from the bottom bar or side panel to make edits across your doc, or select text to focus Gemini’s attention. Gemini’s suggested edits are only visible to you until you approve them.</li><li><b>Match writing style</b> helps maintain a consistent tone and style across your entire doc, no matter how many people are working on it.</li><li>With <b>Match doc format</b>, Gemini can mirror a source document to generate content that adheres to the original's formatting (e.g., fonts and colors) and structural elements (e.g., headings and table columns).</li></ul><p></p><p>To generate new docs from scratch, open a new doc, enter your prompt, and click submit. To edit existing docs, simply hover over the spark near the bottom of your doc and type a prompt in the bottom bar.</p><p><br></p><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQuqyJ5HJ2N_jJGRs5gveCwyqfqPs8I4ZoFquOOTlWtfJiommNtp8M77HxY8YjoYaKNfQBx2K8ioupbYe87AuI8hjmtfyIoFkQ7f_UG7QDgb-Xhoql3OcG9BczGlQ8fZJRCTOUbXc_Ahyx-d5TzVIYCaWZSKiQfG28LhD_NsJhCHOc-wuAy7BJFeDTgAE/s1200/Expanded%20language%20support%20for%20Gemini%20in%20Google%20Docs%20-%207142.gif"><img border="0" data-original-height="797" data-original-width="1200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQuqyJ5HJ2N_jJGRs5gveCwyqfqPs8I4ZoFquOOTlWtfJiommNtp8M77HxY8YjoYaKNfQBx2K8ioupbYe87AuI8hjmtfyIoFkQ7f_UG7QDgb-Xhoql3OcG9BczGlQ8fZJRCTOUbXc_Ahyx-d5TzVIYCaWZSKiQfG28LhD_NsJhCHOc-wuAy7BJFeDTgAE/s1600/Expanded%20language%20support%20for%20Gemini%20in%20Google%20Docs%20-%207142.gif"></a></div><h3>Getting started</h3><p></p><ul><li><b>Admins: </b>These features are available by default if <a href="https://knowledge.workspace.google.com/admin/gemini/manage-access-to-gemini-features-in-workspace-services" target="_blank">Gemini for Workspace in Drive is enabled</a>. Note that enabling <a href="https://knowledge.workspace.google.com/p/wsi" target="_blank">Workspace Intelligence</a> expands the range of supported use cases.</li><li><b>End users: </b>You must have <a href="https://support.google.com/mail/answer/15604322?sjid=17363988672514456782-NA#gw&amp;zippy=%2Csmart-features-in-google-workspace%2Cwhat-are-googles-legal-bases-of-processing-for-users-in-the-european-economic-area-united-kingdom-or-switzerland%2Chow-long-is-your-workspace-content-activity-used-to-provide-smart-features-and-to-improve-these-features" target="_blank">Workspace smart features</a> enabled to use these features. Visit the Help Center to <a href="https://support.google.com/docs/answer/15541879" target="_blank">learn more about creating personalized documents with Gemini in Google Docs</a>.</li></ul><h3>Rollout pace</h3><p></p><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release domains:</a> Gradual rollout (up to 15 days for feature visibility) starting on July 15, 2026 </li><li><a href="https://support.google.com/a/answer/172177" target="_blank">Scheduled Release domains:</a> Gradual rollout (up to 15 days for feature visibility) starting on August 1, 2026 </li></ul><p></p><h3>Availability</h3><p></p><ul><li><b>Business: </b>Business Standard and Plus</li><li><b>Enterprise: </b>Enterprise Standard and Plus</li><li><b>Education: </b>Education Plus</li><li><b>Consumer: </b>Google AI Pro and Ultra</li><li><b>Education Add-ons:</b> Teaching and Learning</li><li><b>Other Add-ons: </b>AI Expanded Access*; Google AI Pro for Education*</li></ul><p></p><p>*Users with AI Expanded Access and Google AI Pro for Education add-on licenses will have <a href="https://support.google.com/a?p=limits" target="_blank">higher limits on usage</a> of Match writing style and Match document format tools.</p><h3>Resources</h3><p></p><ul><li>Google Docs Editors Help: <a href="https://support.google.com/docs/answer/13447609" target="_blank">Write &amp; edit with Gemini in Docs</a></li><li>Google Docs Editors Help: <a href="https://support.google.com/docs/answer/14615114?hl=en" target="_blank">Learn how Gemini in Gmail, Calendar, Chat, Docs, Drive, Sheets, Slides, Meet &amp; Vids protects your data</a></li></ul><p></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Now available: group conversations with external collaborators in Google Chat]]></title>
<description><![CDATA[For many teams, it’s essential to be able to work in real-time with partners from outside your organization. We’re improving external collaboration in Google Chat by making it possible to create group conversations that include external users.Previously, teams using Google Chat could only create ...]]></description>
<link>https://tsecurity.de/de/3671492/it+betriebssysteme/web+tipps/now+available+group+conversations+with+external+collaborators+in+google+chat/</link>
<pubDate>Wed, 15 Jul 2026 19:28:02 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>For many teams, it’s essential to be able to work in real-time with partners from outside your organization. We’re improving external collaboration in Google Chat by making it possible to create group conversations that include external users.</p><p>Previously, teams using Google Chat could only create 1:1 conversations with external users, or create a space in Chat with external access enabled.</p><p>With this update, it’s now possible to create group conversations with multiple external users, reducing friction and streamlining external collaboration. No additional configuration is required, and access for external users is enabled once they accept an invitation through an email notification. Group conversations with external members are labeled with a visible badge to help ensure that users are aware of the context for all conversations in Chat.</p><p><br></p><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu6NMFsK1y_ILcyeP2R1BozsLmoPhCZ9zPNIBJ2kvU8W7p_D9Umv5EAAvY8VVZK_EOtEOCbIbGJ-Wv4xBgRYQ-xMATEAkoZqR-1HzUILp-LLmZ_rHbwPSqSRY_F-YaQQ0xsUeZ2wlEiq4R9DZSQm1f0XSJqiQK-X9_PdtU5M40MNvFer3-klFKLlOOW0c/s1600/Now%20available%20group%20conversations%20with%20external%20collaborators%20in%20Google%20Chat%20-%206854.gif"><img border="0" data-original-height="998" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu6NMFsK1y_ILcyeP2R1BozsLmoPhCZ9zPNIBJ2kvU8W7p_D9Umv5EAAvY8VVZK_EOtEOCbIbGJ-Wv4xBgRYQ-xMATEAkoZqR-1HzUILp-LLmZ_rHbwPSqSRY_F-YaQQ0xsUeZ2wlEiq4R9DZSQm1f0XSJqiQK-X9_PdtU5M40MNvFer3-klFKLlOOW0c/s1600/Now%20available%20group%20conversations%20with%20external%20collaborators%20in%20Google%20Chat%20-%206854.gif"></a></div><h3>Getting started</h3><p></p><ul><li><b>Admins: </b>External group DMs share the same admin controls as external spaces. Ensure that the <a href="https://knowledge.workspace.google.com/admin/chat/control-external-chat-and-spaces-chat-options#externalspaces" target="_blank">External spaces &amp; group direct messages admin setting</a> is enabled for your organization to allow users to create or join external group DMs.</li><li><b>End users:</b> If allowed by their admin, end users can add external users when they create a new group DM. External users can’t be added to existing group DMs that only have internal users. External users who are added to group DMs will receive an email invitation and must accept the invitation to participate in the group conversation.</li></ul><p></p><h3>Rollout pace</h3><p></p><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release domains:</a> Rolling out now, with expected completion by July 17, 2026</li><li><a href="https://support.google.com/a/answer/172177" target="_blank">Scheduled Release domains:</a> Gradual rollout (up to 15 days for feature visibility) starting on July 24, 2026 </li></ul><p></p><h3>Availability</h3><p></p><ul><li>Available to all Google Workspace customers and Workspace Individual subscribers</li></ul><p></p><h3>Resources</h3><p></p><ul><li>Google Chat Help: <a href="https://support.google.com/chat?p=External_gdm#topic=7649316" target="_blank">External group DMs in Google Chat</a></li><li>Google Workspace Admin Help: <a href="https://knowledge.workspace.google.com/admin/chat/control-external-chat-and-spaces-chat-options#externalspaces" target="_blank">Control external Chat &amp; spaces chat options</a></li></ul><p></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[New refinement capabilities allow custom editing with Help me write in Gmail]]></title>
<description><![CDATA[Users can now edit and revise their email drafts in Gmail via the prompt bar, using custom refine instructions in Help me write. Previously the refines were limited to preset options like Polish, Formalize, and Shorten. Now if your first draft isn’t quite perfect, you can provide a precise follow...]]></description>
<link>https://tsecurity.de/de/3668890/it+betriebssysteme/web+tipps/new+refinement+capabilities+allow+custom+editing+with+help+me+write+in+gmail/</link>
<pubDate>Tue, 14 Jul 2026 20:29:32 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Users can now edit and revise their email drafts in Gmail via the prompt bar, using custom refine instructions in <a href="https://support.google.com/mail/answer/13955415?hl=en&amp;co=GENIE.Platform%3DDesktop" target="_blank">Help me write</a>. Previously the refines were limited to preset options like Polish, Formalize, and Shorten. Now if your first draft isn’t quite perfect, you can provide a precise follow-up prompt in your own words to further refine it, and even undo or redo any edits you make.</p><p>Whether you need to add a missing detail to the second line or include a deadline for your request, simply type the instruction and Gmail will instantly update the draft for you.</p><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKMJB0VHVJcnPMsm-gclcPVASU_KR3mJodlJzwHcZ5gDVKiVvEQrl6WFB2zvMvCxRAuctj4GW-2fyIzHgx5mEN6AhfaMMTbIkxI2Hw9MWaBvkT_Qwx6-ScyKgEu5zWSC2y6q1vepeEf_lUGkoblz9u2XTZdefVdcNJb5_FG39bjbZO4ZWDZWXGJ2QI96c/s640/New%20refinement%20capabilities%20allow%20custom%20editing%20with%20Help%20me%20write%20in%20Gmail%20%20-%205478.gif" imageanchor="1"><img border="0" data-original-height="360" data-original-width="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKMJB0VHVJcnPMsm-gclcPVASU_KR3mJodlJzwHcZ5gDVKiVvEQrl6WFB2zvMvCxRAuctj4GW-2fyIzHgx5mEN6AhfaMMTbIkxI2Hw9MWaBvkT_Qwx6-ScyKgEu5zWSC2y6q1vepeEf_lUGkoblz9u2XTZdefVdcNJb5_FG39bjbZO4ZWDZWXGJ2QI96c/s1600/New%20refinement%20capabilities%20allow%20custom%20editing%20with%20Help%20me%20write%20in%20Gmail%20%20-%205478.gif"></a></div><h3>Getting started</h3><p></p><ul><li><b>Admins: </b>This feature is available by default if both <a href="https://knowledge.workspace.google.com/admin/gemini/manage-access-to-gemini-features-in-workspace-services" target="_blank">Gemini for Workspace in Gmail is enabled</a> and <a href="https://knowledge.workspace.google.com/admin/gemini/control-workspace-intelligence" target="_blank">Workspace Intelligence access to Gmail is enabled</a>.</li><li><b>End users: </b>This feature is available by default. Visit the Help Center article to <a href="https://support.google.com/mail/answer/13955415?hl=en&amp;co=GENIE.Platform%3DDesktop" target="_blank">learn more about drafting emails with Gemini in Gmail</a>.</li></ul><p></p><h3>Rollout pace</h3><p></p><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Rolling out now, with expected completion by July 20, 2026</li></ul><p></p><h3>Availability</h3><p></p><ul><li><b>Business: </b>Business Starter, Standard, and Plus</li><li><b>Enterprise:</b> Enterprise Starter, Standard, and Plus</li><li><b>Consumer: </b>Google AI Plus, Pro, and Ultra</li><li><b>Other Editions: </b>Frontline Plus</li><li><b>Education Add-ons:</b> Google AI Pro for Education</li><li><b>Other Add-ons: </b>AI Expanded Access</li></ul><p></p><h3>Resources</h3><p></p><ul><li>Gmail Help: <a href="https://support.google.com/mail/answer/13955415?hl=en&amp;co=GENIE.Platform%3DDesktop" target="_blank">Draft emails with Gemini in Gmail</a></li></ul><p></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Improvement to in-room problem reporting for Google Meet hardware]]></title>
<description><![CDATA[Maintaining an enterprise-grade video conferencing environment requires visibility into the health of its devices. We're introducing new ways to see Google Meet hardware user-reported feedback directly in the Admin console.We’ve also updated user-side feedback options to replace generic reporting...]]></description>
<link>https://tsecurity.de/de/3668757/it+betriebssysteme/web+tipps/improvement+to+in-room+problem+reporting+for+google+meet+hardware/</link>
<pubDate>Tue, 14 Jul 2026 19:14:14 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Maintaining an enterprise-grade video conferencing environment requires visibility into the health of its devices. We're introducing new ways to see Google Meet hardware user-reported feedback directly in the Admin console.</p><p>We’ve also updated user-side feedback options to replace generic reporting with structured actionable feedback making it easier and more intuitive for room participants to report problems.</p><h4>Redesigned user interface</h4><p>The new feedback menu on Google Meet hardware now features responses that are tailored to the reporting context (In-Call, Out of Call, Live stream). These new feedback options collect better details, making it easier for admins to understand and troubleshoot the issue.</p><p><b>In-Call Feedback: </b>Users are presented with call specific options to report a problem , like “Can’t see others” or “Poor audio or video quality.”</p><p><br></p><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAnyoKB67sWs9AiQZaMMW4IAf77lnEQTiqwFM7uVVhbE-0OFJvqhWdY6ZrmamLa9Wd0V2C6DHYOrCRPc83OhfJC2SqoU7T5ZwaV_b79ca9D_P-JH4ExkUDckOw3wLxb3jxOx6bgT0LV1WPhc3693FzfKGq8gW9GD-HMxlbYs3engB-utC8eAI_a_U0odw/s1264/Improvement%20to%20in-room%20problem%20reporting%20for%20Google%20Meet%20hardware%20-%207024%20-%201.png"><img border="0" data-original-height="848" data-original-width="1264" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAnyoKB67sWs9AiQZaMMW4IAf77lnEQTiqwFM7uVVhbE-0OFJvqhWdY6ZrmamLa9Wd0V2C6DHYOrCRPc83OhfJC2SqoU7T5ZwaV_b79ca9D_P-JH4ExkUDckOw3wLxb3jxOx6bgT0LV1WPhc3693FzfKGq8gW9GD-HMxlbYs3engB-utC8eAI_a_U0odw/s1600/Improvement%20to%20in-room%20problem%20reporting%20for%20Google%20Meet%20hardware%20-%207024%20-%201.png"></a></div><p><b><br></b></p><p><b>Out-of-Call Feedback: </b>When filing feedback from the touchscreen landing page, users now see a new set of join-related problems, including “Can’t join Meet call” and “Can’t join Teams call.”</p><p><br></p><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSXxsyuqYAybS1DgnyUJ0fo8yhrMELs5xkt89164G0s4ShvNiLUr_V-hVvFf76uH1_Aab98JGWsHjc7GIUanp57T3Svjau04fnbdo96tZEzSYiseEJqEr5w1fkJ93_MbFaQSdRIrhvyIjY_xfdRM3kIiS2uFBvQAdEEAGW5dzPRulgjgEYgfUJypmZwOs/s1592/Improvement%20to%20in-room%20problem%20reporting%20for%20Google%20Meet%20hardware%20-%207024%20-%202.png"><img border="0" data-original-height="994" data-original-width="1592" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSXxsyuqYAybS1DgnyUJ0fo8yhrMELs5xkt89164G0s4ShvNiLUr_V-hVvFf76uH1_Aab98JGWsHjc7GIUanp57T3Svjau04fnbdo96tZEzSYiseEJqEr5w1fkJ93_MbFaQSdRIrhvyIjY_xfdRM3kIiS2uFBvQAdEEAGW5dzPRulgjgEYgfUJypmZwOs/s1600/Improvement%20to%20in-room%20problem%20reporting%20for%20Google%20Meet%20hardware%20-%207024%20-%202.png"></a></div><p><b><br></b></p><p><b>Livestream Feedback: </b>Users viewing large-scale livestreams will see dedicated options to report a problem.</p><p><br></p><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBEhSIQqEEI6vSYXyx6fgfbC3tGhIFHNaHF-5hWdWHyf_lTF_TGXLdbvrpMhyphenhyphenspIQqe0jPvA5Z9ctqShQOg7smQ1n0HvnBYSQFCBJ1bIk7AEj1JOsJt3nfalsYYTHxeEB0wZeQ4my-BJnUHwZ-_AFSiw-kf9EOHvaQB8ChW1iDYVABVRt2v2aLjHLKSGE/s1988/Improvement%20to%20in-room%20problem%20reporting%20for%20Google%20Meet%20hardware%20-%207024%20-%203.png"><img border="0" data-original-height="1238" data-original-width="1988" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBEhSIQqEEI6vSYXyx6fgfbC3tGhIFHNaHF-5hWdWHyf_lTF_TGXLdbvrpMhyphenhyphenspIQqe0jPvA5Z9ctqShQOg7smQ1n0HvnBYSQFCBJ1bIk7AEj1JOsJt3nfalsYYTHxeEB0wZeQ4my-BJnUHwZ-_AFSiw-kf9EOHvaQB8ChW1iDYVABVRt2v2aLjHLKSGE/s1600/Improvement%20to%20in-room%20problem%20reporting%20for%20Google%20Meet%20hardware%20-%207024%20-%203.png"></a></div><h4>Admin console improvements</h4><p>The Google Meet hardware section of the Admin console now features enhanced monitoring tools. Feedback is no longer proxied as a background telemetry event; it is now a primary, sortable “device information” column within the device list.</p><p>Enhancements include two new columns on the device list page, including:</p><p></p><ul><li><b>Last feedback submitted</b> - A sortable column displaying the exact timestamp of a device’s most recent report, which can be filtered by 1, 3, 7, or 30 days. Clicking the timestamp opens a side panel containing specific feedback details.</li><li><b>Feedback in the last 28 days</b> - A cumulative count of reports filed for a specific device over a rolling 28-day period, allowing for the identification of recurring faulty devices.</li></ul><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container"><tbody><tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRqD__WF_U01Kycx4Gc1NTJ5ZrjDdxTbH4NnAQvcKWQHDpYCqGbZUSicIM-J8sCGU8JyHVIFiss54EQ5T7ZXGgrH7aR3kjZMqZzBFgOQYxROmwngh-Y8BwcBSoNihouSeGvKHOaWLK3Olp-q-H0fJbeY-Lb9DQ2YmrXmvXSnH9ZSliLX-c2lHAaVzcWRk/s2048/Improvement%20to%20in-room%20problem%20reporting%20for%20Google%20Meet%20hardware%20-%207024%20-%204.png"><img border="0" data-original-height="1105" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRqD__WF_U01Kycx4Gc1NTJ5ZrjDdxTbH4NnAQvcKWQHDpYCqGbZUSicIM-J8sCGU8JyHVIFiss54EQ5T7ZXGgrH7aR3kjZMqZzBFgOQYxROmwngh-Y8BwcBSoNihouSeGvKHOaWLK3Olp-q-H0fJbeY-Lb9DQ2YmrXmvXSnH9ZSliLX-c2lHAaVzcWRk/s1600/Improvement%20to%20in-room%20problem%20reporting%20for%20Google%20Meet%20hardware%20-%207024%20-%204.png"></a></td></tr><tr><td class="tr-caption"><br>The Google Meet hardware device list featuring new “Last feedback” and “Feedback in last 28 days” columns</td></tr></tbody></table><p></p><p>Admins can get more information about a specific “Last feedback” by clicking on the date, a side panel will open providing the specific feedback details:</p><p><br></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container"><tbody><tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBK8APy7Y656RlcyR9FCRza32pZ-cOmermheOgXkX-1eXtVsADG9nwSKT3jCeG3_D-vIFVl3ya0u2k9zdNl5B4SNiUjRFA30e0R_oEeEUVhABW0HvJtZcx-Ed8SkQ0Hn5f5Kr5dveVDrY-aweS3leADL70zcTOGTqAAzsOysx9_fslzM0S5_ILqlf9Z5E/s911/Improvement%20to%20in-room%20problem%20reporting%20for%20Google%20Meet%20hardware%20-%207024%20-%205.png"><img border="0" data-original-height="893" data-original-width="911" height="627" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBK8APy7Y656RlcyR9FCRza32pZ-cOmermheOgXkX-1eXtVsADG9nwSKT3jCeG3_D-vIFVl3ya0u2k9zdNl5B4SNiUjRFA30e0R_oEeEUVhABW0HvJtZcx-Ed8SkQ0Hn5f5Kr5dveVDrY-aweS3leADL70zcTOGTqAAzsOysx9_fslzM0S5_ILqlf9Z5E/w640-h627/Improvement%20to%20in-room%20problem%20reporting%20for%20Google%20Meet%20hardware%20-%207024%20-%205.png" width="640"></a></td></tr><tr><td class="tr-caption"><br>The feedback side panel on the Admin console now shows the new set of problems customers have reported</td></tr></tbody></table><p><br></p><p>In addition, we’re introducing a new "With feedback in last 7 days" filter, which instantly prioritizes devices with recent reports and repositions the feedback columns to sit next to the device name for immediate visibility.</p><p><br></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container"><tbody><tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGri3LB_IuUoRBOgEi5f5S3SWFXwYO58kUgLTf46eZ1BpJTYQLWKhTqJk3tDFGe07Rhid61M6FIVGxXwhuRX-xbk8pNG0xtN3nphXlSCErSStjnI3uyv2HDAXSatOnW5DR5ebWIwI1hVRx_Bp3N-AoUKHv8NvMXoyb_-oAP8pXAkGbKXW4gdYoYg5OAmE/s2014/Improvement%20to%20in-room%20problem%20reporting%20for%20Google%20Meet%20hardware%20-%207024%20-%206.png"><img border="0" data-original-height="884" data-original-width="2014" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGri3LB_IuUoRBOgEi5f5S3SWFXwYO58kUgLTf46eZ1BpJTYQLWKhTqJk3tDFGe07Rhid61M6FIVGxXwhuRX-xbk8pNG0xtN3nphXlSCErSStjnI3uyv2HDAXSatOnW5DR5ebWIwI1hVRx_Bp3N-AoUKHv8NvMXoyb_-oAP8pXAkGbKXW4gdYoYg5OAmE/s1600/Improvement%20to%20in-room%20problem%20reporting%20for%20Google%20Meet%20hardware%20-%207024%20-%206.png"></a></td></tr><tr><td class="tr-caption"><br>A new filter to glance at devices with feedback filed in the last 7 days.</td></tr></tbody></table><h3>Getting started</h3><p></p><ul><li><b>Admins:</b> Ensure the “Let users send feedback to Google” checkbox is selected in GMH Settings &gt; Data Sharing &gt; Feedback is ON  at the domain or organizational unit (OU) where the device is enrolled. Visit the Help Center to <a href="https://knowledge.workspace.google.com/admin/meet-hardware/get-support-for-google-meet-hardware#Manually_submit_feedback" target="_blank">learn more</a>.</li><li><b>End users: </b>Users can report feedback during or after a call or livestream via the “Report a problem” button. Visit the Help Center to <a href="https://support.google.com/meethardware/answer/17164186" target="_blank">learn more</a>.</li></ul><p></p><h3>Rollout pace</h3><p></p><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Gradual rollout (up to 15 days for feature visibility)  starting on July 14, 2026</li></ul><p></p><h3>Availability</h3><p></p><ul><li>Available to all Google Workspace customers with Google Meet hardware devices</li></ul><p></p><h3>Resources</h3><p></p><ul><li>Google Meet Hardware Help: <a href="https://knowledge.workspace.google.com/admin/meet-hardware/get-support-for-google-meet-hardware" target="_blank">Get support for Google Meet hardware</a></li><li>Google Meet Hardware Help: <a href="https://knowledge.workspace.google.com/admin/meet-hardware/view-and-edit-device-information" target="_blank">View &amp; edit device information</a></li><li>Google Meet Hardware Help: <a href="https://knowledge.workspace.google.com/admin/meet-hardware/monitor-the-health-of-devices" target="_blank">Monitor the health of devices</a></li><li>Google Meet Hardware Help: <a href="https://support.google.com/meethardware/answer/17164186" target="_blank">How to report a problem from a meeting room device</a></li></ul><p></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Google Credential Provider for Windows (GCPW) now supports FIDO2-compliant physical security keys as a second factor for authentication]]></title>
<description><![CDATA[Google Credential Provider for Windows (GCPW) has been updated to support FIDO2-compliant physical security keys as a second factor for authentication. This update helps organizations improve their security posture by enabling administrators to enforce 2-Step Verification (2SV) using hardware sec...]]></description>
<link>https://tsecurity.de/de/3666124/it+betriebssysteme/web+tipps/google+credential+provider+for+windows+gcpw+now+supports+fido2-compliant+physical+security+keys+as+a+second+factor+for+authentication/</link>
<pubDate>Mon, 13 Jul 2026 20:12:09 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Google Credential Provider for Windows (GCPW) has been updated to support FIDO2-compliant physical security keys as a second factor for authentication. This update helps organizations improve their security posture by enabling administrators to enforce 2-Step Verification (2SV) using hardware security keys at the Windows login screen. Additionally, users can now use passkeys from nearby Bluetooth-connected mobile devices for their second-factor authentication.</p><p><br></p><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjR0zeCemaxqTCVO6rOV0FfMasB3e_Wsd4bVZFuQ_by6qzf6oOCWwxQ8fUHEm71h0NeQP4mlwRqqUyxhpNQ9LtePYgVFxN7FnPPoIyl7yf1GV_njZK1ExTx6odDrgn0quaJ432YywTJULkIbvAOLvg-78iXl5jY1Ve5OCFngVfggpWpcN-w3KlFQJRy6A0/s1025/Google%20Credential%20Provider%20for%20Windows%20(GCPW)%20now%20supports%20FIDO2-compliant%20physical%20security%20keys%20as%20a%20second%20factor%20for%20authentication%20-%206959.png" imageanchor="1"><img border="0" data-original-height="767" data-original-width="1025" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjR0zeCemaxqTCVO6rOV0FfMasB3e_Wsd4bVZFuQ_by6qzf6oOCWwxQ8fUHEm71h0NeQP4mlwRqqUyxhpNQ9LtePYgVFxN7FnPPoIyl7yf1GV_njZK1ExTx6odDrgn0quaJ432YywTJULkIbvAOLvg-78iXl5jY1Ve5OCFngVfggpWpcN-w3KlFQJRy6A0/s1600/Google%20Credential%20Provider%20for%20Windows%20(GCPW)%20now%20supports%20FIDO2-compliant%20physical%20security%20keys%20as%20a%20second%20factor%20for%20authentication%20-%206959.png"></a></div><h3>Getting started</h3><p></p><ul><li><b>Admins:</b> Visit the Help Center to <a href="https://knowledge.workspace.google.com/admin/security/deploy-2-step-verification?hl=en&amp;visit_id=639184417936026454-2171514902&amp;rd=1#step_5_enforce_2-step_verification_optional" target="_blank">learn more about enforcing 2SV</a>.</li><li><b>End users:</b> There is no end user setting for this feature.</li></ul><p></p><h3>Rollout pace</h3><p></p><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains</a>: Gradual rollout (up to 15 days for feature visibility)  starting on July 13, 2026</li></ul><p></p><h3>Availability</h3><p></p><ul><li>Available to all Google Workspace customers</li></ul><p></p><h3>Resources</h3><p></p><ul><li>Google Workspace Admin Help: <a href="https://support.google.com/a/answer/9543613" target="_blank">Prepare to install GCPW</a></li></ul><p></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Google Workspace Weekly Recap - July 10, 2026]]></title>
<description><![CDATA[Join video conferences on Google Meet hardware via SIP through PexipYou can now join video conferences on Google Meet hardware via SIP through a Pexip interop gateway. This brings universal connectivity for users to join meetings hosted on any SIP-compatible platform directly from their Meet room...]]></description>
<link>https://tsecurity.de/de/3660827/it+betriebssysteme/web+tipps/google+workspace+weekly+recap+-+july+10+2026/</link>
<pubDate>Fri, 10 Jul 2026 23:10:13 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h3>Join video conferences on Google Meet hardware via SIP through Pexip</h3><p>You can now join video conferences on Google Meet hardware via SIP through a Pexip interop gateway. This brings universal connectivity for users to join meetings hosted on any SIP-compatible platform directly from their Meet rooms. The functionality is available for room hardware based on both Android and ChromeOS. | <a href="https://workspaceupdates.googleblog.com/2026/07/join-video-conferences-on-google-meet-hardware-via-SIP-through-Pexip.html" target="_blank">Learn more</a>.</p><h3>Occupancy counting now available for Google Meet on Neat room hardware</h3><p>Occupancy counting is now available for Android-based Neat room hardware to help measure how meeting rooms are used. This feature brings the same occupancy counting capabilities found on ChromeOS devices to Android-based hardware. | <a href="https://workspaceupdates.googleblog.com/2026/07/occupancy-counting-now-available-for-Google-Meet-on-Neat-room-hardware.html" target="_blank">Learn more</a>.</p><h3>Fill with Gemini in Sheets now available in 11 additional languages</h3><p>We're leveraging the capabilities of the AI function in Google Sheets, Fill with Gemini eliminates the need for complex formulas, helping you easily generate text, summarize information, categorize data, or analyze sentiment at scale with generated content appearing directly in the cells you choose. | <a href="https://workspaceupdates.googleblog.com/2026/07/fill-with-gemini-in-sheets-now-available-in-11-additional-languages.html" target="_blank">Learn more</a>.</p><h3>New calendar sharing permission level and changes to recurring event visibility</h3><p>We're introducing a new calendar sharing permission level: “Make changes (see private events as free/busy)”. This allows you to grant someone edit access to your calendar while keeping the details of your private events entirely hidden. This is especially useful for leaders who assign delegates to help them manage their calendars. | <a href="https://workspaceupdates.googleblog.com/2026/07/new-calendar-sharing-permission-level-and-changes-to-recurring-event-visibility.html" target="_blank">Learn more</a>.</p><h3>Convert your Google Slides to videos in 7 additional languages</h3><p>Google Vids already lets you convert your Slides content into Vids with AI-generated scripts, voiceovers, background music, and animations for presentations and accounts in English. We’re now expanding support to French, German, Italian, Japanese, Korean, Portuguese, and Spanish. | <a href="https://workspaceupdates.googleblog.com/2026/07/convert-your-google-slides-to-videos-in-7-additional-languages.html" target="_blank">Learn more</a>.</p><h3>Streamline identity lifecycle management in Google Workspace with new inbound SCIM support</h3><p>We are excited to announce the general availability of Google Workspace inbound SCIM APIs to help IT administrators standardize identity lifecycle management. This new capability allows you to sync your Google Workspace directory in real time with any SCIM-compatible Identity Provider (IdP), HR system (HRIS), or custom application. | <a href="https://workspaceupdates.googleblog.com/2026/07/streamline-identity-lifecycle-management-in-Google-Workspace-with-new-inbound-SCIM-support.html" target="_blank">Learn more</a>.</p><p><span>The announcements above were published on the Workspace Updates blog over the last week. Please refer to the original blog posts for complete details.</span></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Streamline identity lifecycle management in Google Workspace with new inbound SCIM support]]></title>
<description><![CDATA[We are excited to announce the general availability of Google Workspace inbound SCIM APIs to help IT administrators standardize identity lifecycle management. This new capability allows you to sync your Google Workspace directory in real time with any SCIM-compatible Identity Provider (IdP), HR s...]]></description>
<link>https://tsecurity.de/de/3657918/it+betriebssysteme/web+tipps/streamline+identity+lifecycle+management+in+google+workspace+with+new+inbound+scim+support/</link>
<pubDate>Thu, 09 Jul 2026 19:57:18 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>We are excited to announce the general availability of Google Workspace inbound SCIM APIs to help IT administrators standardize identity lifecycle management. This new capability allows you to sync your Google Workspace directory in real time with any SCIM-compatible Identity Provider (IdP), HR system (HRIS), or custom application.</p><p>With inbound SCIM, when a Workspace end user’s account permissions are changed via their organization’s IdP, their access to Workspace data and any downstream apps, such as Gemini Enterprise, will also be updated in real time. Previously, customers would need to build custom integrations using Google directory APIs.</p><h4>SCIM overview</h4><p><a href="https://datatracker.ietf.org/doc/html/rfc7644" target="_blank">System for Cross-domain Identity Management (SCIM)</a> is an open protocol that synchronizes directory information between identity systems. With inbound SCIM, Google Workspace acts as a SCIM Service Provider, enabling compatible Identity Providers (IdPs) to automatically provision, update, and deactivate users and groups in real time.</p><p>Inbound SCIM offers:</p><p></p><ul><li><b>Automated lifecycle management:</b> IT teams no longer need to manually create user accounts or update details for Workspace, saving significant time and costs.</li><li><b>Seamless onboarding and day-one productivity: </b>New employees have access to all Workspace productivity tools the moment they start, creating a frictionless onboarding experience.</li><li><b>Enhanced security with instant deprovisioning:</b> When an employee leaves your organization or changes roles, SCIM instantly pushes an update request to Workspace. This eliminates the security risks associated with orphaned accounts and makes compliance audits significantly easier.</li><li><b>Simplified admin experience: </b>Inbound SCIM offers a one-click token generation experience and admin controls to lock synced groups from your external source to prevent manual changes in Workspace that would conflict with your identity provider.</li></ul><p></p><h3>Getting started</h3><p></p><ul><li><b>Admins:</b> This feature will be available by default and can be disabled/enabled at the domain level. Visit the Help Center to <a href="https://knowledge.workspace.google.com/p/inbound-scim-get-started" target="_blank">learn more</a>.</li><li><b>End users:</b> This is an admin-facing feature only.</li></ul><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container"><tbody><tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRZjai4_pLmCws0nWKBWlLywUvyRalsT4yyEV6_GSYqwkR5jrbfa8rpLBHLbr4re21HMpT7_XfwG6eChYUajgjut0j8H8Xl07KZt9uwfaPKBSgInml5Tnn578THOdx2Lc5NCMGfpMYV3GMNRAzOv5i8XFZiIxIikAN1Vi7kAHbxfXfMyyvVH7P7bQzRJU/s2048/Streamline%20identity%20lifecycle%20management%20in%20Google%20Workspace%20with%20new%20inbound%20SCIM%20support%20-%205487%20-%201.png"><img border="0" data-original-height="1069" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRZjai4_pLmCws0nWKBWlLywUvyRalsT4yyEV6_GSYqwkR5jrbfa8rpLBHLbr4re21HMpT7_XfwG6eChYUajgjut0j8H8Xl07KZt9uwfaPKBSgInml5Tnn578THOdx2Lc5NCMGfpMYV3GMNRAzOv5i8XFZiIxIikAN1Vi7kAHbxfXfMyyvVH7P7bQzRJU/s1600/Streamline%20identity%20lifecycle%20management%20in%20Google%20Workspace%20with%20new%20inbound%20SCIM%20support%20-%205487%20-%201.png"></a></td></tr><tr><td class="tr-caption"><br>The Manage external directories page in the Admin console showing Inbound SCIM setup</td></tr></tbody></table><br><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container"><tbody><tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp6yBrKUNP4VItoiOzn3aqXKvK5DMZUUdktjv7WK7HKWX4RdW6uyOWmSpawZWY1g1QY7OqTaAY63rffFAS-xsaOkkLntcQJSAzSw4_MBLX8tfchDslnLp5R9EKZs6_rVyBdlhsqevptpD11ampHlkkQzD8c6flzbTbxzmP8aodyCS_6eLKDgPem_6JRSo/s2048/Streamline%20identity%20lifecycle%20management%20in%20Google%20Workspace%20with%20new%20inbound%20SCIM%20support%20-%205487%20-%202.png"><img border="0" data-original-height="1261" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp6yBrKUNP4VItoiOzn3aqXKvK5DMZUUdktjv7WK7HKWX4RdW6uyOWmSpawZWY1g1QY7OqTaAY63rffFAS-xsaOkkLntcQJSAzSw4_MBLX8tfchDslnLp5R9EKZs6_rVyBdlhsqevptpD11ampHlkkQzD8c6flzbTbxzmP8aodyCS_6eLKDgPem_6JRSo/s1600/Streamline%20identity%20lifecycle%20management%20in%20Google%20Workspace%20with%20new%20inbound%20SCIM%20support%20-%205487%20-%202.png"></a></td></tr><tr><td class="tr-caption"><br>Configure a new Inbound SCIM connection with external IdP</td></tr></tbody></table><p></p><h3>Rollout pace</h3><p></p><ul><li><a href="https://knowledge.workspace.google.com/admin/releases/choose-when-users-get-new-features?visit_id=639180233279592651-2438693000&amp;rd=1" target="_blank">Rapid Release and Scheduled Release domains:</a> Gradual rollout (up to 15 days for feature visibility) starting July 9, 2026</li></ul><p></p><h3>Availability</h3><p></p><ul><li><b>Business: </b>Business Starter, Standard, and Plus</li><li><b>Enterprise:</b> Enterprise Starter, Standard, and Plus</li></ul><p></p><h3>Resources</h3><p></p><ul><li>Google Workspace Admin Help: <a href="https://knowledge.workspace.google.com/p/inbound-scim-get-started" target="_blank">Get started with Inbound SCIM</a></li></ul><p></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Convert your Google Slides to videos in 7 additional languages]]></title>
<description><![CDATA[Google Vids already lets you convert your Slides content into Vids with AI-generated scripts, voiceovers, background music, and animations for presentations and accounts in English.We’re now expanding support to French, German, Italian, Japanese, Korean, Portuguese, and Spanish. Getting startedAd...]]></description>
<link>https://tsecurity.de/de/3655165/it+betriebssysteme/web+tipps/convert+your+google+slides+to+videos+in+7+additional+languages/</link>
<pubDate>Wed, 08 Jul 2026 20:27:13 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p><a href="https://docs.google.com/videos/create?usp=blog" target="_blank">Google Vids</a> already lets you <a href="https://support.google.com/docs/answer/15577408?hl=en-GB" target="_blank">convert your Slides content into Vids</a> with AI-generated scripts, voiceovers, background music, and animations for presentations and accounts in English.</p><p>We’re now expanding support to French, German, Italian, Japanese, Korean, Portuguese, and Spanish. </p><h3>Getting started</h3><p></p><ul><li><b>Admins: </b>There is no admin control for this feature.</li><li><b>End users: </b>There is no end user setting for this feature. Visit the Help Center to learn more about <a href="https://support.google.com/docs/answer/15577408?hl=en" target="_blank">converting Google Slides into Google Vids</a>.</li></ul><p></p><h3>Rollout pace</h3><p></p><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release domains:</a> Gradual rollout (up to 15 days for feature visibility) started on June 30, 2026</li><li><a href="https://support.google.com/a/answer/172177" target="_blank">Scheduled Release domains:</a> Full rollout (1–3 days for feature visibility) starting on July 20, 2026</li></ul><p></p><h3>Availability</h3><p></p><ul><li><b>Business: </b>Business Starter, Standard, and Plus</li><li><b>Enterprise: </b>Enterprise Starter, Standard, and Plus</li><li><b>Education:</b> Education Plus</li><li><b>Consumer:</b> Google AI Pro and Ultra</li><li><b>Other Editions: </b>Enterprise Essentials and Enterprise Essentials Plus; Nonprofits</li><li><b>Education Add-ons: </b>Google AI Pro for Education; Teaching and Learning</li><li><b>Other Add-ons:</b> AI Expanded Access</li></ul><p></p><h3>Resources</h3><p></p><ul><li>Google Help: <a href="https://support.google.com/docs/answer/15577408" target="_blank">Convert Google Slides into Google Vids</a></li></ul><p></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Fill with Gemini in Sheets now available in 11 additional languages]]></title>
<description><![CDATA[Earlier this year, we announced Fill with Gemini in Google Sheets, a new AI-powered feature designed to make data preparation and manual entry even easier. Leveraging the capabilities of the AI function in Google Sheets, Fill with Gemini eliminates the need for complex formulas, helping you easil...]]></description>
<link>https://tsecurity.de/de/3652489/it+betriebssysteme/web+tipps/fill+with+gemini+in+sheets+now+available+in+11+additional+languages/</link>
<pubDate>Tue, 07 Jul 2026 20:25:10 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Earlier this year, we announced <a href="https://workspaceupdates.googleblog.com/2026/04/effortlessly-automate-data-entry-in-Google-Sheets-using-Fill-with-Gemini.html" target="_blank">Fill with Gemini in Google Sheets</a>, a new AI-powered feature designed to make data preparation and manual entry even easier. Leveraging the capabilities of the <a href="https://support.google.com/docs/answer/15877199" target="_blank">AI function in Google Sheets</a>, Fill with Gemini eliminates the need for complex formulas, helping you easily generate text, summarize information, categorize data, or analyze sentiment at scale with generated content appearing directly in the cells you choose.</p><p>Previously available in English, Spanish, Portuguese, Japanese, Korean, French, Italian, and German, both Fill with Gemini and the AI function are now expanding to users in Mandarin, Dutch, Malay, Hebrew, Polish, Turkish, Czech, Indonesian, Swedish, Danish, and Norwegian.</p><p><br></p><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyEJfYdUzQk809xfJMUz4PMNcZmh5G491obQOv6eeKZ3bOjY2cGU_W_PbAYzWKNcp9znaMHuAaU0D7cTGl622SdPr6EDeyGDaFoA0YTr61pHZl_pzqk6yWO2KAbK0WMbkE_FutcXmmXAvpmfi248Tmf2FOIWh5au-zKg4Fpv0sNVDgWS8_1gpTjXMEKio/s2048/Fill%20with%20Gemini%20in%20Sheets%20now%20available%20in%2011%20additional%20languages%20-%207152.png" imageanchor="1"><img border="0" data-original-height="1283" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyEJfYdUzQk809xfJMUz4PMNcZmh5G491obQOv6eeKZ3bOjY2cGU_W_PbAYzWKNcp9znaMHuAaU0D7cTGl622SdPr6EDeyGDaFoA0YTr61pHZl_pzqk6yWO2KAbK0WMbkE_FutcXmmXAvpmfi248Tmf2FOIWh5au-zKg4Fpv0sNVDgWS8_1gpTjXMEKio/s1600/Fill%20with%20Gemini%20in%20Sheets%20now%20available%20in%2011%20additional%20languages%20-%207152.png"></a></div><h3>Getting started</h3><p></p><ul><li><b>Admins: </b>Fill with Gemini is an entry point to the existing AI function. It will be hidden if the Smart features for Google Workspace setting is disabled. Visit the Help Center to <a href="https://knowledge.workspace.google.com/admin/security/manage-google-workspace-smart-features-for-your-users" target="_blank">learn more about managing Google Workspace smart features for your users</a>.</li><li><b>End users: </b>You must have <a href="https://support.google.com/mail/answer/15604322?sjid=17363988672514456782-NA#gw&amp;zippy=%2Csmart-features-in-google-workspace%2Cwhat-are-googles-legal-bases-of-processing-for-users-in-the-european-economic-area-united-kingdom-or-switzerland%2Chow-long-is-your-workspace-content-activity-used-to-provide-smart-features-and-to-improve-these-features" target="_blank">Workspace smart features </a>enabled to use Fill with Gemini. Users can trigger Fill with Gemini by dragging a selection or selecting empty cells to see the prompt menu. Visit the Help Center to <a href="https://support.google.com/docs/answer/15877199#fill-columns" target="_blank">learn more about filling columns with Gemini</a>.</li></ul><p></p><h3>Rollout pace </h3><p></p><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Gradual rollout (up to 15 days for feature visibility) starting on July 7, 2026</li></ul><p></p><h3>Availability</h3><p></p><ul><li><b>Business:</b> Business Standard and Plus</li><li><b>Enterprise:</b> Enterprise Standard and Plus</li><li><b>Consumer: </b>Google AI Pro and Ultra</li><li><b>Education Add-ons: </b>Google AI Pro for Education</li><li><b>AI Add-ons: </b>AI Expanded Access*</li></ul><p></p><p><i>*Starting July 15, 2026, users with AI Expanded Access licenses will have <a href="https://support.google.com/a?p=limits" target="_blank">higher limits</a> on usage of Fill with Gemini and the AI function in Sheets. </i></p><h3>Resources</h3><p></p><ul><li>Google Docs Editors Help: <a href="https://support.google.com/docs/answer/15877199" target="_blank">Use the AI function in Google Sheets</a></li><li>Google Admin Help: <a href="https://knowledge.workspace.google.com/admin/security/manage-google-workspace-smart-features-for-your-users#:~:text=In%20the%20Google%20Admin%20console,it%20actually%20reaffirms%20their%20importance" target="_blank">Set smart features &amp; controls on or off for users</a></li></ul><p></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[New calendar sharing permission level and changes to recurring event visibility]]></title>
<description><![CDATA[We're introducing a new calendar sharing permission level: “Make changes (see private events as free/busy)”. This allows you to grant someone edit access to your calendar while keeping the details of your private events entirely hidden. This is especially useful for leaders who assign delegates t...]]></description>
<link>https://tsecurity.de/de/3652488/it+betriebssysteme/web+tipps/new+calendar+sharing+permission+level+and+changes+to+recurring+event+visibility/</link>
<pubDate>Tue, 07 Jul 2026 20:25:08 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>We're introducing a new <a href="https://support.google.com/calendar/answer/37082?hl=en&amp;co=GENIE.Platform%3DDesktop&amp;oco=0" target="_blank">calendar sharing permission level</a>: “Make changes (see private events as free/busy)”. This allows you to grant someone edit access to your calendar while keeping the details of your private events entirely hidden. This is especially useful for leaders who assign delegates to help them manage their calendars.</p><p>Delegates assigned this restricted permission level will only be able to <b>create, delete, and edit non-private events.</b> Private events will appear to delegates as “busy” blocks on the calendar grid, and delegates will not be able to edit or reschedule them. In addition, private events won’t show up in any search results for delegates.</p><h4>Changes to visibility for recurring events</h4><p>We’re also introducing changes to the way visibility settings are applied to recurring events.</p><p></p><ul><li>Users can no longer make changes to the visibility of a single event in a recurring series. Any changes to visibility will be applied to all events in the series.</li><li>Existing events in a recurring series will be updated to match the strictest visibility setting of any event in that series. In other words, if one event in the series is marked private but the others are not, all events in that series will be changed to private.</li></ul><p></p><h3>Getting started</h3><p></p><ul><li><b>Admins:</b> There is no admin control for this feature.</li><li><b>End users: </b>Users can grant delegates this new permission level in their Calendar settings. Visit the Help Center to <a href="https://support.google.com/calendar/answer/37082?hl=en&amp;co=GENIE.Platform%3DDesktop&amp;oco=0" target="_blank">learn more about sharing your calendar.</a></li></ul><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyFxU1O5_Uxh0G-LNuLOclNiEycMow-1tELYirJ47YafvqaIhXkxpuxyT3qYi8iJVPXNrPFOZRtsbzsouguUU_4czc-LVZd0FVfyjqxuzum1XCq7RyB5d7lzCuYLRorMaEIGJ7l72l2LdvE3TFtFcJsvO8w1zv-MkCJEML_Ql71XJuMPGd62wt8UN0sXU/s2048/New%20calendar%20sharing%20permission%20level%20and%20changes%20to%20recurring%20event%20visibility%20-%206966.png"><img border="0" data-original-height="1321" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyFxU1O5_Uxh0G-LNuLOclNiEycMow-1tELYirJ47YafvqaIhXkxpuxyT3qYi8iJVPXNrPFOZRtsbzsouguUU_4czc-LVZd0FVfyjqxuzum1XCq7RyB5d7lzCuYLRorMaEIGJ7l72l2LdvE3TFtFcJsvO8w1zv-MkCJEML_Ql71XJuMPGd62wt8UN0sXU/s1600/New%20calendar%20sharing%20permission%20level%20and%20changes%20to%20recurring%20event%20visibility%20-%206966.png"></a></div><p></p><h3>Rollout pace</h3><p></p><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid and Scheduled Release domains:</a> Extended rollout (potentially longer than 15 days for feature visibility) starting on July 7, 2026</li></ul><p></p><h3>Availability</h3><p></p><ul><li>Available to all Google Workspace customers, Workspace Individual subscribers, and users with personal Google accounts</li></ul><p></p><h3>Resources</h3><p></p><ul><li>Google Calendar Help: <a href="https://support.google.com/calendar/answer/37082?hl=en&amp;co=GENIE.Platform%3DDesktop&amp;oco=0" target="_blank">Share your calendar</a></li></ul><p></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Occupancy counting now available for Google Meet on Neat room hardware]]></title>
<description><![CDATA[Occupancy counting is now available for Android-based Neat room hardware to help measure how meeting rooms are used. This feature brings the same occupancy counting capabilities found on ChromeOS devices to Android-based hardware.Understanding room occupancy helps organizations optimize real esta...]]></description>
<link>https://tsecurity.de/de/3652024/it+betriebssysteme/web+tipps/occupancy+counting+now+available+for+google+meet+on+neat+room+hardware/</link>
<pubDate>Tue, 07 Jul 2026 17:28:19 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Occupancy counting is now available for Android-based Neat room hardware to help measure how meeting rooms are used. This feature brings the same occupancy counting capabilities found on ChromeOS devices to Android-based hardware.</p><p>Understanding room occupancy helps organizations optimize real estate and room design based on user needs. For instance, organizations can track if rooms with older video hardware are being avoided in favor of rooms equipped with better tracking cameras and audio bars.</p><p>Admins can review occupancy data in the Google Admin console and optionally download it as a spreadsheet. This feature does not collect or store any personally identifiable information (PII). Because occupancy detection processes data locally on the device, the camera LED indicator may remain off during counting depending on the hardware vendor. Refer to vendor documentation for device-specific information.</p><br><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container"><tbody><tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiimw9WXdQNRdLrmfYCMYtoq2nuOBd7adGo4hHd_s1LyKsmqCvGr4Ms0EDB7rvl-y7iZN-HpMWSvYVIhcxFlISobBMZH61oXkGISq9vQZq3NBIiiyvI9hHFgcpk1-2bVr-I3OgSBsNSPyqfJ_5ZslbgoqNeqsz-YXCh-EyuJDwOmUc2BNpMq0jQR_DlEk/s1554/Occupancy%20counting%20now%20available%20for%20Google%20Meet%20on%20Neat%20room%20hardware%20-%207119.png"><img border="0" data-original-height="961" data-original-width="1554" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiimw9WXdQNRdLrmfYCMYtoq2nuOBd7adGo4hHd_s1LyKsmqCvGr4Ms0EDB7rvl-y7iZN-HpMWSvYVIhcxFlISobBMZH61oXkGISq9vQZq3NBIiiyvI9hHFgcpk1-2bVr-I3OgSBsNSPyqfJ_5ZslbgoqNeqsz-YXCh-EyuJDwOmUc2BNpMq0jQR_DlEk/s1600/Occupancy%20counting%20now%20available%20for%20Google%20Meet%20on%20Neat%20room%20hardware%20-%207119.png"></a></td></tr><tr><td class="tr-caption">Review room booking and occupancy in the Admin console</td></tr></tbody></table><h3>Getting started</h3><p></p><ul><li><b>Admins:</b> This feature will be off by default and can be enabled at the domain, organizational unit (OU), or group level. Visit the Help Center to <a href="https://knowledge.workspace.google.com/admin/meet-hardware/turn-on-occupancy-detection" target="_blank">learn more about turning on occupancy detection</a>.</li><li><b>End users: </b>There is no end-user setting for this feature.</li></ul><p></p><h3>Rollout pace</h3><p></p><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Extended rollout (potentially longer than 15 days for feature visibility) started on July 6, 2026</li></ul><p></p><h3>Availability</h3><p></p><ul><li>Available to all Google Workspace customers with Google Meet on Neat AOSP hardware devices. </li></ul><p></p><h3>Resources</h3><p></p><ul><li>Google Workspace Admin Help: <a href="https://knowledge.workspace.google.com/admin/meet-hardware/turn-on-occupancy-detection" target="_blank">Turn on occupancy detection</a></li><li>Google Workspace Admin Help: <a href="https://knowledge.workspace.google.com/admin/meet-hardware/track-room-and-device-usage-with-meet-hardware" target="_blank">Track room and device usage with Meet hardware</a></li></ul><p></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Join video conferences on Google Meet hardware via SIP through Pexip]]></title>
<description><![CDATA[You can now join video conferences on Google Meet hardware via SIP through a Pexip interop gateway. This brings universal connectivity for users to join meetings hosted on any SIP-compatible platform directly from their Meet rooms. The functionality is available for room hardware based on both An...]]></description>
<link>https://tsecurity.de/de/3649387/it+betriebssysteme/web+tipps/join+video+conferences+on+google+meet+hardware+via+sip+through+pexip/</link>
<pubDate>Mon, 06 Jul 2026 18:37:09 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>You can now join video conferences on Google Meet hardware via SIP through a Pexip interop gateway. This brings universal connectivity for users to join meetings hosted on any SIP-compatible platform directly from their Meet rooms. The functionality is available for room hardware based on both Android and ChromeOS.</p><p>The SIP functionality for Meet hardware enables critical in-meeting interactions, such as DTMF (Dual-Tone Multi-Frequency) capabilities that allow users to navigate meeting IVRs (interactive voice response systems), e.g., "Press 1 to raise your hand" and entering numeric meeting passcodes.</p><p>Distinct administrator settings are provided for managing SIP dial-out functionality separately from other Pexip-based integrations.</p><p><br></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container"><tbody><tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUXNrywUH1uo9kaisD2qgYSzS92RD4DgH_TdG_TjMCAK6kH5iIlP7W4QSlCQpq10G19uBs7G6_I4uxNBXTefyV9qIUTa-ElrewmiRa__P9diPJVNrvqXVoJZsBYV4xR8UI2m5F2O39y0_MqL03qmbuGUWIHcFGHzP0Vtlu_m5QJNMzrtpOVPGUQ8QM6ac/s1904/Join%20video%20conferences%20on%20Google%20Meet%20hardware%20via%20SIP%20through%20Pexip%20-%207114%20-%201.png"><img border="0" data-original-height="1073" data-original-width="1904" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUXNrywUH1uo9kaisD2qgYSzS92RD4DgH_TdG_TjMCAK6kH5iIlP7W4QSlCQpq10G19uBs7G6_I4uxNBXTefyV9qIUTa-ElrewmiRa__P9diPJVNrvqXVoJZsBYV4xR8UI2m5F2O39y0_MqL03qmbuGUWIHcFGHzP0Vtlu_m5QJNMzrtpOVPGUQ8QM6ac/s1600/Join%20video%20conferences%20on%20Google%20Meet%20hardware%20via%20SIP%20through%20Pexip%20-%207114%20-%201.png"></a></td></tr><tr><td class="tr-caption">Join SIP calls with a single touch from the room agenda</td></tr></tbody></table><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container"><tbody><tr><td><br><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJrmYEW2N59ZdtBgfDeJ3E78rZ6JW0LotR5F8mA93TT-1Lk6AGdhyphenhyphenGNG552kLKzI5emia2Ps9F22eTMO1g4mmTjDTxXn0Kncbmwc6lh3KyqMVTKetyP-8C5eOQ8sE_hxa3KAjvzrTxRPlGI0VSpA-hKOpsX66qYbeV-DWlnE4mDrOzyxlz0njj-egJHKs/s1756/Join%20video%20conferences%20on%20Google%20Meet%20hardware%20via%20SIP%20through%20Pexip%20-%207114%20-%202.png"><img border="0" data-original-height="244" data-original-width="1756" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJrmYEW2N59ZdtBgfDeJ3E78rZ6JW0LotR5F8mA93TT-1Lk6AGdhyphenhyphenGNG552kLKzI5emia2Ps9F22eTMO1g4mmTjDTxXn0Kncbmwc6lh3KyqMVTKetyP-8C5eOQ8sE_hxa3KAjvzrTxRPlGI0VSpA-hKOpsX66qYbeV-DWlnE4mDrOzyxlz0njj-egJHKs/s1600/Join%20video%20conferences%20on%20Google%20Meet%20hardware%20via%20SIP%20through%20Pexip%20-%207114%20-%202.png"></a></td></tr><tr><td class="tr-caption">SIP interoperability setting for administrators</td></tr></tbody></table><h3>Getting started</h3><p></p><ul><li><b>Admins: </b>This feature will be off by default and can be disabled or enabled at the domain, OU, or group level. Visit the Help Center to <a href="https://knowledge.workspace.google.com/admin/meet-hardware/allow-meet-hardware-to-join-third-party-video-conferencing-services" target="_blank">learn more</a>.</li><li><b>End users: </b>There is no end user setting for this feature.</li></ul><p></p><h3>Rollout pace</h3><p></p><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Gradual rollout (up to 15 days for feature visibility) starting on July 6, 2026</li></ul><p></p><h3>Availability</h3><p></p><ul><li>Available to all Google Workspace customers with Google Meet hardware devices*</li></ul><p></p><p><i>*Functionality requires a separate Pexip subscription</i></p><h3>Resources</h3><p></p><ul><li>Google Workspace Admin Help: <a href="https://knowledge.workspace.google.com/admin/meet-hardware/allow-meet-hardware-to-join-third-party-video-conferencing-services" target="_blank">Allow Meet hardware to join third-party video conferencing services</a></li><li>Google Meet Hardware Help: <a href="https://knowledge.workspace.google.com/admin/meet-hardware/meet-interoperability-faq" target="_blank">Meet interoperability FAQ</a></li></ul><p></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Google Workspace Weekly Recap - July 3, 2026]]></title>
<description><![CDATA[Updated admin setting for improved video quality in Google MeetIn April 2026, we updated Meet to improve video quality on high-resolution displays. We’re now updating the way the Admin console setting that limits video bandwidth works to reduce data usage and improve call quality. | Learn more.Ed...]]></description>
<link>https://tsecurity.de/de/3644366/it+betriebssysteme/web+tipps/google+workspace+weekly+recap+-+july+3+2026/</link>
<pubDate>Fri, 03 Jul 2026 22:42:03 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h3>Updated admin setting for improved video quality in Google Meet</h3><p>In April 2026, we updated Meet to improve video quality on high-resolution displays. We’re now updating the way the Admin console setting that limits video bandwidth works to reduce data usage and improve call quality. | <a href="https://workspaceupdates.googleblog.com/2026/06/updated-admin-setting-for-improved-video-quality-in-Google-Meet.html" target="_blank">Learn more</a>.</p><h3>Educators and students can now share Gemini Canvas creations directly to Google Classroom</h3><p>Educators and students of all ages can now seamlessly attach Gemini Canvas artifacts, like websites, quizzes, interactive games, infographics, and more, to Google Classroom assignments and posts. | <a href="https://workspaceupdates.googleblog.com/2026/06/educators-and-students-can-now-share-Gemini-Canvas-creations-directly-to-Google-Classroom.html" target="_blank">Learn more</a>.</p><h3>Assign mobile device management admin privileges based on organizational unit</h3><p>We’re giving admins more granular control over how mobile device management privileges are delegated. Specifically, admins can be assigned privileges for specific organizational units (OUs), adding another layer of security by scoping access only to necessary OUs. | <a href="https://workspaceupdates.googleblog.com/2026/06/assign-mobile-device-management-admin-privileges-based-on-organizational-unit.html" target="_blank">Learn more</a>.</p><h3>Data regions support for the Gemini app now available</h3><p>The Gemini app adheres to your organization’s data regionalization requirements. As with Google Workspace, admins have the flexibility to configure controls for EU storage and processing, US storage and processing, or both, including granular settings down to the organizational unit (OU) level. | <a href="https://workspaceupdates.googleblog.com/2026/06/gemini-app-data-regions-support.html" target="_blank">Learn more</a>.</p><h3>Create fully native and editable presentations with Gemini in Google Slides</h3><p>You can now create a full, multi-slide presentation using Gemini in Google Slides. With a single prompt, you can ground the presentation in existing content from Google Drive, match the style of another presentation, and build fully editable slides, allowing you to make any necessary adjustments. | <a href="https://workspaceupdates.googleblog.com/2026/06/create-fully-native-and-editable-presentations-with-Gemini-in-Google-Slides.html" target="_blank">Learn more</a>.</p><h3>Ask Gemini in Drive now available on mobile</h3><p>In April, we announced the general availability of Ask Gemini in Drive on the web. We’re now bringing this feature to the Drive Android and iOS apps. | <a href="https://workspaceupdates.googleblog.com/2026/06/ask-gemini-in-drive-now-available-on-mobile.html" target="_blank">Learn more</a>.</p><h3>Work with delegated Gmail accounts from mobile devices</h3><p>Previously, users could only work with delegated Gmail accounts through the web interface. We are updating the Gmail app for iOS and Android to allow delegates to read, manage, and compose emails on behalf of a delegator directly from their mobile devices. | <a href="https://workspaceupdates.googleblog.com/2026/06/work-with-delegated-gmail-accounts-from-mobile-devices.html" target="_blank">Learn more</a>.</p><h3>AI Overviews in Drive now available on mobile</h3><p>In April, we announced the general availability for Drive AI Overviews in Drive on the web. We’re now bringing this feature to the Drive Android and iOS apps. | <a href="https://workspaceupdates.googleblog.com/2026/06/ai-overviews-in-drive-now-available-on-mobile.html" target="_blank">Learn more</a>.</p><h3>Import 3D bar charts into Google Sheets</h3><p>Google Sheets now fully supports the import of 3D bar charts. Previously, when users imported files containing 3D bar charts into Sheets, they would be displayed as 2D bar charts. With this update, importing these types of files, including from Microsoft Excel, will yield a more seamless experience. | <a href="https://workspaceupdates.googleblog.com/2026/06/import-3d-bar-charts-into-google-sheets.html" target="_blank">Learn more</a>.</p><p><span>The announcements above were published on the Workspace Updates blog over the last week. Please refer to the original blog posts for complete details.</span></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Import 3D bar charts into Google Sheets]]></title>
<description><![CDATA[Google Sheets now fully supports the import of 3D bar charts. Previously, when users imported files containing 3D bar charts into Sheets, they would be displayed as 2D bar charts. With this update, importing these types of files, including from Microsoft Excel, will yield a more seamless experien...]]></description>
<link>https://tsecurity.de/de/3639479/it+betriebssysteme/web+tipps/import+3d+bar+charts+into+google+sheets/</link>
<pubDate>Wed, 01 Jul 2026 20:56:16 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Google Sheets now fully supports the import of 3D bar charts. Previously, when users imported files containing 3D bar charts into Sheets, they would be displayed as 2D bar charts. With this update, importing these types of files, including from Microsoft Excel, will yield a more seamless experience.</p><p><br></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container"><tbody><tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqRNyoM6VVKVmutPtyGFLvuW_86GeNOapKNwgHWUXzvhQcBASRnIKTKA6kMgsjkhmE_r1R3wjo-6lBj6csNS-PH2HrmqZGvQ80njz0toQqCiZhJ0idLw8IsK-HQYbUhjLsoEiEosEM5W7YKbIIGPpyeULG0iVUVFx6KGnxUltpxmzttXgoJcrHzhACZso/s2048/Import%203D%20bar%20charts%20into%20Google%20Sheets%20-%206843.png" imageanchor="1"><img border="0" data-original-height="1382" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqRNyoM6VVKVmutPtyGFLvuW_86GeNOapKNwgHWUXzvhQcBASRnIKTKA6kMgsjkhmE_r1R3wjo-6lBj6csNS-PH2HrmqZGvQ80njz0toQqCiZhJ0idLw8IsK-HQYbUhjLsoEiEosEM5W7YKbIIGPpyeULG0iVUVFx6KGnxUltpxmzttXgoJcrHzhACZso/s1600/Import%203D%20bar%20charts%20into%20Google%20Sheets%20-%206843.png"></a></td></tr><tr><td class="tr-caption">3D bar chart imported into Google Sheets</td></tr></tbody></table><h3>Getting started</h3><p></p><ul><li><b>Admins: </b>There is no admin control for this feature.</li><li><b>End users: </b>Visit the Help Center to <a href="https://support.google.com/docs/answer/63824" target="_blank">learn more about adding and editing a chart in Google Sheets</a>.</li></ul><p></p><h3>Rollout pace</h3><p></p><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release domains:</a> Available now</li><li><a href="https://support.google.com/a/answer/172177" target="_blank">Scheduled Release domains:</a> Gradual rollout (up to 15 days for feature visibility) starting on July 13, 2026</li></ul><p></p><h3>Availability</h3><p></p><ul><li>Available to all Google Workspace customers and users with personal Google accounts</li></ul><p></p><h3>Resources</h3><p></p><ul><li>Google Docs Editors Help: <a href="https://support.google.com/docs/answer/63824" target="_blank">Add &amp; edit a chart or graph</a></li></ul><p></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[AI Overviews in Drive now available on mobile]]></title>
<description><![CDATA[In April, we announced the general availability for Drive AI Overviews in Drive on the web. We’re now bringing this feature to the Drive Android and iOS apps.Instead of searching through endless files and opening dozens of tabs to find the information you need, you can now get instant answers rig...]]></description>
<link>https://tsecurity.de/de/3636885/it+betriebssysteme/web+tipps/ai+overviews+in+drive+now+available+on+mobile/</link>
<pubDate>Tue, 30 Jun 2026 23:11:54 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>In April, we announced the <a href="https://workspaceupdates.googleblog.com/2026/04/ai-overviews-in-drive-now-generally-available.html" target="_blank">general availability for Drive AI Overviews in Drive</a> on the web. We’re now bringing this feature to the Drive Android and iOS apps.</p><p>Instead of searching through endless files and opening dozens of tabs to find the information you need, you can now get instant answers right at the top of your search results. Gemini does the heavy lifting for you, scanning your documents to provide clear, reliable summaries.</p><p>Here is how it helps you work smarter:</p><p></p><ul><li><b>See the big picture: </b>Get a quick summary of information pulled from multiple files without needing to open each one.</li><li><b>Ask naturally:</b> There’s no need to use complicated search tricks. Just ask a question as you would to a colleague, like "What’s in our Spring 2026 catalog?"</li><li><b>Get the right answer:</b> Gemini automatically understands what you’re looking for, whether it’s a quick fact, a project summary, or a list of specific documents, and adjusts its response to match.</li><li><b>Dig deeper with ease:</b> If you need more information, you can go from a quick summary to a deeper conversation with Ask Gemini in just one click.</li><li><b>Control your AI Overviews scope:</b> Use AI Overview search settings to choose which Google Workspace apps Gemini uses to find files and generate AI Overviews.</li></ul><p></p><p>This feature will roll out in English and an additional 28 languages (<a href="https://support.google.com/docs/answer/14925782#zippy=%2Cgemini-in-drive-side-panel" target="_blank">the same as those supposed for Gemini in Drive side panel</a>) over the next several weeks.</p><h3>Getting started</h3><p></p><ul><li><b>Admins:</b> This feature is available by default if <a href="https://knowledge.workspace.google.com/admin/gemini/manage-access-to-gemini-features-in-workspace-services" target="_blank">Gemini for Workspace in Drive is enabled</a>.</li><li><b>End users: </b>You must have <a href="https://support.google.com/mail/answer/15604322?sjid=17363988672514456782-NA#gw&amp;zippy=%2Csmart-features-in-google-workspace%2Cwhat-are-googles-legal-bases-of-processing-for-users-in-the-european-economic-area-united-kingdom-or-switzerland%2Chow-long-is-your-workspace-content-activity-used-to-provide-smart-features-and-to-improve-these-features" target="_blank">Workspace smart features</a> enabled to use AI Overviews in Drive. Visit the Help Center to learn more about <a href="https://support.google.com/drive/answer/16685111" target="_blank">getting answers directly in Drive search</a>.</li></ul><p></p><h3>Rollout pace</h3><p></p><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid and Scheduled Release domains:</a> Extended rollout (potentially longer than 15 days for feature visibility) started on June 26, 2026</li></ul><p></p><h3>Availability</h3><p></p><ul><li><b>Business: </b>Business Standard and Plus</li><li><b>Enterprise: </b>Enterprise Standard and Plus</li><li><b>Consumer:</b> Google AI Pro and Ultra</li><li><b>AI Add-ons: </b>Google AI Pro for Education</li></ul><p></p><h3>Resources</h3><p></p><ul><li>Google Help: <a href="https://support.google.com/drive/answer/16685111" target="_blank">Search &amp; retrieve your files in Drive with Gemini</a></li></ul><p></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Ask Gemini in Drive now available on mobile]]></title>
<description><![CDATA[In April, we announced the general availability of Ask Gemini in Drive on the web. We’re now bringing this feature to the Drive Android and iOS apps.Ask Gemini in Drive offers you a dedicated, immersive workspace designed for deep focus. You can now engage in high-context, multi-turn conversation...]]></description>
<link>https://tsecurity.de/de/3636630/it+betriebssysteme/web+tipps/ask+gemini+in+drive+now+available+on+mobile/</link>
<pubDate>Tue, 30 Jun 2026 20:53:10 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>In April, we announced the <a href="https://workspaceupdates.googleblog.com/2026/04/ask-gemini-in-drive-now-generally-available.html" target="_blank">general availability of Ask Gemini in Drive</a> on the web. We’re now bringing this feature to the Drive Android and iOS apps.</p><p>Ask Gemini in Drive offers you a dedicated, immersive workspace designed for deep focus. You can now engage in high-context, multi-turn conversations to efficiently explore and understand content across Drive, other Workspace apps, and the web.</p><p>Key features include:</p><p></p><ul><li><b>Dedicated conversations: </b>Engage in focused discussions about specific sets of files and folders. By grounding your questions in the relevant content, you get more precise, actionable answers.</li><li><b>Persistent conversation history:</b> Easily pick up where you left off. Your past chats are saved, allowing you to quickly revisit previous insights about specific folders or projects without starting over.</li><li><b>Secure and compliant: </b>Ask Gemini in Drive is built directly into the Drive architecture, it never copies or replicates your files. It honors your existing data protection and security controls, including access permissions, DLP policies, and IRM, ensuring Gemini only accesses content you are authorized to see.</li></ul><p></p><p>This feature will roll out in English and an <a href="https://support.google.com/docs/answer/14925782#zippy=%2Cgemini-in-drive-side-panel" target="_blank">additional 28 languages</a> over the next several weeks.</p><h3>Getting started</h3><p></p><ul><li><b>Admins: </b>This feature is available by default if <a href="https://knowledge.workspace.google.com/admin/gemini/manage-access-to-gemini-features-in-workspace-services" target="_blank">Gemini for Workspace in Drive is enabled</a>.</li><li><b>End users: </b>You must have <a href="https://support.google.com/mail/answer/15604322?sjid=17363988672514456782-NA#gw&amp;zippy=%2Csmart-features-in-google-workspace%2Cwhat-are-googles-legal-bases-of-processing-for-users-in-the-european-economic-area-united-kingdom-or-switzerland%2Chow-long-is-your-workspace-content-activity-used-to-provide-smart-features-and-to-improve-these-features" target="_blank">Workspace smart features</a> enabled to use Ask Gemini in Drive. Visit the Help Center to <a href="https://support.google.com/drive/answer/16963068?hl=en&amp;ref_topic=15113879&amp;sjid=14051016379905367535-NA#ask_gemini_in_drive" target="_blank">learn more about Ask Gemini in Drive</a>.</li></ul><p></p><h3>Rollout pace</h3><p></p><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid and Scheduled Release domains:</a> Extended rollout (potentially longer than 15 days for feature visibility) started on June 26, 2026</li></ul><p></p><h3>Availability</h3><p></p><ul><li><b>Business: </b>Business Standard and Plus</li><li><b>Enterprise: </b>Enterprise Standard and Plus</li><li><b>Consumer: </b>Google AI Pro and Ultra</li><li><b>AI Add-ons: </b>Google AI Pro for Education</li></ul><h3>Resources</h3><div><ul><li>Google Drive Help: <a href="https://support.google.com/drive/answer/16963068" target="_blank">Use Gemini in Drive for research &amp; analysis</a></li></ul></div><p></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Work with delegated Gmail accounts from mobile devices]]></title>
<description><![CDATA[Previously, users could only work with delegated Gmail accounts through the web interface. We are updating the Gmail app for iOS and Android to allow delegates to read, manage, and compose emails on behalf of a delegator directly from their mobile devices.This update removes a significant barrier...]]></description>
<link>https://tsecurity.de/de/3636629/it+betriebssysteme/web+tipps/work+with+delegated+gmail+accounts+from+mobile+devices/</link>
<pubDate>Tue, 30 Jun 2026 20:53:08 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Previously, users could only work with delegated Gmail accounts through the web interface. We are updating the Gmail app for iOS and Android to allow delegates to read, manage, and compose emails on behalf of a delegator directly from their mobile devices.<div><br></div><div>This update removes a significant barrier for employees who rely on mobile devices for their daily productivity. For example, an administrative assistant can seamlessly handle urgent communications for an executive while away from the office, without needing to find a desktop computer.</div><div><br></div><div>When using the Gmail mobile app, delegates can now:</div><div><br></div><div><ul><li>Switch between their own inbox and delegated accounts.</li><li>View unread message counts for delegated inboxes from the account menu.</li><li>See emails intermingled across delegated accounts and their own account using the mobile “All inboxes” view.</li><li>Send messages that allow recipients to view the specific "sent by" information in the mobile experience. </li></ul></div><div>Administrators retain full control over delegation settings, including the ability to restrict delegation to specific organizational units. The mobile experience adheres to existing delegation policies and limits, such as supporting up to 1,000 unique delegates per account and 40 concurrent users. Delegators do not need to perform any additional setup to enable mobile access for their existing delegates.</div><h3>Getting started</h3><div><ul><li><b>Admins: </b>There is no admin control for this specific mobile feature; it follows <a href="https://knowledge.workspace.google.com/admin/users/delegate-a-users-email-address" target="_blank">existing delegation settings</a> that you’ve configured for the web experience.</li><li><b>End users: </b>To access a delegated account, ensure you have first been granted access via the Gmail web settings. Once granted, tap your profile picture in the Gmail app on Android or iOS and select the delegated account from the list. Visit the Help Center to <a href="https://support.google.com/mail/answer/138350" target="_blank">learn more about delegating and collaborating on email</a>.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Rolling out now with expected completion by July 8, 2026 (Android), and July 29, 2026 (iOS)</li></ul></div><h3>Availability</h3><div><ul><li>Available in early July to all Google Workspace customers, Workspace Individual subscribers, and users with personal Google accounts</li></ul></div><h3>Resources</h3><div><ul><li>Google Workspace Admin Help: <a href="https://knowledge.workspace.google.com/admin/gmail/let-users-delegate-access-to-a-gmail-account" target="_blank">Let users delegate access to a Gmail account</a></li><li>Google Help: <a href="https://support.google.com/mail/answer/138350" target="_blank">Delegate and collaborate on email</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Create fully native and editable presentations with Gemini in Google Slides]]></title>
<description><![CDATA[You can now create a full, multi-slide presentation using Gemini in Google Slides. With a single prompt, you can ground the presentation in existing content from Google Drive, match the style of another presentation, and build fully editable slides, allowing you to make any necessary adjustments....]]></description>
<link>https://tsecurity.de/de/3636253/it+betriebssysteme/web+tipps/create+fully+native+and+editable+presentations+with+gemini+in+google+slides/</link>
<pubDate>Tue, 30 Jun 2026 18:28:37 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>You can now create a full, multi-slide presentation using Gemini in Google Slides. With a single prompt, you can ground the presentation in existing content from Google Drive, match the style of another presentation, and build fully editable slides, allowing you to make any necessary adjustments. Gemini will also suggest relevant files, emails, and chats that you can choose to add to enrich your presentation.</p><p>Try the following to create more relevant, compelling presentations in less time:</p><p></p><ul><li><b>Add a prompt: </b>In the Slides side panel, add a prompt to generate a presentation.</li><li><b>Ground it in your content: </b>Add as many reference files directly from Drive as you need to provide context.</li><li><b>Stay on-brand: </b>Attach an existing deck to use as a style reference to ensure your presentation matches your desired look and feel.</li><li><b>Refine the plan for your presentation:</b> Answer any follow-up questions to refine the presentation’s tone, style, content, or audience. You will also have the chance to edit or approve the presentation outline before the actual slides are created.</li></ul><p></p><p><b>Note: </b>At launch, this feature will be supported in English only.</p><p><br></p><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9ieH_V4_6ICIfiAcF5Ns3G_iaCIJ_sCMlWG78ETxh1H92l4M59Y4tM_A9_l_2gir8X6we5LcKwEfe_deeO06c5KkOMGr-jbJ8SkAM1dRoW84XxfDlt6gNjiim7myG0sqmx-kn4_CbepuiWlpsjZjkcSQ5HDvdKciW61NPeKkvTLlwZUn_NJIggNSibqo/s1236/Create%20fully%20native%20and%20editable%20presentations%20with%20Gemini%20in%20Google%20Slides%20-%206541%20-%202.gif" imageanchor="1"><img border="0" data-original-height="769" data-original-width="1236" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9ieH_V4_6ICIfiAcF5Ns3G_iaCIJ_sCMlWG78ETxh1H92l4M59Y4tM_A9_l_2gir8X6we5LcKwEfe_deeO06c5KkOMGr-jbJ8SkAM1dRoW84XxfDlt6gNjiim7myG0sqmx-kn4_CbepuiWlpsjZjkcSQ5HDvdKciW61NPeKkvTLlwZUn_NJIggNSibqo/s1600/Create%20fully%20native%20and%20editable%20presentations%20with%20Gemini%20in%20Google%20Slides%20-%206541%20-%202.gif"></a></div><h3>Getting started</h3><p></p><ul><li><b>Admins: </b>There is no admin control for this feature.</li><li><b>End users: </b>Visit the Help Center to <a href="https://support.google.com/docs/answer/17111393" target="_blank">learn more about generating a presentation with Gemini</a>.</li></ul><p></p><p><i>Note: Through at least August 1, 2026, Workspace customers will get promotional access to higher limits for creating multi-slide presentations using Gemini in Google Slides, allowing users to experiment with this feature. Users will see a notification when they use this feature to inform them of the limited higher promotional access period. Per-user usage limits will apply after that date; we’ll provide more information in the <a href="https://support.google.com/a?p=limits" target="_blank">Help Center</a> in advance of updated usage limits going into effect.</i></p><h3>Rollout pace</h3><p></p><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Extended rollout (potentially longer than 15 days for feature visibility) started on June 29, 2026</li></ul><p></p><h3>Availability</h3><p></p><ul><li><b>Business: </b>Business Standard and Plus</li><li><b>Enterprise: </b>Enterprise Standard and Plus</li><li><b>Consumer: </b>Google AI Pro and Ultra</li><li><b>Education Add-ons:</b> Google AI Pro for Education</li><li><b>Other Add-ons: </b>AI Expanded Access*</li></ul><p></p><p><i>*Once promotional limits are no longer in effect, users with AI Expanded Access add-on licenses will have <a href="https://support.google.com/a?p=limits" target="_blank">higher limits on usage</a> of Gemini in Slides.</i></p><h3>Resources</h3><p></p><ul><li>Google Slides Help: <a href="https://support.google.com/docs/answer/17111393" target="_blank">Generate presentations with Gemini in Google Slides</a></li><li>Google Workspace Updates Blog: <a href="https://workspace.google.com/blog/product-announcements/reimagining-content-creation" target="_blank">Reimagining content creation with Gemini in Google Docs, Sheets, Slides, and Drive</a></li></ul><p></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Assign mobile device management admin privileges based on organizational unit]]></title>
<description><![CDATA[We’re giving admins more granular control over how mobile device management privileges are delegated. Specifically, admins can be assigned privileges for specific organizational units (OUs), adding another layer of security by scoping access only to necessary OUs.Previously available in beta, we’...]]></description>
<link>https://tsecurity.de/de/3634112/it+betriebssysteme/web+tipps/assign+mobile+device+management+admin+privileges+based+on+organizational+unit/</link>
<pubDate>Mon, 29 Jun 2026 23:27:14 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[We’re giving admins more granular control over how mobile device management privileges are delegated. Specifically, admins can be assigned privileges for specific organizational units (OUs), adding another layer of security by scoping access only to necessary OUs.<div><br></div><div>Previously available in beta, we’re now making this feature generally available, with improvements to the way devices are displayed to help admins view and manage their devices more efficiently.</div><div><br></div><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh28m10sH-ewzhzFQ_ch_2wqOHGiG5sqvk4JbjCr8DaNAvCDOO1qqBqTMTTls_r_BdekKtz3WM3_hlufYye23JAwJgqImM_uV0uSyb50qEWHyBYzikHKgVIm38L9erdlQXQS8U1TbpSxXvfr8y9BXw_6iZ8GLRNaGjHbUu-8_2cKjima2OoaXKtAiiMvrc/s960/Assign%20mobile%20device%20management%20admin%20privileges%20based%20on%20organizational%20unit%20-%206818%20-%201.gif"><img border="0" data-original-height="416" data-original-width="960" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh28m10sH-ewzhzFQ_ch_2wqOHGiG5sqvk4JbjCr8DaNAvCDOO1qqBqTMTTls_r_BdekKtz3WM3_hlufYye23JAwJgqImM_uV0uSyb50qEWHyBYzikHKgVIm38L9erdlQXQS8U1TbpSxXvfr8y9BXw_6iZ8GLRNaGjHbUu-8_2cKjima2OoaXKtAiiMvrc/s16000/Assign%20mobile%20device%20management%20admin%20privileges%20based%20on%20organizational%20unit%20-%206818%20-%201.gif"></a></div><br><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvVuERPQlJ9OBva_YJc3m8MvIaYHfM7yhofwhV_k1m0WV2wsL1QFF1YEnl0PnVFyV0H9VPqMLwd8Ly4hQoe7J209BYEE8VG-dNZ17fXFiZr3tX4MMe4Y4O-pAoIOk6gzPwxb2eyMwuj73LTte8u8iNhCkROMQFUgWN0NHeEUVUw-juxL_sZEoRtDpSa4w/s960/Assign%20mobile%20device%20management%20admin%20privileges%20based%20on%20organizational%20unit%20-%206818%20-%202.gif"><img border="0" data-original-height="504" data-original-width="960" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvVuERPQlJ9OBva_YJc3m8MvIaYHfM7yhofwhV_k1m0WV2wsL1QFF1YEnl0PnVFyV0H9VPqMLwd8Ly4hQoe7J209BYEE8VG-dNZ17fXFiZr3tX4MMe4Y4O-pAoIOk6gzPwxb2eyMwuj73LTte8u8iNhCkROMQFUgWN0NHeEUVUw-juxL_sZEoRtDpSa4w/s16000/Assign%20mobile%20device%20management%20admin%20privileges%20based%20on%20organizational%20unit%20-%206818%20-%202.gif"></a></div><br><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container"><tbody><tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYek4bVpvoiFi_-S_82VPGTERq_o71OISjVSZH-7-dwFBCHfkQweP1llqHAjeN2aSs7UVSf9lmluGu7ksGgPu8DEm2o_hQAPwyr78GG4GDX0_0n5LwXvknQdfIoFexChlFd8KjYbEUyKoEV0duMFAy2o7Jrh9DxxG89TM8QCVNnzyMay0pMRxCTmo7hbo/s960/Assign%20mobile%20device%20management%20admin%20privileges%20based%20on%20organizational%20unit%20-%206818%20-%203.gif"><img border="0" data-original-height="453" data-original-width="960" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYek4bVpvoiFi_-S_82VPGTERq_o71OISjVSZH-7-dwFBCHfkQweP1llqHAjeN2aSs7UVSf9lmluGu7ksGgPu8DEm2o_hQAPwyr78GG4GDX0_0n5LwXvknQdfIoFexChlFd8KjYbEUyKoEV0duMFAy2o7Jrh9DxxG89TM8QCVNnzyMay0pMRxCTmo7hbo/s16000/Assign%20mobile%20device%20management%20admin%20privileges%20based%20on%20organizational%20unit%20-%206818%20-%203.gif"></a></td></tr><tr><td class="tr-caption"><i>Example experience for an admin with OU-level permissions</i></td></tr></tbody></table><h3>Getting started</h3><div><ul><li><b>Admins:</b> Visit the Help Center to learn more about <a href="https://support.google.com/a/answer/6129577?hl=en&amp;ref_topic=9832445&amp;sjid=17865051418960327865-NA" target="_blank">administrator roles</a> and <a href="https://knowledge.workspace.google.com/admin/devices/delegate-device-management-administrator-privileges" target="_blank">delegating device management administrator privileges</a>.</li><li><b>End users:</b> There is no end user impact or action required.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Full rollout (1–3 days for feature visibility)  starting on June 29, 2026</li></ul></div><h3>Availability</h3><div><ul><li>Available to all Google Workspace customers</li></ul></div><h3>Resources</h3><div><ul><li>Google Workspace Admin Help: <a href="https://support.google.com/a/answer/6129577" target="_blank">Create an admin role for an organizational unit</a></li><li>Google Workspace Admin Help: <a href="https://knowledge.workspace.google.com/admin/devices/delegate-device-management-administrator-privileges" target="_blank">Delegate device management administrator privileges</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Data regions support for the Gemini app now available]]></title>
<description><![CDATA[Beginning today, the Gemini app adheres to your organization’s data regionalization requirements. As with Google Workspace, admins have the flexibility to configure controls for EU storage and processing, US storage and processing, or both, including granular settings down to the organizational u...]]></description>
<link>https://tsecurity.de/de/3634111/it+betriebssysteme/web+tipps/data+regions+support+for+the+gemini+app+now+available/</link>
<pubDate>Mon, 29 Jun 2026 23:27:13 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Beginning today, the Gemini app adheres to your organization’s data regionalization requirements. As with Google Workspace, admins have the flexibility to configure controls for EU storage and processing, US storage and processing, or both, including granular settings down to the organizational unit (OU) level.<div><br></div><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhI7BAja-5-rKJfB7Mz-7PKh-_OFEKnTRl0Kxo41HEUbMV9ebrqT_poUZcPETp9EJY3ELoKB54s7PiOiVhqa-SbohW1szV9zz0F_hOXPmC8PE1E7UmbFpAHPglIN1oQeqtOR2LgXGYMifA6tWqPil2sRiFhryOXxh1YYVdE_K3k8_k1FCgak6SCSAxI7tI/s1095/Data%20regions%20support%20for%20the%20Gemini%20app%20now%20available%20-%206406.gif" imageanchor="1"><img border="0" data-original-height="627" data-original-width="1095" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhI7BAja-5-rKJfB7Mz-7PKh-_OFEKnTRl0Kxo41HEUbMV9ebrqT_poUZcPETp9EJY3ELoKB54s7PiOiVhqa-SbohW1szV9zz0F_hOXPmC8PE1E7UmbFpAHPglIN1oQeqtOR2LgXGYMifA6tWqPil2sRiFhryOXxh1YYVdE_K3k8_k1FCgak6SCSAxI7tI/s16000/Data%20regions%20support%20for%20the%20Gemini%20app%20now%20available%20-%206406.gif"></a></div><div><div><br></div><div>Data regions are critical for ensuring many customers can meet their own internal requirements, as well as other legal, regulatory, and data sovereignty requirements by controlling the geographical location of their data at rest. Expanding these controls to the Gemini app allows our customers to adopt Gemini broadly in their organization with confidence that their data is being processed and stored in the location they require. </div><h3>Getting started</h3><div><ul><li><b>Admins: </b>Visit the Help Center to learn more about <a href="https://support.google.com/a/answer/14316863" target="_blank">data regions</a>, <a href="https://support.google.com/a/answer/14310028" target="_blank">choosing a geographic location for your data</a>, <a href="https://support.google.com/a/answer/14310030" target="_blank">setting up advanced settings for data regions</a>, and <a href="https://support.google.com/a?p=data-covered-region-policy" target="_blank">what data is covered by data regions</a>.</li><li><b>End users: </b>There is no end user setting for this feature.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Available now</li></ul></div><h3>Availability</h3><div><ul><li><b>Enterprise:</b> Enterprise Plus (provides in-region processing and storage capabilities)</li><li><b>Education: </b>Education Plus and Education Standard (provides in-region storage capabilities only)</li><li><b>Other Editions:</b> Frontline Plus (provides in-region processing and storage capabilities)</li></ul></div><h3>Resources</h3><div><ul><li>Google Workspace Admin Help: <a href="https://support.google.com/a/answer/7630496?hl=en&amp;ref_topic=7631290&amp;sjid=15537236112090055856-NA" target="_blank">Data regions: Choose a geographic location for your data</a></li><li>Google Workspace Admin Help: <a href="https://support.google.com/a/answer/9223653" target="_blank">What data is covered by a data region policy?</a></li><li>Google Workspace Admin Help: <a href="https://support.google.com/a/answer/13880647" target="_blank">About Assured Controls and Assured Controls Plus</a></li></ul></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Educators and students can now share Gemini Canvas creations directly to Google Classroom]]></title>
<description><![CDATA[Educators and students of all ages can now seamlessly attach Gemini Canvas artifacts, like websites, quizzes, interactive games, infographics, and more, to Google Classroom assignments and posts. Right from Gemini Canvas, users can click on the “Share to to Classroom” button. This update allows u...]]></description>
<link>https://tsecurity.de/de/3633918/it+betriebssysteme/web+tipps/educators+and+students+can+now+share+gemini+canvas+creations+directly+to+google+classroom/</link>
<pubDate>Mon, 29 Jun 2026 21:41:58 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Educators and students of all ages can now seamlessly attach Gemini Canvas artifacts, like websites, quizzes, interactive games, infographics, and more, to Google Classroom assignments and posts. Right from Gemini Canvas, users can click on the “Share to to Classroom” button. This update allows users to enrich their classroom communication and coursework by embedding interactive materials directly into their existing workflows.</p><p>By removing the friction of exporting or linking external files, this feature helps teachers diversify their lesson materials and enables students to share creative outputs more efficiently. The integration ensures that rich, interactive media is easily accessible to everyone in the class, supporting a more engaging and dynamic digital learning environment.</p><p><br></p><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKRMOyE9HCB_KsHRTFVCU1UN8Fz5K_UyEZHp9zbxzPmoNNUJ7NsWTnrc-96qMqt7L32JiDVKPyB-WXvYhQ_Kp9TYNQuIClbeWAQqhwomMdDkv7hcBW-_iwjb5aYSez4a4q8ARl24XM24K8omJ5_qsQXDvUhqdmolfWgCNbU1nzpm6MptmeBRNbsW74ucY/s1412/Educators%20and%20students%20can%20now%20share%20Gemini%20Canvas%20creations%20directly%20to%20Google%20Classroom.gif" imageanchor="1"><img border="0" data-original-height="861" data-original-width="1412" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKRMOyE9HCB_KsHRTFVCU1UN8Fz5K_UyEZHp9zbxzPmoNNUJ7NsWTnrc-96qMqt7L32JiDVKPyB-WXvYhQ_Kp9TYNQuIClbeWAQqhwomMdDkv7hcBW-_iwjb5aYSez4a4q8ARl24XM24K8omJ5_qsQXDvUhqdmolfWgCNbU1nzpm6MptmeBRNbsW74ucY/s16000/Educators%20and%20students%20can%20now%20share%20Gemini%20Canvas%20creations%20directly%20to%20Google%20Classroom.gif"></a></div><h3>Getting started</h3><p></p><ul><li><b>Admins:</b></li><ul><li>The ability to share Gemini Canvas artifacts will be ON by default and can be managed via a <a href="https://knowledge.workspace.google.com/admin/generative-ai/gemini-app/turn-conversation-sharing-on-or-off" target="_blank">new Admin console setting</a>. Additionally, sharing is governed by your organization’s existing Drive sharing policies. If Drive content is set to be shareable outside the organization, your Gemini assets will be as well. Visit the Help Center to <a href="https://knowledge.workspace.google.com/admin/gemini/turn-conversation-sharing-on-or-off" target="_blank">learn more</a>.</li><li>To share Gemini Canvas artifacts to Google Classroom, students and educators must also be in a group or OU with <a href="https://support.google.com/a/answer/14571493" target="_blank">Gemini</a> set to On. Visit the Help Center to learn more about <a href="https://knowledge.workspace.google.com/admin/gemini/turn-the-gemini-app-on-or-off" target="_blank">turning Gemini on or off for users</a>.</li></ul><li><b>End users:</b> There is no end user setting for this feature. If enabled by your admin, you can share your Gemini canvases and media to Classroom, select Share &gt; Share to Classroom &gt; select the class and/or assignment you want to share it with. Visit the Help Center to <a href="https://support.google.com/gemini/?hl=en#topic=15280100" target="_blank">learn more about Gemini</a>.</li></ul><p></p><h3>Rollout pace</h3><p></p><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Available now</li></ul><p></p><h3>Availability</h3><p></p><ul><li><b>Education: </b>Education Fundamentals, Standard, and Plus</li></ul><p></p><h3>Resources</h3><p></p><ul><li>Google Workspace Updates Blog: <a href="https://workspaceupdates.googleblog.com/2026/04/share-chats-canvases-and-generated-media-from-the-Gemini-app-securely-via-Google-Drive.html" target="_blank">Share chats, canvases, and generated media from the Gemini app securely via Google Drive</a></li><li>Google Workspace Admin Help: <a href="https://knowledge.workspace.google.com/admin/gemini/turn-conversation-sharing-on-or-off" target="_blank">Turn conversation sharing on or off</a></li><li>Google Workspace Admin Help: <a href="https://knowledge.workspace.google.com/admin/gemini/turn-the-gemini-app-on-or-off" target="_blank">Turn the Gemini app on or off</a></li></ul><p></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Updated admin setting for improved video quality in Google Meet]]></title>
<description><![CDATA[In April 2026, we updated Meet to improve video quality on high-resolution displays. We’re now updating the way the Admin console setting that limits video bandwidth works to reduce data usage and improve call quality.Previously, the ‘Limit video bandwidth’ setting only limited video bandwidth on...]]></description>
<link>https://tsecurity.de/de/3633721/it+betriebssysteme/web+tipps/updated+admin+setting+for+improved+video+quality+in+google+meet/</link>
<pubDate>Mon, 29 Jun 2026 19:56:41 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>In April 2026, we updated Meet to <a href="https://workspaceupdates.googleblog.com/2026/04/improved-video-quality-on-high-resolution-displays-in-Google-Meet.html" target="_blank">improve video quality on high-resolution displays</a>. We’re now updating the way the Admin console setting that limits video bandwidth works to reduce data usage and improve call quality.</p><p>Previously, the ‘Limit video bandwidth’ setting only limited video bandwidth on the uplink; it now limits bandwidth on the downlink as well. In addition, we’re improving quality for two-person calls by increasing the uplink bandwidth usage in this scenario.</p><p><br></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container"><tbody><tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKUn4UKHD_HjxSViNQz3Tc632bVi6wUqkyfhdn4B3bDWIPG_kfXMKsiFcxxRPMk4-ujRk6sA4B99dQXqqraGiaQEfd3XTlzoF2E78lWEwl0gFomYcTG8qfYLL40Xv8MuAC39u8TOqFTJMBq1ZGzzJ1AdGH5I6I-BetwcqcTGOCHlPaxALbq0dKTKajr7Y/s2048/Updated%20admin%20setting%20for%20improved%20video%20quality%20in%20Google%20Meet%20-%206798%20-%201.png"><img border="0" data-original-height="988" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKUn4UKHD_HjxSViNQz3Tc632bVi6wUqkyfhdn4B3bDWIPG_kfXMKsiFcxxRPMk4-ujRk6sA4B99dQXqqraGiaQEfd3XTlzoF2E78lWEwl0gFomYcTG8qfYLL40Xv8MuAC39u8TOqFTJMBq1ZGzzJ1AdGH5I6I-BetwcqcTGOCHlPaxALbq0dKTKajr7Y/s16000/Updated%20admin%20setting%20for%20improved%20video%20quality%20in%20Google%20Meet%20-%206798%20-%201.png"></a></td></tr><tr><td class="tr-caption"><i>Updated setting for Meet default video quality</i></td></tr></tbody></table><h3>Getting started</h3><p></p><ul><li><b>Admins:</b> Your existing settings will remain applied.  Visit the Help Center to learn more about <a href="https://knowledge.workspace.google.com/admin/meet/prepare-your-network-for-meet-meetings-and-live-streams#defaultquality" target="_blank">configuring default video quality</a>.</li><li><b>End users:</b> There is no end user setting for this feature.</li></ul><p></p><h3>Rollout pace</h3><p></p><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Extended rollout (potentially longer than 15 days for feature visibility) starting on June 29, 2026</li></ul><p></p><h3>Availability</h3><p></p><ul><li>Available to all Google Workspace customers</li></ul><p></p><h3>Resources</h3><p></p><ul><li>Google Admin Help: <a href="https://support.google.com/a/answer/7304109" target="_blank">Manage Meet settings (for admins)</a></li><li>Google Admin Help: <a href="https://knowledge.workspace.google.com/admin/meet/prepare-your-network-for-meet-meetings-and-live-streams#defaultquality" target="_blank">Configuring default video quality</a></li></ul><p></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Google Workspace Weekly Recap - June 26, 2026]]></title>
<description><![CDATA[Troubleshoot formula errors quickly with Gemini in Google SheetsWe’re excited to introduce a new Gemini in Sheets capability that enables you to diagnose and fix formula errors in one click. When you encounter a formula error, Gemini can analyze the surrounding data structure to help provide an e...]]></description>
<link>https://tsecurity.de/de/3628382/it+betriebssysteme/web+tipps/google+workspace+weekly+recap+-+june+26+2026/</link>
<pubDate>Fri, 26 Jun 2026 20:54:41 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h3>Troubleshoot formula errors quickly with Gemini in Google Sheets</h3><div>We’re excited to introduce a new Gemini in Sheets capability that enables you to diagnose and fix formula errors in one click. When you encounter a formula error, Gemini can analyze the surrounding data structure to help provide an easy-to-understand explanation of the core issue alongside a corrected version of the formula. | <a href="https://workspaceupdates.googleblog.com/2026/06/troubleshoot-formula-errors-in-sheets.html" target="_blank">Learn more</a>.</div><h3>Enhanced security monitoring with expanded Admin password reset alerts</h3><div>In Alert Center, we are expanding the existing “Super Admin password reset” alert into a broader Admin password reset alert. With this update, the alert will now cover password resets for all administrator roles within your organization. | <a href="https://workspaceupdates.googleblog.com/2026/06/enhanced-security-monitoring-with-expanded-Admin-password-reset-alerts.html" target="_blank">Learn more</a>.</div><h3>Join Google Meet calls from Safari on iOS devices</h3><div>Prior to this update, iOS users without the Gmail or Meet apps were unable to participate in Google Meet sessions on their mobile devices. Now, iOS mobile device users can join meetings directly through Safari, without needing to install an app. | <a href="https://workspaceupdates.googleblog.com/2026/06/join-google-meet-calls-from-safari-on-iOS-devices.html" target="_blank">Learn more</a>.</div><h3>Google Apps Script is now a Google Workspace core service with enterprise-grade data protection</h3><div>Google Apps Script is officially a Google Workspace core service. Covered under the Google Cloud Terms of Service and Google Workspace for Education Terms of Service, Apps Script now offers the same enterprise-grade data protection, robust administrative controls, and standard technical support that safeguards other core services. | <a href="https://workspaceupdates.googleblog.com/2026/06/google-apps-script-workspace-core-service.html" target="_blank">Learn more</a>.</div><h3>Connect to Google Meet hardware with room codes now in Early Preview</h3><div>Google Meet users can now connect to nearby conference room hardware by entering a 5-character room code on their personal device. Meet recently launched Connect Room using proximity-based detection to identify nearby hardware. | <a href="https://workspaceupdates.googleblog.com/2026/06/room-codes-google-meet-hardware-early-preview.html" target="_blank">Learn more</a>.</div><h3>Updates to Gemini in Google Classroom</h3><div>We are introducing several updates to the Gemini tab in Google Classroom designed to make its tools even more helpful for teachers. These changes make it easier for educators to collaborate with AI and create visual aids from any device, while expanding options for refining lesson plans. | <a href="https://workspaceupdates.googleblog.com/2026/06/updates-to-gemini-in-google-classroom.html" target="_blank">Learn more</a>.</div><h3>Stricter classifications for Google Groups to enhance data security and privacy</h3><div>Earlier this year, we announced changes to Google Groups to enhance data security and privacy. The changes, which are rolling out now. | <a href="https://workspaceupdates.googleblog.com/2026/06/stricter-classifications-for-google-groups-to-enhance-data-security-and-privacy.html" target="_blank">Learn more</a>.</div><h3>Read Along in Google Classroom is now available to all education users to support foundational literacy</h3><div>Read Along in Google Classroom, an AI-powered literacy tool that provides in-the-moment support to students as they read aloud, is now available to all Google Workspace for Education users at no cost. | <a href="https://workspaceupdates.googleblog.com/2026/06/read-along-in-google-classroom-is-now-available-to-all-education-users-to-support-foundational-literacy.html" target="_blank">Learn more</a>.</div><h3>Streamline your data backups with incremental exports for Google Workspace</h3><div>Google Workspace administrators can now utilize incremental exports when backing up organizational data. Instead of re-exporting their entire organization's data, admins can export frequent snapshots of their data into their organization’s own Google Cloud Storage (GCS) bucket. | <a href="https://workspaceupdates.googleblog.com/2026/06/streamline-your-data-backups-with-incremental-exports-for-Google-Workspace.html" target="_blank">Learn more</a>.</div><div><br></div><div><span><i>The announcements above were published on the Workspace Updates blog over the last week. Please refer to the original blog posts for complete details.</i></span></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Streamline your data backups with incremental exports for Google Workspace]]></title>
<description><![CDATA[Google Workspace administrators can now utilize incremental exports when backing up organizational data. Instead of re-exporting their entire organization's data, admins can export frequent snapshots of their data into their organization’s own Google Cloud Storage (GCS) bucket.Key benefits includ...]]></description>
<link>https://tsecurity.de/de/3627991/it+betriebssysteme/web+tipps/streamline+your+data+backups+with+incremental+exports+for+google+workspace/</link>
<pubDate>Fri, 26 Jun 2026 18:12:24 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Google Workspace administrators can now utilize incremental exports when backing up organizational data. Instead of re-exporting their entire organization's data, admins can export frequent snapshots of their data into their organization’s own <a href="https://cloud.google.com/storage/docs/buckets" target="_blank">Google Cloud Storage (GCS) bucket</a>.<div><br></div><div>Key benefits include faster completion times, reduced Google Cloud Storage consumption and costs, and the ability to establish more frequent backup schedules to mitigate the risk of potential data loss. </div><div><br></div><div>Specifically, admins can schedule automated exports for <b>Gmail, Drive, and Chat</b>, with the flexibility to scope data by <b>organizational unit (OU), group, or specific users</b>. They can initiate:</div><div><br></div><div><ul><li>Periodic full backups - establishing a baseline snapshot through regular full exports</li><ul><li>Quarterly (every 3 months)</li><li>Semi-annually (every 6 months)</li><li>Annually (every year)</li></ul></ul></div><div><ul><li>Frequent incremental backups - supplementing the baseline with frequent incremental backups, such as backing up data from the "last x days" every "y days"</li><ul><li>Capture data from the last 5 days, running every 3 days</li><li>Capture data from the last 7 days, running every 5 days</li></ul></ul><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container"><tbody><tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg2yfsbVCUG598Udv2pq8rd39eLjocnHD-OxXyhuyXtzOrB7HXTnEyqNsOl-ECulubijb3LAZrgt3pScCt2rJkTa9oFvBa5DCtJHK3MWX0ZGmA2HJeVWrGL0FZTeQ6A6DMBvHmosdeIFF1plsiqQI2ShGzHm5euA4YcU1aJ29HO4mo3jAyzkUgtJa8ZgI/s1054/Streamline%20your%20data%20backups%20with%20incremental%20exports%20for%20Google%20Workspace%20-%206604%20-%201.png"><img border="0" data-original-height="630" data-original-width="1054" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg2yfsbVCUG598Udv2pq8rd39eLjocnHD-OxXyhuyXtzOrB7HXTnEyqNsOl-ECulubijb3LAZrgt3pScCt2rJkTa9oFvBa5DCtJHK3MWX0ZGmA2HJeVWrGL0FZTeQ6A6DMBvHmosdeIFF1plsiqQI2ShGzHm5euA4YcU1aJ29HO4mo3jAyzkUgtJa8ZgI/s16000/Streamline%20your%20data%20backups%20with%20incremental%20exports%20for%20Google%20Workspace%20-%206604%20-%201.png"></a></td></tr><tr><td class="tr-caption"><br></td></tr></tbody></table><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container"><tbody><tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivsbp1i6rZqqHUFCn-D1UBTiM-io11BNOXfmMKDMr1RkbgvspYtFDUqlLH4bjBco7RgybsRo_bKVEOmMnQZ87E4uGxBea6p5ky0VUwr3GyfuXTKT-Nrhed0-jcC32moGNrL8kpIu7qYzZBDNB4N5B-OhPkkotJIIBd6gUvHJo1Ow8e7URD7H7n3MFhFOc/s1060/Streamline%20your%20data%20backups%20with%20incremental%20exports%20for%20Google%20Workspace%20-%206604%20-%202.png"><img border="0" data-original-height="944" data-original-width="1060" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivsbp1i6rZqqHUFCn-D1UBTiM-io11BNOXfmMKDMr1RkbgvspYtFDUqlLH4bjBco7RgybsRo_bKVEOmMnQZ87E4uGxBea6p5ky0VUwr3GyfuXTKT-Nrhed0-jcC32moGNrL8kpIu7qYzZBDNB4N5B-OhPkkotJIIBd6gUvHJo1Ow8e7URD7H7n3MFhFOc/s16000/Streamline%20your%20data%20backups%20with%20incremental%20exports%20for%20Google%20Workspace%20-%206604%20-%202.png"></a></td></tr><tr><td class="tr-caption"><br></td></tr></tbody></table></div><h3>Getting started</h3><div><ul><li><b>Admins: Super Admins:</b> Visit the Help Center to learn more about <a href="https://support.google.com/a/answer/100458" target="_blank">exporting your organization’s data</a> and <a href="https://knowledge.workspace.google.com/p/incremental-data-export" target="_blank">incremental exports</a>.</li><li><b>End users:</b> There is no end user impact or action required.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Extended rollout (potentially longer than 15 days for feature visibility) starting on June 24, 2026</li></ul></div><h3>Availability</h3><div><ul><li><b>Enterprise: </b>Enterprise Plus customers with <a href="https://support.google.com/a/answer/13880647" target="_blank">Assured Controls and Assured Controls Plus</a></li></ul></div><h3>Resources</h3><div><ul><li>Google Workspace Admin Help: <a href="https://knowledge.workspace.google.com/p/incremental-data-export" target="_blank">Set up an incremental data export</a></li><li>Google Workspace Admin Help: <a href="https://knowledge.workspace.google.com/admin/migrate/export-all-your-organizations-data" target="_blank">Export all your organization's data</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Read Along in Google Classroom is now available to all education users to support foundational literacy]]></title>
<description><![CDATA[Read Along in Google Classroom, an AI-powered literacy tool that provides in-the-moment support to students as they read aloud,  is now available to all Google Workspace for Education users at no cost. We believe this will open access to literacy tools for millions of students, and help educators...]]></description>
<link>https://tsecurity.de/de/3625460/it+betriebssysteme/web+tipps/read+along+in+google+classroom+is+now+available+to+all+education+users+to+support+foundational+literacy/</link>
<pubDate>Thu, 25 Jun 2026 19:28:15 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Read Along in Google Classroom, an AI-powered literacy tool that provides in-the-moment support to students as they read aloud,  is now available to all Google Workspace for Education users at no cost. We believe this will open access to literacy tools for millions of students, and help educators and education leaders achieve better learning outcomes and progress on foundational literacy.<div><br></div><div>Read Along is designed to build students' speaking, listening, and decoding skills. It offers flexible learning modes, allowing students to practice aloud with real-time feedback, listen to stories, or enjoy books independently. To help emerging students transition from simply "learning to read" to "reading to learn," Read Along includes questions directly in the material to continuously strengthen comprehension as well as decoding support through word-breakdown.</div><div><br></div><div>Educators can use Read Along in Google Classroom to provide personalized reading practice for every student. The insights dashboard showing individual student and class-wide progress can help inform instruction and make it easier to create tailored reading activities based on student needs.</div><div><br></div><div><b>With this update, all Google Workspace for Education users will have access to:</b></div><div><br></div><div><ul><li><b>A tailored reading experience in Google Classroom: </b>Educators can easily create interactive reading activities right <a href="https://support.google.com/edu/classroom/answer/14174515?hl=en-GB" target="_blank">within Classroom</a>, giving students in-the-moment support while getting actionable insights related to their reading skills.</li><li><b>Real-time reading support: </b>Learners get help with pronunciation as they read aloud and get word breakdown support.</li><li><b>Class and student insights to inform instruction: </b> View information on accuracy, speed, comprehension, phonics skills, and progress for individual students and the entire class.</li><li><b>An extensive content library:</b> Choose from over hundreds of books across eight languages: English, Spanish, Portuguese, Urdu, Arabic, Thai, Indonesian, and Malay. This includes content such as Heggerty decodables, ReadWorks articles for higher-grade learners, and localized publisher titles like Turma da Mônica in Brazil. </li><li><b>Multilingual support: </b>For students learning English, the reading buddy can provide real-time support in both English and their native language so they can practice their vocabulary. Native language support is available in Spanish, Portuguese, Urdu, Arabic, Indonesian, and Malay.</li><li><b>Story creation with Gemini: </b>With help from Gemini, educators can create differentiated reading activities tailored to phonics skills needing practice, specific topics, and reading levels.</li><li><b>Existing content: </b>Add existing class content to better tailor real-time student support and insights with Read Along.</li></ul></div><div>Advanced analytics, like viewing student’s progress over time or across assignments and the ability to extract data via BigQuery, are only available with Education Plus and Teaching &amp; Learning add-on.</div><h3>Getting started</h3><div><ul><li><b>Admins:</b> Read Along will be available by default and can be disabled at the domain and OU level. It can be enabled at the group level even if it is disabled at the OU level. Visit the Help Center to <a href="https://knowledge.workspace.google.com/admin/users/access/turn-read-along-on-or-off-for-users" target="_blank">learn more about turning Read Along on or off for users</a>.</li><li><b>End users: </b>Visit the Help Center to <a href="https://support.google.com/edu/classroom/answer/14174515" target="_blank">learn more about Read Along in Classroom</a>.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Rolling out now, with expected completion by July 3, 2026 </li></ul></div><h3>Availability</h3><div><ul><li><b>Education: </b>Education Fundamentals, Standard, and Plus</li><li><b>Education Add-ons: </b>Google AI Pro for Education; Teaching and Learning; Endpoint Education</li><li><b>Other Editions:</b> Nonprofits</li></ul></div><h3>Resources</h3><div><ul><li>Google Workspace Admin Help: <a href="https://knowledge.workspace.google.com/admin/users/access/turn-read-along-on-or-off-for-users" target="_blank">Turn Read Along on or off for users</a></li><li>Google Classroom Help: <a href="https://support.google.com/edu/classroom/answer/14174515" target="_blank">Read Along in Google Classroom</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Stricter classifications for Google Groups to enhance data security and privacy]]></title>
<description><![CDATA[Earlier this year, we announced changes to Google Groups to enhance data security and privacy. The changes, which are rolling out now, include:Stricter “internal” and “external” classifications for GroupsClearer visual indicators for whether a group contains external membersChanges to how emails ...]]></description>
<link>https://tsecurity.de/de/3622924/it+betriebssysteme/web+tipps/stricter+classifications+for+google+groups+to+enhance+data+security+and+privacy/</link>
<pubDate>Wed, 24 Jun 2026 23:55:42 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Earlier this year, we <a href="https://workspaceupdates.googleblog.com/2026/02/new-internal-and-external-membership-classifications.html" target="_blank">announced</a> changes to Google Groups to enhance data security and privacy. The changes, which are rolling out now, include:<div><br><div><ul><li>Stricter “internal” and “external” classifications for Groups</li><li>Clearer visual indicators for whether a group contains external members</li><li>Changes to how emails are shown within Google Groups</li><li>Additional settings granularity to control  who can add external users (admins only, or admins and end users) </li><li>Changes to how admins can add external users via Groups APIs</li></ul></div><div><b><br></b></div><div><b>API changes</b></div><div><b><br></b></div><div>While we originally announced that admins would have to change the classification of a group before being able to add external members to Groups marked as internal, we’re updating that behavior to prevent issues with synced groups. When an admin attempts to add an external member to an internal group via the Cloud Identity or Admin SDK Directory API, or when they sync data from a third-party identity provider via API, the group settings will be automatically updated to allow admins to add external members.</div><h3>Getting started</h3><div><ul><li><b>Admins:</b> To ensure a smooth transition, existing groups will be automatically classified based on their current membership, so there will not be any changes in access. You can <a href="https://knowledge.workspace.google.com/admin/groups/view-a-groups-members" target="_blank">review and adjust these labels</a> directly in the Admin console or via the Groups Settings API to match your organization's security needs.</li><li><b>End users: </b>There is no action required for end users.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Rolling out now, with expected completion by July 1, 2026 </li></ul></div><h3>Availability</h3><div><ul><li>Available to all Google Workspace customers</li></ul></div><h3>Resources</h3><div><ul><li>Google Workspace Admin Help: <a href="https://knowledge.workspace.google.com/admin/groups/changes-to-internal-and-external-classifications-in-google-groups?visit_id=639161942651030020-289600053&amp;rd=1" target="_blank">Changes to internal and external classifications in Google Groups</a></li></ul></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Updates to Gemini in Google Classroom]]></title>
<description><![CDATA[We are introducing several updates to the Gemini tab in Google Classroom designed to make its tools even more helpful for teachers. These changes make it easier for educators to collaborate with AI and create visual aids from any device, while expanding options for refining lesson plans.Mobile av...]]></description>
<link>https://tsecurity.de/de/3622850/it+betriebssysteme/web+tipps/updates+to+gemini+in+google+classroom/</link>
<pubDate>Wed, 24 Jun 2026 23:11:02 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[We are introducing several updates to the Gemini tab in Google Classroom designed to make its tools even more helpful for teachers. These changes make it easier for educators to collaborate with AI and create visual aids from any device, while expanding options for refining lesson plans.<div><br></div><div><b>Mobile availability</b></div><div>We know educators and students use Google Classroom on the go on their mobile devices, so we are excited to announce that the Gemini tab is now available in the Classroom Android and iOS apps, making these features more accessible to teachers and higher education students. For educators, the following features are available in the Classroom mobile app: Generate a quiz, Brainstorm project ideas, Craft a compelling hook, Tackle common misconceptions, and starter prompts for the Gemini app. All Gemini starter prompts and personal class notebooks in the student Gemini tab are available in the Classroom mobile app.</div><div><br></div><div><b>Tools to generate visual resources</b></div><div>Powered by Nano Banana 2, Google’s newest image generation model, these starter prompts help teachers create visuals that illustrate complex topics for students:</div><div><br></div><div><ul><li>Create an infographic</li><li>Draw a comic strip</li><li>Visualize a concept</li></ul></div><div><br></div><div>Teachers can also personalize three new starter prompts to generate a slide deck for a given concept and grade level using Gemini’s Canvas tool:</div><div><br></div><div><ul><li>Create a presentation</li><li>Create an interactive activity</li><li>Convert a file to Google slides</li></ul><div><br></div><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYXdbvdkkpDDa8PQoInhl-3-dh6wS5IPbLiNXxV5chyS2ZRvSvg_C4hSV0Atj7_JXFDxNQ7NpwdlSA2TvU6tx0k8ZupIIizM5KO_epnEGoc96WQ4WyvfJPLG14jGoahFXo3quF9PSzz4nTlVZ75SRe-14b4MPhsoHPgo0EoxZ-Yj2gTlxkrj44fI_zaBI/s3984/Updates%20to%20Gemini%20in%20Google%20Classroom.png" imageanchor="1"><img border="0" data-original-height="3984" data-original-width="2560" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYXdbvdkkpDDa8PQoInhl-3-dh6wS5IPbLiNXxV5chyS2ZRvSvg_C4hSV0Atj7_JXFDxNQ7NpwdlSA2TvU6tx0k8ZupIIizM5KO_epnEGoc96WQ4WyvfJPLG14jGoahFXo3quF9PSzz4nTlVZ75SRe-14b4MPhsoHPgo0EoxZ-Yj2gTlxkrj44fI_zaBI/s16000/Updates%20to%20Gemini%20in%20Google%20Classroom.png"></a></div></div><h3>Getting started</h3><div><ul><li><b>Admins:</b> As an administrator of your organization's Google Accounts, you can control who is allowed to use Gemini in Google Classroom to generate content and resources. These capabilities are only available to users who are <a href="https://support.google.com/edu/classroom/answer/6071551?hl=en&amp;ref_topic=11987113&amp;sjid=5080632148063304179-NC#zippy=" target="_blank">verified as teachers</a> and as 18 years of age or older in your institution’s <a href="https://support.google.com/a/answer/10651918" target="_blank">age-based access settings</a>. Visit the Help Center to learn about <a href="http://support.google.com/a/answer/16291887" target="_blank">managing access to Gemini in Classroom and the option to turn the service on or off for users in your Admin console</a>.</li><li><b>End users: </b>Navigate to the Gemini tab in the navigation bar in Google Classroom. When using generated content, you should always review the outputs as AI can make mistakes and refine the output so that it fits your context and local policies before assigning to students. Visit the Help Center to learn more about <a href="https://support.google.com/edu/classroom/answer/15410566" target="_blank">Gemini in Classroom</a>, and check out these <a href="https://docs.google.com/presentation/d/1MTyP-BBusYw2rHKE_lQ2QVDA7uT7ngYaGfBy9HypQdY/edit?slide=id.g39a340b9584_1285_8915#slide=id.g39a340b9584_1285_8915" target="_blank">resources for teachers, including this resource with tips and best practices for trying Gemini in Classroom</a>.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Available now</li></ul></div><h3>Availability</h3><div><ul><li><b>Education: </b>Education Fundamentals, Standard, and Plus</li></ul></div><h3>Resources</h3><div><ul><li>Google Workspace Admin Help: <a href="http://support.google.com/a/answer/16291887" target="_blank">Manage access to Gemini in Classroom</a></li><li>Google Classroom Help: <a href="https://support.google.com/edu/classroom/answer/15410566" target="_blank">Learn about Gemini in Classroom</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Connect to Google Meet hardware with room codes now in Early Preview]]></title>
<description><![CDATA[Google Meet users can now connect to nearby conference room hardware by entering a 5-character room code on their personal device. Meet recently launched Connect Room using proximity-based detection to identify nearby hardware. This update provides a reliable manual fallback when ultrasound is un...]]></description>
<link>https://tsecurity.de/de/3619518/it+betriebssysteme/web+tipps/connect+to+google+meet+hardware+with+room+codes+now+in+early+preview/</link>
<pubDate>Tue, 23 Jun 2026 22:24:37 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div>Google Meet users can now connect to nearby conference room hardware by entering a 5-character room code on their personal device. Meet recently launched <a href="https://workspaceupdates.googleblog.com/2026/04/seamlessly-join-meetings-on-google-meet-hardware-with-Connect-Room.html" target="_blank">Connect Room</a> using proximity-based detection to identify nearby hardware. This update provides a reliable manual fallback when ultrasound is unavailable or disabled. Users will see a "Connect with room code" button on their device’s pre-call screen, which allows them to enter the alphanumeric code displayed directly on the hardware’s screen.</div><div><br></div><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiXcJn715qdLaXM7JQeqs_yZpd-17G-7NuJBzdUBzyB7By2990R6z3JJ6q9mYYo5etMKsYeb0fKvEDZlYGy6Ljk-lhdwWIxsRDMmIUBUo5Qw1YBmoSRyxSNFuzmKupn7wsDt4W4qJT1kz-LnrUDB68p0cIBa3FTW2Nwfg6KeO3i0cesEe9_3C7_kPYhRA/s1141/Connect%20to%20Google%20Meet%20hardware%20with%20room%20codes%20-%206985.gif"><img border="0" data-original-height="640" data-original-width="1141" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiXcJn715qdLaXM7JQeqs_yZpd-17G-7NuJBzdUBzyB7By2990R6z3JJ6q9mYYo5etMKsYeb0fKvEDZlYGy6Ljk-lhdwWIxsRDMmIUBUo5Qw1YBmoSRyxSNFuzmKupn7wsDt4W4qJT1kz-LnrUDB68p0cIBa3FTW2Nwfg6KeO3i0cesEe9_3C7_kPYhRA/s16000/Connect%20to%20Google%20Meet%20hardware%20with%20room%20codes%20-%206985.gif"></a></div><div><br></div><div>This feature ensures that meetings remain accessible particularly for private or ad-hoc sessions where automated detection might fail. To maintain security and prevent accidental connections, users must physically confirm their presence by tapping the room hardware screen after entering the code. The room code itself is designed for clarity and security, refreshing every few minutes to ensure only those in the room can initiate the connection.</div><div><br></div><div>For IT administrators, this update reduces troubleshooting overhead by providing a built-in alternative for rooms with complex acoustic environments or restricted proximity settings. By streamlining the connection process, organizations can ensure that employees spend less time managing hardware and more time collaborating effectively.</div><div><br></div><div><b>Note: </b>This feature is only available to users in domains on the Rapid Release track attempting to connect to devices enrolled in <a href="https://knowledge.workspace.google.com/admin/meet-hardware/try-features-early-on-your-devices?visit_id=639160597773593743-1868804841&amp;rd=1" target="_blank">Early Preview</a>. We’ll provide an update on the Workspace Updates blog when we begin a broader rollout.</div><h3>Getting started</h3><div><ul><li><b>Admins: </b>Admins: To preview this feature, your domain must be on the <a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release track</a> and have devices enrolled in Early Preview. Visit the Help Center to <a href="https://knowledge.workspace.google.com/admin/meet-hardware/try-features-early-on-your-devices?visit_id=639160597773593743-1868804841&amp;rd=1" target="_blank">learn more about enabling Early Preview for your Meet hardware devices</a>.</li><li><b>End users: </b>Visit the Help Center to <a href="https://support.google.com/meet/answer/16765739?hl=en" target="_blank">learn more about connecting with room codes</a>.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release domains</a>: Rolling out now to Meet hardware devices enrolled in <a href="https://knowledge.workspace.google.com/admin/meet-hardware/try-features-early-on-your-devices?visit_id=639160597773593743-1868804841&amp;rd=1" target="_blank">Early Preview</a>, with expected completion by June 30, 2026</li></ul></div><h3>Availability</h3><div><ul><li>Available to all Google Workspace customers with Google Meet hardware devices</li></ul></div><h3>Resources</h3><div><ul><li>Google Meet Help: <a href="https://support.google.com/meet/answer/16765739" target="_blank">Use Connect room feature in Google Meet</a></li><li>Workspace Updates Blog: <a href="https://workspaceupdates.googleblog.com/2026/04/seamlessly-join-meetings-on-google-meet-hardware-with-Connect-Room.html" target="_blank">Seamlessly join meetings on Google Meet hardware with “Connect room”</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Join Google Meet calls from Safari on iOS devices]]></title>
<description><![CDATA[Prior to this update, iOS users without the Gmail or Meet apps were unable to participate in Google Meet sessions on their mobile devices. Now, iOS mobile device users can join meetings directly through Safari, without needing to install an app. The process is now seamless; individuals without a ...]]></description>
<link>https://tsecurity.de/de/3619183/it+betriebssysteme/web+tipps/join+google+meet+calls+from+safari+on+ios+devices/</link>
<pubDate>Tue, 23 Jun 2026 19:39:40 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Prior to this update, iOS users without the Gmail or Meet apps were unable to participate in Google Meet sessions on their mobile devices. Now, iOS mobile device users can join meetings directly through Safari, without needing to install an app. The process is now seamless; individuals without a Google account can simply provide their name to request entry into the call.<div><br></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container"><tbody><tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEit7fdth7XzrcoaoxCJHfJfYupsqS-KbHIp84qUqvh_O1Zc0d_1DDCmx_RwQjO1nss_pThngRgtOgcZecOlaaf0-LSUkVC8_n74DXDxnhMpzuC_F8pEfXnthna01IvM74lZBVewDCjrgt8R1vbTdW1nOpqwV1dw5wPOlADHuK6psZ8nf82YvJs3b41SyMk/s1391/Join%20Google%20Meet%20calls%20from%20Safari%20on%20iOS%20devices%20-%207015.gif" imageanchor="1"><img border="0" data-original-height="1391" data-original-width="640" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEit7fdth7XzrcoaoxCJHfJfYupsqS-KbHIp84qUqvh_O1Zc0d_1DDCmx_RwQjO1nss_pThngRgtOgcZecOlaaf0-LSUkVC8_n74DXDxnhMpzuC_F8pEfXnthna01IvM74lZBVewDCjrgt8R1vbTdW1nOpqwV1dw5wPOlADHuK6psZ8nf82YvJs3b41SyMk/w294-h640/Join%20Google%20Meet%20calls%20from%20Safari%20on%20iOS%20devices%20-%207015.gif" width="294"></a></td></tr><tr><td class="tr-caption"><i><br>In this animation, an iPhone user has received a link to join a Meet call. They click on the link and immediately join via their Safari browser.</i></td></tr></tbody></table><div><h3>Getting started</h3><div><ul><li><b>Admins: </b>There is no admin control for this feature.</li><li><b>End users:</b> If an iOS user attempts to join a Google Meet call and doesn’t have the Gmail or Meet app installed, they’ll be automatically directed to join via Safari.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Extended rollout (potentially longer than 15 days for feature visibility) starting on June 23, 2026</li></ul></div><h3>Availability</h3><div><ul><li>Available to all Google Workspace customers and users with personal Google accounts</li></ul></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Google Apps Script is now a Google Workspace core service with enterprise-grade data protection]]></title>
<description><![CDATA[Google Apps Script is officially a Google Workspace core service. Covered under the Google Cloud Terms of Service and Google Workspace for Education Terms of Service, Apps Script now offers the same enterprise-grade data protection, robust administrative controls, and standard technical support t...]]></description>
<link>https://tsecurity.de/de/3619182/it+betriebssysteme/web+tipps/google+apps+script+is+now+a+google+workspace+core+service+with+enterprise-grade+data+protection/</link>
<pubDate>Tue, 23 Jun 2026 19:39:39 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Google Apps Script is officially a Google Workspace core service. Covered under the <a href="https://workspace.google.com/terms/premier_terms/" target="_blank">Google Cloud Terms of Service</a> and <a href="https://workspace.google.com/terms/education_terms/" target="_blank">Google Workspace for Education Terms of Service</a>, Apps Script now offers the same enterprise-grade data protection, robust administrative controls, and standard technical support that safeguards other core services.  With this update, you can now more confidently deploy Apps Script across your organization.<h4><b>More about Apps Script</b></h4><div>Apps Script is a cloud-based JavaScript platform that enables users to customize, automate, and extend Google Workspace applications like Sheets, Docs, and Forms, as well as build custom solutions and add-ons. You can use it to:</div><div><br></div><div><ul><li>Create custom menus, dialogs, and sidebars within Sheets, Docs, and Slides.</li><li>Write custom functions for Sheets to automate complex calculations.</li><li>Build internal add-ons to streamline organizational workflows and integrate with third-party APIs.</li></ul></div><h3>Getting started</h3><div><ul><li><b>Admins:</b></li><ul><li><b>If you already have Apps Script enabled:</b> No action is required. Your organization will automatically benefit from these new core service protections and technical support.</li><li><b>If you previously restricted Apps Script: </b>If you turned Apps Script off due to compliance, security, or support concerns, you can now enable the service to provide secure, custom automation for your users. Visit the Help Center to <a href="https://knowledge.workspace.google.com/admin/users/access/turn-apps-script-on-or-off-for-users" target="_blank">learn how to manage Apps Script access for your organization</a>.</li></ul><li><b>End users: </b>No action is required. Visit the Help Center to <a href="https://developers.google.com/apps-script" target="_blank">learn more about getting started with Apps Script</a>.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Available now</li></ul></div><h3>Availability</h3><div><ul><li>Apps Script is now available as a core service for all Google Workspace customers</li></ul></div><h3>Resources</h3><div><ul><li>Google Workspace Developer Documentation: <a href="https://developers.google.com/apps-script" target="_blank">Apps Script</a></li><li>Google Workspace Admin Help: <a href="https://knowledge.workspace.google.com/admin/users/access/turn-apps-script-on-or-off-for-users" target="_blank">Turn Apps Script on or off for users</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Enhanced security monitoring with expanded Admin password reset alerts]]></title>
<description><![CDATA[In Alert Center, we are expanding the existing “Super Admin password reset” alert into a broader Admin password reset alert. Previously, this rule only triggered alerts when a super admin’s password was changed. With this update, the alert will now cover password resets for all administrator role...]]></description>
<link>https://tsecurity.de/de/3618794/it+betriebssysteme/web+tipps/enhanced+security+monitoring+with+expanded+admin+password+reset+alerts/</link>
<pubDate>Tue, 23 Jun 2026 17:42:56 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[In <a href="https://support.google.com/a/answer/9105393" target="_blank">Alert Center</a>, we are expanding the existing “Super Admin password reset” alert into a broader <b>Admin password reset</b> alert. Previously, this rule only triggered alerts when a super admin’s password was changed. With this update, the alert will now cover password resets for <b>all</b> administrator roles within your organization.<div><br></div><div>This update provides admins with better visibility and control over the security of their organization's privileged accounts. Monitoring password changes for all admin roles provide a higher level of oversight to respond more quickly to potential account compromises or unauthorized changes.</div><div><br></div><div>This change aligns with security best practices by treating all administrative access with increased vigilance.</div><h3>Getting started</h3><div><ul><li><b>Admins:</b> This feature will be <b>ON</b> by default and automatically replaces the previous "Super Admin password reset" rule. No action is required to enable the new alert. If you had modified the recipient list for the previous rule, those settings will automatically carry over to the new rule.</li><li><b>End users: </b>There is no end user setting or impact for this feature.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Gradual rollout (up to 15 days for feature visibility) started on June 22, 2026</li></ul></div><h3>Availability</h3><div><ul><li>Available to all Google Workspace customers</li></ul></div><h3>Resources</h3><div><ul><li>Google Workspace Admin Help: <a href="https://support.google.com/a/answer/9104586" target="_blank">View alert details</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Troubleshoot formula errors quickly with Gemini in Google Sheets]]></title>
<description><![CDATA[We’re excited to introduce a new Gemini in Sheets capability that enables you to diagnose and fix formula errors in one click. When you encounter a formula error, Gemini can analyze the surrounding data structure to help provide an easy-to-understand explanation of the core issue alongside a corr...]]></description>
<link>https://tsecurity.de/de/3616246/it+betriebssysteme/web+tipps/troubleshoot+formula+errors+quickly+with+gemini+in+google+sheets/</link>
<pubDate>Mon, 22 Jun 2026 19:25:27 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[We’re excited to introduce a new Gemini in Sheets capability that enables you to diagnose and fix formula errors in one click. When you encounter a formula error, Gemini can analyze the surrounding data structure to help provide an easy-to-understand explanation of the core issue alongside a corrected version of the formula. The functionality seamlessly supports everything from basic arithmetic to highly intricate calculations, simplifying what is traditionally a frustrating and time-consuming debugging process.<div><br></div><div>Since Gemini is built directly in Sheets, it removes the barrier to writing complex formulas for advanced analysis right where you work. This ensures that both novice users and seasoned data analysts can maintain momentum without having to manually parse error messages  or search external forums for solutions.</div><div><br></div><div><br></div><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj54O1iuI_zo73h7DxjdUotXnXPCy5QoXjqanpDeLFxBtND8cT1lW5O_3dgdk4ZNug0rcr0mAYb9ZDWq-OUenzTFGq15jOWYytNLNGaRF3v_KdD49a8Qn3Fb-NUYdmObq6mbBQS73HNGvygUWiupJaSmhntyZWp-Oit_8MeZ_B86laurorGaoy1wQMAIBJ8/s2000/Formula%20Fixer.gif" imageanchor="1"><img alt="GIF showing formula fixing functionality" border="0" data-original-height="1251" data-original-width="2000" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj54O1iuI_zo73h7DxjdUotXnXPCy5QoXjqanpDeLFxBtND8cT1lW5O_3dgdk4ZNug0rcr0mAYb9ZDWq-OUenzTFGq15jOWYytNLNGaRF3v_KdD49a8Qn3Fb-NUYdmObq6mbBQS73HNGvygUWiupJaSmhntyZWp-Oit_8MeZ_B86laurorGaoy1wQMAIBJ8/s16000/Formula%20Fixer.gif"></a></div><br><div><br></div><h3>Getting started</h3><div><ul><li><b>Admins: </b>This feature is available by default if <a href="https://knowledge.workspace.google.com/admin/gemini/manage-access-to-gemini-features-in-workspace-services" target="_blank">Gemini for Workspace in Sheets</a> is enabled.</li><li><b>End users: </b>You must have <a href="https://support.google.com/mail/answer/15604322?sjid=17363988672514456782-NA#gw&amp;zippy=%2Csmart-features-in-google-workspace%2Cwhat-are-googles-legal-bases-of-processing-for-users-in-the-european-economic-area-united-kingdom-or-switzerland%2Chow-long-is-your-workspace-content-activity-used-to-provide-smart-features-and-to-improve-these-features" target="_blank">Workspace smart features</a> enabled to take advantage of these features. Visit the Help Center to <a href="https://support.google.com/docs/answer/16959434" target="_blank">learn more about building and editing spreadsheets with Gemini in Sheets</a>.</li></ul><div><br></div></div><div><i>Note: Through July 15, 2026, Workspace customers will get promotional access to higher limits for the improved Gemini in Sheets experience, allowing users to experiment with this feature.. Per-user usage limits will apply after July 15; we’ll provide more information in the Help Center in advance of updated usage limits going into effect.</i></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains</a>: Gradual rollout (up to 15 days for feature visibility) starting on June 22, 2026</li></ul></div><h3>Availability</h3><div><ul><li><b>Business: </b>Business Standard and Plus</li><li><b>Enterprise: </b>Enterprise Standard and Plus</li><li><b>Consumer: </b>Google AI Pro and Ultra</li><li><b>Education Add-ons: </b>Google AI Pro for Education</li><li><b>Other Add-ons: </b>AI Expanded Access*</li></ul></div><div><i>*After July 15, 2026, users with AI Expanded Access licenses will have <a href="https://knowledge.workspace.google.com/admin/getting-started/editions/compare-google-ai-expansion-add-ons?co=DASHER._Family=Business-Enterprise&amp;oco=0&amp;visit_id=639177375718092415-1787668601&amp;p=limits&amp;rd=2#usage-limits" target="_blank">higher limits on usage</a> of this feature.</i></div><h3>Resources</h3><div><ul><li>Google Docs Editors Help: <a href="https://support.google.com/docs/answer/14356410#create-formulas" target="_blank">Collaborate with Gemini in Google Sheets</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Google Workspace Weekly Recap - June 19, 2026]]></title>
<description><![CDATA[New discoverable space setting in Google ChatPreviously, spaces were either private (invite-only) or open (anyone in the organization can find and join). Discoverable spaces provide a new option between the two: they appear when users browse for spaces within their organization, but the conversat...]]></description>
<link>https://tsecurity.de/de/3610078/it+betriebssysteme/web+tipps/google+workspace+weekly+recap+-+june+19+2026/</link>
<pubDate>Fri, 19 Jun 2026 12:39:29 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h3>New discoverable space setting in Google Chat</h3><div>Previously, spaces were either private (invite-only) or open (anyone in the organization can find and join). Discoverable spaces provide a new option between the two: they appear when users browse for spaces within their organization, but the conversation history and messages remain private until an owner or manager approves a user's request to join. | <a href="https://workspaceupdates.googleblog.com/2026/06/discoverable-space-setting-chat.html" target="_blank">Learn more</a>.</div><div><h3>Carrier Link for Google Voice</h3><div>Carrier Link allows Workspace customers to easily add phone numbers and calling plans from a certified local carrier, leveraging a pre-configured multi-tenant implementation of SIP Link. | <a href="https://workspaceupdates.googleblog.com/2026/06/carrier-link-for-google-voice.html" target="_blank">Learn more</a>.</div></div><div><h3>AI note-taking is now available in Google Voice</h3><div>This powerful new feature records and transcribes calls, summarizes key points, and organizes action items, which are sent via Gmail and stored in the Voice app. | <a href="https://workspaceupdates.googleblog.com/2026/06/AI-note-taking-in-google-voice.html" target="_blank">Learn more</a>.</div></div><div><h3>Gemini in Chrome expands to more languages and regions, including Latin America, Africa, and the Middle East</h3><div>Many of Chrome's latest AI features are rolling out to users in Latin America, Africa, the Middle East, and more. | <a href="https://workspaceupdates.googleblog.com/2026/06/expanded-availability-gemini-in-chrome.html" target="_blank">Learn more</a>.</div></div><div><h3>Control whether your users can have temporary chats and delete conversations in the Gemini app</h3><div>We’re introducing two new administrator controls for the Gemini app (gemini.google.com) that allow end users to manage their own chat activity. Admins can now configure whether users can use temporary chats and delete their conversation history. | <a href="https://workspaceupdates.googleblog.com/2026/06/temporary-chats-and-conversation-deletion-control-for-gemini.html" target="_blank">Learn more</a>.</div></div><div><h3>Create longer Veo videos and generate multiple at once in Google Vids</h3><div>These updates provide all Vids users with the ability to create longer videos with consistent characters and generate multiple videos in parallel, enabling you to bring your vision to life faster than ever before. | <a href="https://workspaceupdates.googleblog.com/2026/06/create-longer-veo-videos-and-generate-multiple-at-once-in-Google-Vids.html" target="_blank">Learn more</a>.</div></div><div><h3>Enhanced AI avatar features and capabilities in Google Vids</h3><div>We’re excited to announce expanded language support, a new collection of avatar defaults, and the ability to direct your custom avatars to take action in any generated video. | <a href="https://workspaceupdates.googleblog.com/2026/06/enhanced-ai-avatars-vids.html" target="_blank">Learn more</a>.</div></div><div><h3>Custom event colors in Google Calendar</h3><div>Going forward, users are offered an expanded color palette so they can personalize events and visually organize their calendar with ease, giving each user access to up to 200 custom colors for individual events via both the native web and mobile apps as well as the Calendar API. | <a href="https://workspaceupdates.googleblog.com/2026/06/custom-event-colors-in-google-calendar.html" target="_blank">Learn more</a>.</div></div><div><h3>Make Gemini more helpful and relevant to your teaching goals with the Google Classroom app in Gemini</h3><div>Educators have shared that AI is especially helpful when it understands the context of their teaching environment, from tailoring resources toward student needs or building on their existing materials. To support this, Gemini will be able to collaborate with your Google Classroom, using context from your classes to inform its outputs or help complete tasks. | <a href="https://workspaceupdates.googleblog.com/2026/06/classroom-app-in-gemini.html" target="_blank">Learn more</a>.</div></div><div><h3>Improved management of secondary calendars via the Calendar API</h3><div>We’re introducing two enhancements to the Calendar API that make it easier for admins to programmatically manage secondary calendars within their organization: a transfer API and a filter for secondary calendars owned by your organization. | <a href="https://workspaceupdates.googleblog.com/2026/06/secondary-calendar-management-API.html" target="_blank">Learn more</a>.</div></div><div><h3>Google Meet now available on Android Auto</h3><div>We’re bringing the power of Google Meet to your vehicle's display with our new integration for Android Auto. This update makes it easy to safely stay connected and handle important meetings hands-free from behind the wheel. | <a href="https://workspaceupdates.googleblog.com/2026/06/google-meet-now-available-on-android.html" target="_blank">Learn more</a>.</div></div><div><h3>Expanded language support for building and editing spreadsheets with Gemini</h3><div>We’re now expanding support for these features to 28 additional languages, enabling users who speak Spanish, Portuguese, Japanese, Korean, Italian, French, German, Chinese Simplified, Dutch, Hebrew, Polish, Turkish, Czech, Indonesian, Malay, Swedish, Danish, Norwegian, Arabic, Finnish, Vietnamese, Ukrainian, Greek, Thai, Romanian, Russian, Catalan, and Hungarian to collaborate natively with Gemini in their preferred language. | <a href="https://workspaceupdates.googleblog.com/2026/06/expanded-language-support-for-gemini-in-sheets.html" target="_blank">Learn more</a>.</div></div><div><br></div><div><span>The announcements above were published on the Workspace Updates blog over the last week. Please refer to the original blog posts for complete details.</span></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Google Meet now available on Android Auto]]></title>
<description><![CDATA[We’re bringing the power of Google Meet to your vehicle's display with our new integration for Android Auto. This update makes it easy to safely stay connected and handle important meetings hands-free from behind the wheel.Users can now access Google Meet directly from their car's dashboard. This...]]></description>
<link>https://tsecurity.de/de/3608400/it+betriebssysteme/web+tipps/google+meet+now+available+on+android+auto/</link>
<pubDate>Thu, 18 Jun 2026 18:25:52 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[We’re bringing the power of Google Meet to your vehicle's display with our new integration for Android Auto. This update makes it easy to safely stay connected and handle important meetings hands-free from behind the wheel.<div><br></div><div>Users can now access Google Meet directly from their car's dashboard. This integration ensures your productivity doesn't pause when you start your engine. From your vehicle's display, you can check your upcoming meeting schedule and join discussions with a single tap.</div><div><br></div><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDjeD64NYKpEl7DAHRrzb7vZCCQzU0vNoyQdlPNKu5ZPXoS_8Lu4G0A9muZstm7YbdauAmY9UMzxir15tsiD_UKSDKCVGDcyoIEKX4J-ARYceY9-AGUpoYltMEAqn8QXH4lIN38Wo-F43Ah1xWD758Zm8N2drx2h-fHH7LOdKiK2JoQGLxoxDqUghzGQFG/s1919/Android%20Auto%201.png"><img alt="User interface showing upcoming meetings" border="0" data-original-height="1073" data-original-width="1919" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDjeD64NYKpEl7DAHRrzb7vZCCQzU0vNoyQdlPNKu5ZPXoS_8Lu4G0A9muZstm7YbdauAmY9UMzxir15tsiD_UKSDKCVGDcyoIEKX4J-ARYceY9-AGUpoYltMEAqn8QXH4lIN38Wo-F43Ah1xWD758Zm8N2drx2h-fHH7LOdKiK2JoQGLxoxDqUghzGQFG/s16000/Android%20Auto%201.png"></a></div><div><br></div><div>You also have the flexibility to make and receive direct audio calls, with a convenient History tab that lets you quickly dial colleagues or clients without taking your eyes off the road.</div><div><br></div><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqwfXW60WqmKu3IURP_qPocQoRxbBlAsvOcbR69nLhyphenhyphenp9GSRZ_ijxxSPl-G8K-kOSjoLSpQc6fwm0t0e2W4muHu-YxjVuk7P7b522AD-9RtUYehdlBfDlUGKK4j26y5HYNUceUuNQhdw_1Ik0MCLe8BjQqD7x-OsK8sFngZYmiC_b5-lU9Nl4yrzqOab0E/s1919/Android%20Auto%202.png"><img alt="User interface showing recent calls" border="0" data-original-height="1074" data-original-width="1919" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqwfXW60WqmKu3IURP_qPocQoRxbBlAsvOcbR69nLhyphenhyphenp9GSRZ_ijxxSPl-G8K-kOSjoLSpQc6fwm0t0e2W4muHu-YxjVuk7P7b522AD-9RtUYehdlBfDlUGKK4j26y5HYNUceUuNQhdw_1Ik0MCLe8BjQqD7x-OsK8sFngZYmiC_b5-lU9Nl4yrzqOab0E/s16000/Android%20Auto%202.png"></a></div><div><br></div><div>Please note that when you join a meeting or call, your camera is turned off and you won’t see the incoming video content. You’ll hear the audio from the meeting and have audio input access from your microphone.</div><h3>Getting started</h3><div><ul><li><b>Admins: </b>There is no admin control for this feature.</li><li><b>End users: </b>This feature is ON by default for users with the Google Meet app installed on their Android phone. To use it, simply connect your phone to an Android Auto-compatible vehicle. Visit the Help Center to <a href="https://support.google.com/meet/answer/16920905" target="_blank">learn more about using Meet on Android Auto</a>.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release domains</a>: Available now</li><li><a href="https://support.google.com/a/answer/172177" target="_blank">Scheduled Release domains</a>: Rolling out now, with expected completion by June 26, 2026</li></ul></div><h3>Availability</h3><div><ul><li>Available to all Google Workspace customers, Workspace Individual subscribers, and users with personal Google accounts</li></ul></div><h3>Resources</h3><div><ul><li>Google Meet Help: <a href="https://support.google.com/meet/answer/16920905" target="_blank">Use Meet on Android Auto</a></li><li>Google Workspace Updates Blog: <a href="https://workspaceupdates.googleblog.com/2026/04/google-meet-is-now-available-on-carplay.html" target="_blank">Google Meet is now available on CarPlay</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Expanded language support for building and editing spreadsheets with Gemini]]></title>
<description><![CDATA[Earlier this year, we introduced new Gemini in Sheets capabilities that allow you to build and edit entire spreadsheets using simple natural language. We’re now expanding support for these features to 28 additional languages, enabling users who speak Spanish, Portuguese, Japanese, Korean, Italian...]]></description>
<link>https://tsecurity.de/de/3608399/it+betriebssysteme/web+tipps/expanded+language+support+for+building+and+editing+spreadsheets+with+gemini/</link>
<pubDate>Thu, 18 Jun 2026 18:25:50 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Earlier this year, we <a href="https://workspaceupdates.googleblog.com/2026/04/build-and-edit-complex-spreadsheets-with-Gemini-in-Google-Sheets.html" target="_blank">introduced new Gemini in Sheets capabilities</a> that allow you to build and edit entire spreadsheets using simple natural language. We’re now expanding support for these features to 28 additional languages, enabling users who speak Spanish, Portuguese, Japanese, Korean, Italian, French, German, Chinese Simplified, Dutch, Hebrew, Polish, Turkish, Czech, Indonesian, Malay, Swedish, Danish, Norwegian, Arabic, Finnish, Vietnamese, Ukrainian, Greek, Thai, Romanian, Russian, Catalan, and Hungarian to collaborate natively with Gemini in their preferred language.<div><br></div><div>With this update, users can leverage the full functionality of Gemini to build and edit spreadsheets by issuing prompts in their native language. Whether users are updating budgets, building complex financial models, or conducting data analysis, Gemini leverages Sheets tools—such as tables, pivot tables, charts, and formulas—to execute tasks. This enables global teams to manage data more efficiently, automate workflow execution, and extract valuable cross-document insights without confronting language barriers.</div><div><br></div><div><br></div><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiR-lB2p4tqCkm4M_dUsQVTSdxO_g5Bwr-bTy5AxYynLZLc6ooS81A3EkBpfA11KRiDk2e-aUB7xcdNp3WqeAv5tj9ZEtAoHbDwUPWVF8cY351r72yZi_P8MotEkPShJVBElydlm8wx6TqeH95FQZaf4PTI-YQ18VlcI5ASDl8Z92TCXZNkTdgf7VnqrC1/s1407/Sheets%20Gemini%20i18n.gif" imageanchor="1"><img alt="Gemini in Sheets UX in Spanish language" border="0" data-original-height="854" data-original-width="1407" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiR-lB2p4tqCkm4M_dUsQVTSdxO_g5Bwr-bTy5AxYynLZLc6ooS81A3EkBpfA11KRiDk2e-aUB7xcdNp3WqeAv5tj9ZEtAoHbDwUPWVF8cY351r72yZi_P8MotEkPShJVBElydlm8wx6TqeH95FQZaf4PTI-YQ18VlcI5ASDl8Z92TCXZNkTdgf7VnqrC1/s16000/Sheets%20Gemini%20i18n.gif"></a></div><div><br></div><h3>Getting started</h3><div><ul><li><b>Admins: </b>This feature is available by default if <a href="https://knowledge.workspace.google.com/admin/gemini/manage-access-to-gemini-features-in-workspace-services" target="_blank">Gemini for Workspace in Sheet</a>s is enabled. Note that enabling <a href="https://knowledge.workspace.google.com/p/wsi" target="_blank">Workspace Intelligenc</a>e expands the range of supported use cases.</li><li><b>End users: </b>You must have <a href="https://support.google.com/mail/answer/15604322?sjid=17363988672514456782-NA#gw&amp;zippy=%2Csmart-features-in-google-workspace%2Cwhat-are-googles-legal-bases-of-processing-for-users-in-the-european-economic-area-united-kingdom-or-switzerland%2Chow-long-is-your-workspace-content-activity-used-to-provide-smart-features-and-to-improve-these-features" target="_blank">Workspace smart features</a> enabled to take advantage of these features. Eligible users will see the Gemini icon in the Sheets side panel. Simply describe the spreadsheet or edit you need to begin collaborating. Visit the Help Center to <a href="https://support.google.com/docs/answer/16959434" target="_blank">learn more about building and editing spreadsheets with Gemini in Sheets</a>.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="http://knowledge.workspace.google.com/admin/releases/choose-when-users-get-new-features?visit_id=639173870637934581-3789384858&amp;rd=1" target="_blank">Rapid Release and Scheduled Release domains</a>: Available now</li></ul></div><h3>Availability</h3><div><ul><li><b>Business: </b>Business Standard and Plus</li><li><b>Enterprise: </b>Enterprise Standard and Plus</li><li><b>Consumer: </b>Google AI Pro and Ultra</li><li><b>Education Add-ons:</b> Google AI Pro for Education</li><li><b>Other Add-ons:</b> AI Expanded Access</li></ul></div><div><i>Note: Through July 15, 2026, Workspace customers get promotional access to higher limits for the improved Gemini in Sheets experience. Per-user usage limits will apply after July 15; we’ll provide more information in the <a href="https://support.google.com/a?p=limits" target="_blank">Help Center</a> in advance of updated usage limits going into effect.</i></div><h3>Resources</h3><div><ul><li>Google Docs Editors Help: <a href="https://support.google.com/docs/answer/16959434" target="_blank">Build or edit entire spreadsheets with Gemini in Sheets</a></li><li>Workspace Updates Blog: <a href="https://workspaceupdates.googleblog.com/2026/04/build-and-edit-complex-spreadsheets-with-Gemini-in-Google-Sheets.html" target="_blank">Build and edit complex spreadsheets with Gemini in Google Sheets</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Improved management of secondary calendars via the Calendar API]]></title>
<description><![CDATA[We’re introducing two enhancements to the Calendar API that make it easier for admins to programmatically manage secondary calendars within their organization: a transfer API and a filter for secondary calendars owned by your organization.Transfer APIAs previously announced, the new endpoint in t...]]></description>
<link>https://tsecurity.de/de/3608232/it+betriebssysteme/web+tipps/improved+management+of+secondary+calendars+via+the+calendar+api/</link>
<pubDate>Thu, 18 Jun 2026 17:20:20 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[We’re introducing two enhancements to the Calendar API that make it easier for admins to programmatically manage secondary calendars within their organization: a transfer API and a filter for secondary calendars owned by your organization.<h4><b>Transfer API</b></h4><div>As <a href="https://workspaceupdates.googleblog.com/2026/03/an-update-on-secondary-calendar-lifecycle-changes-and-a-new-API.html" target="_blank">previously announced</a>, the new endpoint in the Google Calendar API that allows administrators to programmatically transfer the ownership of secondary calendars is now being rolled out. Its functionality mirrors the <a href="https://knowledge.workspace.google.com/admin/calendar/cancel-or-transfer-events-or-secondary-calendars-before-deleting-a-user" target="_blank">data transfer feature currently available in the Admin console</a> by permitting transfers between users in the same organization without sending emails or requiring confirmation from the recipient. Beyond replicating the Admin console functionality, the API provides greater flexibility by allowing administrators to transfer specific, individual secondary calendars.</div><h4><b>Organization filter</b></h4><div>To help organizations prepare for the upcoming secondary calendar data lifecycle changes, where secondary calendars will follow the lifecycle of their owner, administrators can now programmatically monitor the ownership status of their users' secondary calendars.</div><div><br></div><div>A new filtering option will be available in the <a href="https://developers.google.com/workspace/calendar/api/v3/reference/calendarList/list" target="_blank">CalendarList:list API method</a> that restricts results to return only secondary calendars owned by the organization. When combined with the <a href="https://developers.google.com/workspace/admin/directory/reference/rest/v1/users/list" target="_blank">users.list method</a> of the Admin SDK API, administrators can retrieve a comprehensive list of organization-owned secondary calendars across their users' calendar lists. The <a href="https://developers.google.com/workspace/calendar/api/v3/reference/calendars#dataOwner" target="_blank">dataOwner field</a> can then be used to verify current ownership status and make any necessary adjustments.</div><h3>Getting started</h3><div><ul><li><b>Admins:</b> There is no admin control for this feature.</li><li><b>End users:</b> There is no end user setting for this feature. Visit the Help Center to <a href="https://support.google.com/calendar/answer/78739" target="_blank">learn more about transferring calendars or events in Google Calendar</a>.</li></ul></div><h3>Rollout pace</h3><div><b>Transfer API</b></div><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains</a>: Gradual rollout (up to 15 days for feature visibility) starting on June 18, 2026</li></ul></div><div><b>Organization filter</b></div><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains</a>: Gradual rollout (up to 15 days for feature visibility) starting on July 6, 2026</li></ul></div><h3>Availability</h3><div><ul><li>Available to all Google Workspace customers</li></ul></div><h3>Resources</h3><div><ul><li>Google Workspace Admin Help: <a href="https://knowledge.workspace.google.com/admin/calendar/cancel-or-transfer-events-or-secondary-calendars-before-deleting-a-user" target="_blank">Cancel or transfer events or secondary calendars before deleting a user</a></li><li>Google Calendar Help: <a href="https://support.google.com/calendar/answer/78739" target="_blank">Transfer calendars or events in Google Calendar </a></li><li>Workspace Updates Blog: <a href="https://workspaceupdates.googleblog.com/2026/03/an-update-on-secondary-calendar-lifecycle-changes-and-a-new-API.html" target="_blank">An update on secondary calendar lifecycle changes and a new API</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Make Gemini more helpful and relevant to your teaching goals with the Google Classroom app in Gemini]]></title>
<description><![CDATA[Educators have shared that AI is especially helpful when it understands the context of their teaching environment, from tailoring resources toward student needs or building on their existing materials. To support this, Gemini will be able to collaborate with your Google Classroom, using context f...]]></description>
<link>https://tsecurity.de/de/3606512/it+betriebssysteme/web+tipps/make+gemini+more+helpful+and+relevant+to+your+teaching+goals+with+the+google+classroom+app+in+gemini/</link>
<pubDate>Thu, 18 Jun 2026 04:26:33 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Educators have shared that AI is especially helpful when it understands the context of their teaching environment, from tailoring resources toward student needs or building on their existing materials. To support this, Gemini will be able to collaborate with your Google Classroom, using context from your classes to inform its outputs or help complete tasks. For example, educators can get insights on student progress and understanding, create resources and differentiated materials based on Classroom context, or get help drafting posts and assignments.<div><br></div><div>Students 18 and older can similarly use the Classroom app to stay organized across classes – from getting a list of upcoming assignments, creating study plans, doing test practice based on Classroom content, and staying up-to-date on the latest announcements. 

Based on your prompts, Gemini will identify when context from Google Classroom will be relevant, and use it to inform its outputs. You can also explicitly tell Gemini to use information from your Google Classroom account by typing, “@Classroom” and clicking on the Classroom app when it pops up.</div><div><br></div><div class="separator"></div><div><br></div><div><br></div><div>For example, educators can ask Gemini to:</div><div><br></div><div><ul><li><b>Draft communications: </b>Draft communications and posts based on your Google Classroom information.</li><li><b>Draft differentiated assignments and plans:</b> Help draft and update assignments, and generate timelines and structured plans, based on information and content from your Google Classroom.</li><li><b>Understand student progress and take action: </b>Summarize who has submitted assignments, how students have done on prior assignments, and identify where students might need additional teacher support.</li><li><b>Streamline administrative tasks: </b>Update assignment titles, descriptions, and more across multiple classes in draft mode, make seating charts, and find old assignments.</li></ul></div><h4>Important notes</h4><div>Gemini Apps can’t perform certain actions in the Google Classroom app, like:</div><div><br></div><div><ul><li>Enter grades or provide private feedback directly</li><li>Delete, archive, or directly post assignments or announcements (it can post to draft)</li><li>Create rubrics</li></ul></div><div>This feature will be available in English for users designated as over the age of 18 who are using a Google Workspace for Education or Business account in Classroom and Gemini. The Classroom app in Gemini does not currently support data regionalization and your usage data may be stored outside of your designated data region. Data region support for the Classroom app in Gemini is expected later this year.</div><h3>Getting started</h3><div><ul><li><b>Admins: </b>Access to the Classroom app in Gemini will be ON by default for all Education domains and can be disabled at the OU or group level. For all other domains, access will be OFF by default and can be enabled at the OU or group level. Access can be turned on or off with a new <b>Classroom app</b> setting in the Gemini section of the Admin console. Visit the Help Center to <a href="https://support.google.com/a/answer/15293691" target="_blank">learn more about turning Google apps in Gemini on or off for your organization</a>.</li></ul><div><br></div><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDsSwnx0-luG6QMkZX0hbCxPOMJYkZ4SbUrKlHS1lBA7utg7BQ_kP3JiGWqK3j-TtnM6s0nOBQOZuzkiHrPV5eQVHXpwQfz8l1V1o7ZdGyj9OmoDfO1GGEYk_EvsTB28kTELBfMYYQRUi_swZCGHg4bP2emtS7hIWDaOav5NuO5IK655stJV9J-4K2S18i/s2048/Classroom%20Gemini%20App%20Admin.png"><img alt="Admin console settings to control Classroom in Gemini app" border="0" data-original-height="1127" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDsSwnx0-luG6QMkZX0hbCxPOMJYkZ4SbUrKlHS1lBA7utg7BQ_kP3JiGWqK3j-TtnM6s0nOBQOZuzkiHrPV5eQVHXpwQfz8l1V1o7ZdGyj9OmoDfO1GGEYk_EvsTB28kTELBfMYYQRUi_swZCGHg4bP2emtS7hIWDaOav5NuO5IK655stJV9J-4K2S18i/s16000/Classroom%20Gemini%20App%20Admin.png"></a></div><br><div><br></div><ul><li><b>End users: </b>Your admin configuration will determine if you can use the Classroom app in Gemini. Access to the Classroom app in Gemini will be ON by default and can be disabled at the end user level in the connected apps section of the Gemini app settings. Visit the Help Center to <a href="https://support.google.com/gemini/answer/14959807?sjid=5863818655263235588-NC" target="_blank">learn more about using apps connected to Gemini</a>.</li></ul><div><br></div><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFxAVE6-f-KG1WIpQI48puSbC6zbzDCgIX3cnjmcyizek_Fsv8UntUeqSrkirlRzMFyUCGnV7SUU_X4j0SLgD7xkYEBgM1wz4gJONswLk0XrB1F0pdFrtF8bcwVdT_Jw85vKDQjkpRJlSh8-QUeGdtReFTHA9YgFSstpmCSapx3y-OlOUwCxl1-rcfXwjX/s2048/Classroom%20Gemini%20App%20User.png"><img alt="End user settings to enable Classroom in Gemini app" border="0" data-original-height="1283" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFxAVE6-f-KG1WIpQI48puSbC6zbzDCgIX3cnjmcyizek_Fsv8UntUeqSrkirlRzMFyUCGnV7SUU_X4j0SLgD7xkYEBgM1wz4gJONswLk0XrB1F0pdFrtF8bcwVdT_Jw85vKDQjkpRJlSh8-QUeGdtReFTHA9YgFSstpmCSapx3y-OlOUwCxl1-rcfXwjX/s16000/Classroom%20Gemini%20App%20User.png"></a></div><div><br></div></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains</a>: Rolling out now, with expected completion by June 18, 2026</li></ul></div><h3>Availability</h3><div><ul><li>Available in English to all Google Workspace customers who are 18 years or older and signed in to the Gemini app. <a href="https://knowledge.workspace.google.com/admin/getting-started/editions/control-access-to-google-services-by-age" target="_blank">Learn more about age restrictions in Gemini app</a>.</li></ul></div><h3>Resources</h3><div><ul><li>Gemini Apps Help: <a href="https://support.google.com/gemini/answer/16865250?sjid=764380175305792016-NC" target="_blank">Ask about your Google Classroom assignments, classes &amp; more in Gemini Apps</a></li><li>Google Workspace Admin Help: <a href="https://support.google.com/a/answer/15293691?hl=en" target="_blank">Turn apps in Gemini on or off</a></li><li>Gemini Apps Help: <a href="https://support.google.com/gemini/answer/14959807?sjid=5863818655263235588-NC" target="_blank">Use apps connected to Gemini with a work or school Google Account</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Custom event colors in Google Calendar]]></title>
<description><![CDATA[Google Calendar is expanding its event coloring options, moving beyond the current limitation of 11 predefined colors for events. Going forward, users are offered an expanded color palette so they can personalize events and visually organize their calendar with ease, giving each user access to up...]]></description>
<link>https://tsecurity.de/de/3605741/it+betriebssysteme/web+tipps/custom+event+colors+in+google+calendar/</link>
<pubDate>Wed, 17 Jun 2026 19:56:31 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Google Calendar is expanding its event coloring options, moving beyond the current limitation of 11 predefined colors for events. Going forward, users are offered an expanded color palette so they can personalize events and visually organize their calendar with ease, giving each user access to up to 200 custom colors for individual events via both the native web and mobile apps as well as the Calendar API. This fulfills a long-standing feature request from both business and personal users for more customizable options.<div><br></div><div>Users will be able to select from 24 default colors. On Calendar on the web (or via API), users can define additional colors by using a full RGB color picker.</div><div><br></div><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9xRNPL7N6WtsD96waYLhUh_88z5JTWrzYpUrvChMdSgzx4-5BROqd3MBsbV_AnAWtai-DCYW4xM-dj9kwjrGSg08KUXjdUjlUsAU00ioxMb90Jm0Or4FgaXVRKd-8kLvjZL-MdACdijnkzuSv-2JeCL32vrBt1H9ZYBSLnh118S-0CvpmAzbx6PfZ4RZy/s2048/Calendar%20Event%20Colors.png" imageanchor="1"><img alt="UI showing how to select an event color in Calendar" border="0" data-original-height="1331" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9xRNPL7N6WtsD96waYLhUh_88z5JTWrzYpUrvChMdSgzx4-5BROqd3MBsbV_AnAWtai-DCYW4xM-dj9kwjrGSg08KUXjdUjlUsAU00ioxMb90Jm0Or4FgaXVRKd-8kLvjZL-MdACdijnkzuSv-2JeCL32vrBt1H9ZYBSLnh118S-0CvpmAzbx6PfZ4RZy/s16000/Calendar%20Event%20Colors.png"></a></div><div><br></div><h3>Getting started</h3><div><ul><li><b>Admins: </b>There is no admin control for this feature.</li><li><b>End users: </b>This feature will be ON by default and can be customized by the user. Visit the Help Center to <a href="https://support.google.com/calendar/answer/12377581" target="_blank">learn more</a>.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release domains</a>: Extended rollout (potentially longer than 15 days for feature visibility) starting on June 17, 2026</li><li><a href="https://support.google.com/a/answer/172177" target="_blank">Scheduled Release domains</a>: Extended rollout (potentially longer than 15 days for feature visibility) starting on June 29, 2026</li></ul></div><h3>Availability</h3><div><ul><li>Available to all Google Workspace customers, Workspace Individual subscribers, and users with personal Google accounts</li></ul></div><h3>Resources</h3><div><ul><li>Google Help: <a href="https://support.google.com/calendar/answer/12377581" target="_blank">Use labels to track calendar entries</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Create longer Veo videos and generate multiple at once in Google Vids]]></title>
<description><![CDATA[Starting today, we’re introducing powerful new ways to create and iterate on video content in Google Vids using Veo. These updates provide all Vids users with the ability to create longer videos with consistent characters and generate multiple videos in parallel, enabling you to bring your vision...]]></description>
<link>https://tsecurity.de/de/3605389/it+betriebssysteme/web+tipps/create+longer+veo+videos+and+generate+multiple+at+once+in+google+vids/</link>
<pubDate>Wed, 17 Jun 2026 17:57:40 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Starting today, we’re introducing powerful new ways to create and iterate on video content in <a href="https://docs.google.com/videos/create?usp=blog" target="_blank">Google Vids</a> using Veo. These updates provide all Vids users with the ability to create longer videos with consistent characters and generate multiple videos in parallel, enabling you to bring your vision to life faster than ever before.<div><br><div><ul><li><b>Longer Veo videos:</b> You can now extend existing video clips using Veo to create longer, more immersive content while ensuring perfect storytelling continuity across your scenes.</li><li><b>Generate multiple clips at once:</b> Increase your productivity by kicking off multiple video generation requests at once, allowing you to explore different styles and prompts simultaneously to save time.</li></ul><div><br></div></div><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCjVt6hpEvE_esuUE89ScxZZU4xNRoIxX0T25S9dxDd3k_wsyJUxE67mWAASoXawVjmEK6XOFOjipYQzwgm4OlcG7iukApXbZuWonZMwHssJLpGs8KZTLTqhW1qW-ZR7kieYF0PsNK20jc4lbNA7LZdWBAr32PsA-XYkAjPIpgGxLryqSrIBQRSE74HiIz/s1000/Veo%20Extension%20Vids.gif"><img border="0" data-original-height="624" data-original-width="1000" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCjVt6hpEvE_esuUE89ScxZZU4xNRoIxX0T25S9dxDd3k_wsyJUxE67mWAASoXawVjmEK6XOFOjipYQzwgm4OlcG7iukApXbZuWonZMwHssJLpGs8KZTLTqhW1qW-ZR7kieYF0PsNK20jc4lbNA7LZdWBAr32PsA-XYkAjPIpgGxLryqSrIBQRSE74HiIz/s16000/Veo%20Extension%20Vids.gif"></a></div><br><div><i>Extend video clips using Veo</i></div><h3>Getting started</h3><div><ul><li><b>Admins: </b>There is no admin control for this feature.</li><li><b>End users: </b>Visit the Help Center to <a href="https://support.google.com/docs/answer/16143507" target="_blank">learn more about using AI to generate video clips in Vids</a>.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains</a>: Full rollout (1–3 days for feature visibility) starting on June 17, 2026</li></ul></div><h3>Availability</h3><div><ul><li>Available to all Google Workspace customers and users with personal Google accounts</li></ul></div><h3>Resources</h3><div><ul><li>Google Docs Editors Help: <a href="https://support.google.com/docs/answer/16143507" target="_blank">Use AI to generate video clips in Google Vids</a></li></ul></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Enhanced AI avatar features and capabilities in Google Vids]]></title>
<description><![CDATA[With the integration of Gemini 3.1 Flash Text-To-Speech (TTS) and the latest capabilities in Veo 3.1, AI avatars in Google Vids have become more realistic and expressive than ever. We’re excited to announce expanded language support, a new collection of avatar defaults, and the ability to direct ...]]></description>
<link>https://tsecurity.de/de/3605388/it+betriebssysteme/web+tipps/enhanced+ai+avatar+features+and+capabilities+in+google+vids/</link>
<pubDate>Wed, 17 Jun 2026 17:57:39 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[With the integration of Gemini 3.1 Flash Text-To-Speech (TTS) and the latest capabilities in Veo 3.1, AI avatars in <a href="https://docs.google.com/videos/create?usp=blog" target="_blank">Google Vids</a> have become more realistic and expressive than ever. We’re excited to announce expanded language support, a new collection of avatar defaults, and the ability to direct your custom avatars to take action in any generated video.<div><h4><b>Expanded preset avatars with more expressive speaking</b></h4><div><br></div><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7JULf7Ta3nwAy2x2tWoHkvEh6TAqfYSSK4sezJ5LqMJy3gtZIyLU5gIFeh3k8YtdlMzrs4WjRiSd4rMScxTZUvATJGhPSx15aLnViL03sPUyHsd2OKbHHa6IxHHz8I2KzBoSkygpUf7ftYoLaSVZZewxUYjANRyc-_tg6B5ambAvPpF2kcHlGjKI-cs9s/s1812/Realistic%20Preset%20Avatars.png"><img alt="Several examples of realistic avatars" border="0" data-original-height="962" data-original-width="1812" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7JULf7Ta3nwAy2x2tWoHkvEh6TAqfYSSK4sezJ5LqMJy3gtZIyLU5gIFeh3k8YtdlMzrs4WjRiSd4rMScxTZUvATJGhPSx15aLnViL03sPUyHsd2OKbHHa6IxHHz8I2KzBoSkygpUf7ftYoLaSVZZewxUYjANRyc-_tg6B5ambAvPpF2kcHlGjKI-cs9s/s16000/Realistic%20Preset%20Avatars.png"></a></div><br><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw9oPDZztpNznL392ZGQAZMbqbAiq2I1NsznG9JFhHFVZVMGOD7PjDfrefqrvLzeqoNVMeoyPjymsiD7tvDBaZwJNX3L9MSpwt0jQTQUwAa2HgxOxYuk9baR2zZO1N5L6U27SA2Gg-w4yz5zGcQubtAUmI9xR1pYc0uhQB73KqSUX7ao2fiw8H3L3uNoEm/s1818/3D%20Cartoon%20Avatars.png"><img alt="Several examples of 3D cartoon avatars" border="0" data-original-height="662" data-original-width="1818" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw9oPDZztpNznL392ZGQAZMbqbAiq2I1NsznG9JFhHFVZVMGOD7PjDfrefqrvLzeqoNVMeoyPjymsiD7tvDBaZwJNX3L9MSpwt0jQTQUwAa2HgxOxYuk9baR2zZO1N5L6U27SA2Gg-w4yz5zGcQubtAUmI9xR1pYc0uhQB73KqSUX7ao2fiw8H3L3uNoEm/s16000/3D%20Cartoon%20Avatars.png"></a></div><div><br></div><div><i>Samples of new default avatars</i></div><div><br></div><div>We’ve expanded avatar options from 23 to 53 default presets, spanning photorealistic, 3D cartoon, and graphic novel styles. This broader gallery includes avatars like Sofia, Jack, Charlie, Finley, and Eleanor, all powered by Gemini Audio to speak with greater degrees of expression, realism, and conversational tones.</div><h4><b>Expanded speaker support to 24 languages</b></h4><div><br></div><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSWKfvvmhMXqtDYmm_EYza94qX2T3xfu7y7aWJjsR7fZl1Z2CHbl6dxVwmDacRIJFx22asXaQC162_tqfnGvODa0zuku5-c42wmEmQ_gl5jIp2wembGjQvWyU5wUvtmyb6LiH6c623NIa8A71TAekNLUL4yJWUTJo12gNQumsi5cBxWXiGLoLp1G2mR0HQ/s1126/Expanded%20Languages%20Avatars.png"><img alt="List of supported languages" border="0" data-original-height="1126" data-original-width="624" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSWKfvvmhMXqtDYmm_EYza94qX2T3xfu7y7aWJjsR7fZl1Z2CHbl6dxVwmDacRIJFx22asXaQC162_tqfnGvODa0zuku5-c42wmEmQ_gl5jIp2wembGjQvWyU5wUvtmyb6LiH6c623NIa8A71TAekNLUL4yJWUTJo12gNQumsi5cBxWXiGLoLp1G2mR0HQ/s16000/Expanded%20Languages%20Avatars.png"></a></div><div><br></div><div><i>Full list of language support in Google Vids UI</i></div><div><br></div><div>We’ve added support for 16 new languages, including Hindi, Bengali, Marathi, Tamil, Telugu, Arabic, Indonesian, Russian, Dutch, Polish, Thai, Turkish, Vietnamese, Romanian, and Ukrainian. 

These languages join our existing set—English, Spanish, Portuguese, Japanese, Korean, French, Italian, and German—bringing the total to 24 supported languages for AI avatar and voiceovers.</div><h4><b>Create custom avatars with the latest Gemini voice model</b></h4><div><br></div><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjubVXQf-9RPFKjAihjT40fkqmpdkG-pjJUnROPj4nCm17T7pJ3ppSCesfyKmAjAghGXrtCPAZWvr6MBY95LdYsvAi4V5GvKJqt2BU0Una9A9D42ejiVVf31m4Gkixao6hD-94fD8FwLWou4VDrrwynv1g-MoBm1E4_Kzbr8FW3vLRhGY_RawenOqYor0V2/s1966/Custom%20Avatars.png"><img alt="UI for creating a custom avatar, including box to add a name" border="0" data-original-height="1438" data-original-width="1966" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjubVXQf-9RPFKjAihjT40fkqmpdkG-pjJUnROPj4nCm17T7pJ3ppSCesfyKmAjAghGXrtCPAZWvr6MBY95LdYsvAi4V5GvKJqt2BU0Una9A9D42ejiVVf31m4Gkixao6hD-94fD8FwLWou4VDrrwynv1g-MoBm1E4_Kzbr8FW3vLRhGY_RawenOqYor0V2/s16000/Custom%20Avatars.png"></a></div><div><i>User experience of assigning new voices to custom avatars</i></div><div><br></div><div>With custom avatars in Vids, you can design your avatar using Nano Banana Pro. Starting today, you can choose from 30+ voices powered by Gemini Audio that offer increased expression, language support, and steering control over how they speak.</div><h4><b>Direct your custom avatars to take action in addition to speaking</b></h4><div><br></div><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJEnM21jvs5XLEyP4-_cP_O07YCp1MJ8nDiaLWHNnVaCM8-IQgr3FEzuLjEi5-DlshaKKSPNjdzNP2umrd9hyphenhyphenTyp6CSQuf8aBB9YMdYButLnvm9jiWUoUkjEuJ6i8MCEkY7ntOTnTebJQXcTyR5oWqEvt3-EysxYk-DDUeGPzVqym5VMC9vYPP1k2_MTJO/s640/Direct%20Custom%20Avatars.gif"><img border="0" data-original-height="360" data-original-width="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJEnM21jvs5XLEyP4-_cP_O07YCp1MJ8nDiaLWHNnVaCM8-IQgr3FEzuLjEi5-DlshaKKSPNjdzNP2umrd9hyphenhyphenTyp6CSQuf8aBB9YMdYButLnvm9jiWUoUkjEuJ6i8MCEkY7ntOTnTebJQXcTyR5oWqEvt3-EysxYk-DDUeGPzVqym5VMC9vYPP1k2_MTJO/s16000/Direct%20Custom%20Avatars.gif"></a></div><div><br></div><div><i>Generated sample of a directed custom avatar</i></div><div><br></div><div>Previously, users could only direct default avatars. Now, you can add custom avatars as an ingredient in generated video clips, unlocking new ways to have your customized spokesperson tell your story. Every generation preserves your custom avatar's appearance and voice, ensuring your customizations are preserved throughout new generations.</div><div><br></div><div><ul><li><b>Control custom actions: </b>Instruct your avatar to walk, talk, and use objects simply by typing a text prompt describing their actions.</li><li><b>Use image references: </b>Upload additional images to direct your avatar in customized locations or with branded logos.</li></ul></div><h3>Getting started</h3><div><ul><li><b>Admins: </b>There is no admin control for these features.</li><li><b>End users:</b> Visit the Help Center to <a href="https://support.google.com/docs/answer/16334946" target="_blank">learn more about using AI avatars in Vids</a>.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains</a>: Full rollout (1–3 days for feature visibility) starting on June 17, 2026</li></ul></div><h3>Availability</h3><div><ul><li>Available to all Google Workspace customers and users with personal Google accounts</li></ul></div><h3>Resources</h3><div><ul><li>Google Docs Editors Help: <a href="https://support.google.com/docs/answer/16334946" target="_blank">Use AI avatars in Google Vids</a></li></ul></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Control whether your users can have temporary chats and delete conversations in the Gemini app]]></title>
<description><![CDATA[We’re introducing two new administrator controls for the Gemini app (gemini.google.com) that allow end users to manage their own chat activity. Admins can now configure whether users can use temporary chats and delete their conversation history.Temporary chats allows users to have conversations t...]]></description>
<link>https://tsecurity.de/de/3603215/it+betriebssysteme/web+tipps/control+whether+your+users+can+have+temporary+chats+and+delete+conversations+in+the+gemini+app/</link>
<pubDate>Tue, 16 Jun 2026 23:39:57 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[We’re introducing two new administrator controls for the Gemini app (gemini.google.com) that allow end users to manage their own chat activity. Admins can now configure whether users can use <b>temporary chats</b> and <b>delete their conversation history</b>.<div><br></div><div><ul><li><b>Temporary chats</b> allows users to have conversations that are not saved to their history.</li><li><b>Conversation deletion</b> allows users to delete individual chats or their entire chat history.</li></ul></div><div>These settings give organizations greater flexibility in managing data while empowering users to control their Gemini app experience.</div><div><br></div><div>Please note: If your organization uses Google Vault, <a href="https://workspaceupdates.googleblog.com/2026/06/google-vault-now-supports-retention-rules-and-litigation-holds-for-Gemini-app.html" target="_blank">Vault retention rules</a> will always be honored if they are set up.</div><h3>Getting started</h3><div><ul><li><b>Admins: </b>These features will be ON by default and can be disabled at the domain, OU, or group level. Visit the Help Center to <a href="https://knowledge.workspace.google.com/p/temp-chats" target="_blank">learn more</a>.</li><li><b>End users:</b> If enabled by your administrator, you can <a href="https://support.google.com/gemini/answer/13275745?hl=en&amp;co=GENIE.Platform%3DAndroid&amp;sjid=15095925293388133547-NC#:~:text=a%20Google%20Account.-,Start%20a%20temporary%20chat,-You%20can%20start" target="_blank">start a temporary chat</a> or <a href="https://support.google.com/gemini/answer/13666746?hl=en&amp;co=GENIE.Platform%3DAndroid#zippy=%2Cin-the-gemini-mobile-app:~:text=Delete%20a%20chat%20from%20pinned%20%26%20recent%20chats" target="_blank">delete a chat</a> directly within the Gemini app interface.</li></ul></div><h3>Rollout pace</h3><div><b>Admin controls</b></div><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains</a>: Full rollout (5-7 days for feature visibility) started on June 15, 2026</li></ul></div><div><b>End-user visibility</b></div><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains</a>: Full rollout (5-7 days for feature visibility) starting on June 21, 2026</li></ul></div><h3>Availability</h3><div><ul><li>Available to all Google Workspace customers</li></ul></div><h3>Resources</h3><div><ul><li>Google Workspace Admin Help: <a href="https://knowledge.workspace.google.com/p/temp-chats" target="_blank">Enable Gemini temporary chats in the Gemini App</a></li><li>Gemini Apps Help: <a href="https://support.google.com/gemini/answer/13275745?hl=en&amp;co=GENIE.Platform%3DAndroid&amp;sjid=15095925293388133547-NC#:~:text=a%20Google%20Account.-,Start%20a%20temporary%20chat,-You%20can%20start" target="_blank">Start a temporary chat</a></li><li>Gemini Apps Help: <a href="https://support.google.com/gemini/answer/13666746?hl=en&amp;co=GENIE.Platform%3DAndroid#zippy=%2Cin-the-gemini-mobile-app:~:text=Delete%20a%20chat%20from%20pinned%20%26%20recent%20chats" target="_blank">Delete a chat from pinned &amp; recent chats</a></li><li>Workspace Updates Blog: <a href="https://workspaceupdates.googleblog.com/2026/06/google-vault-now-supports-retention-rules-and-litigation-holds-for-Gemini-app.html" target="_blank">Google Vault now supports retention rules and litigation holds for Gemini app</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Gemini in Chrome expands to more languages and regions, including Latin America, Africa, and the Middle East]]></title>
<description><![CDATA[Many of Chrome's latest AI features are rolling out to users in Latin America, Africa, the Middle East, and more. Gemini in Chrome empowers business and education users with AI tools that integrate seamlessly into their daily browsing workflows while maintaining strict data governance. It’s also ...]]></description>
<link>https://tsecurity.de/de/3603066/it+betriebssysteme/web+tipps/gemini+in+chrome+expands+to+more+languages+and+regions+including+latin+america+africa+and+the+middle+east/</link>
<pubDate>Tue, 16 Jun 2026 22:11:38 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Many of <a href="https://blog.google/products-and-platforms/products/chrome/gemini-3-auto-browse/" target="_blank">Chrome's latest AI features</a> are rolling out to users in Latin America, Africa, the Middle East, <a href="https://support.google.com/chrome/a/answer/16291696?hl=en&amp;ref_topic=14443801&amp;sjid=5538708151884396850-NA#zippy=:~:text=of%20supported%20languages.-,Supported%20regions,-Supported%20languages" target="_blank">and more</a>. <div><br></div><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicNZhGhwaKBErbZgD81s7qEXC-yya8_jKSDBgHthVT9s1z4SHfB-mvi7Uvs6ENbRZ20lUne0d20KnoBgt4IWnVuuYrsDUJxkhjdrW__M4NYnLUPDLvijqhmKbEUv19jxaoJAjtqiAXNpzdTuKr5X2kTENFWZTBZFfPXDUXbKvlemYKHd69myKIc3lECmeF/s1612/Gemini%20in%20Chrome_Side-Panel.gif" imageanchor="1"><img alt="GIF showing Gemini in Chrome side panel" border="0" data-original-height="1146" data-original-width="1612" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicNZhGhwaKBErbZgD81s7qEXC-yya8_jKSDBgHthVT9s1z4SHfB-mvi7Uvs6ENbRZ20lUne0d20KnoBgt4IWnVuuYrsDUJxkhjdrW__M4NYnLUPDLvijqhmKbEUv19jxaoJAjtqiAXNpzdTuKr5X2kTENFWZTBZFfPXDUXbKvlemYKHd69myKIc3lECmeF/s16000/Gemini%20in%20Chrome_Side-Panel.gif"></a></div><br><div><br></div><div>Gemini in Chrome empowers business and education users with AI tools that integrate seamlessly into their daily browsing workflows while maintaining <a href="https://support.google.com/a?p=gemini_in_chrome" target="_blank">strict data governance</a>. It’s also available to users with personal Google accounts who can access the Gemini app.</div><div><br></div><div>Gemini in Chrome allows users to:</div><div><br></div><div><ul><li><b>Get answers and insights: </b>Summarize articles, clarify complex concepts, or find specific information based on the context of open tabs.</li><li><b>Generate content:</b> Draft emails and social media posts, or create images directly in the browser.</li><li><b>Go live: </b>Engage in two-way voice conversations with Gemini Live to brainstorm ideas or prepare for meetings.</li></ul></div><h3>Getting started</h3><div><ul><li><b>Admins: </b>This feature is ON by default unless you’ve already disabled the <a href="https://support.google.com/a?p=gemini_in_chrome" target="_blank">Gemini app service setting</a> or the <a href="https://chromeenterprise.google/policies/#GeminiSettings" target="_blank">Chrome Gemini setting</a>. The feature can be turned on or off at the domain, OU, or group level. Refer to the <a href="https://support.google.com/a/answer/14571493" target="_blank">Help Center</a> or our <a href="http://workspaceupdates.googleblog.com/2025/09/gemini-in-google-chrome-admin-settings-available.html" target="_blank">previous announcement</a> for information on the terms of service and privacy considerations for the feature.</li><li><b>End users: </b>To access Gemini in Chrome, click the Gemini icon at the top of your browser. You must meet the criteria listed <a href="https://support.google.com/a/answer/14571493" target="_blank">here</a>. Learn more about using Gemini in Chrome <a href="https://support.google.com/chrome/a/answer/17034491?visit_id=639124760733849519-596500748&amp;p=gemini_in_chrome_learning_center&amp;rd=2&amp;ref_topic=17031489" target="_blank">here</a>.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains</a>: Extended rollout (potentially longer than 15 days for feature visibility) started on June 10, 2026</li></ul></div><h3>Availability</h3><div><ul><li>Available to all Google Workspace plans, Workspace Individual subscribers, and users with personal Google accounts on ChromeOS, MacOS and Windows devices</li></ul></div><h3>Resources</h3><div>Chrome Enterprise &amp; Education Help: <a href="https://support.google.com/chrome/a/answer/16291696" target="_blank">Gemini in Chrome</a></div><div>Workspace Updates Blog: <a href="https://workspaceupdates.googleblog.com/2025/10/use-gemini-in-chrome-ai-browsing-assistant.html" target="_blank">Use the Gemini in Chrome AI browsing assistant, now generally available</a></div><div>Google Workspace Admin Help: <a href="https://support.google.com/a/answer/14571493" target="_blank">Turn the Gemini app on or off</a></div><div>Google Workspace Admin Help: <a href="https://support.google.com/a/answer/14564320?hl=en&amp;ref_topic=15995054&amp;sjid=18281381205986296685-NA" target="_blank">Review Gemini usage in your organization</a></div><div>Google Workspace Admin Help: <a href="https://support.google.com/a/answer/15706919" target="_blank">Generative AI in Google Workspace Privacy Hub</a></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[AI note-taking is now available in Google Voice]]></title>
<description><![CDATA[“Take notes for me” is available in Google Voice for your phone calls. This powerful new feature records and transcribes calls, summarizes key points, and organizes action items, which are sent via Gmail and stored in the Voice app.  This built-in tool eliminates manual note-taking, ensures criti...]]></description>
<link>https://tsecurity.de/de/3602873/it+betriebssysteme/web+tipps/ai+note-taking+is+now+available+in+google+voice/</link>
<pubDate>Tue, 16 Jun 2026 20:25:27 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[“Take notes for me” is available in Google Voice for your phone calls. This powerful new feature records and transcribes calls, summarizes key points, and organizes action items, which are sent via Gmail and stored in the Voice app.  This built-in tool eliminates manual note-taking, ensures critical details are never lost, and drives a highly professional customer experience.<div><br></div><div>This feature is available for new Voice users by default and requires manual enablement for existing Voice users. Admins can easily turn it on in the admin console at the domain, OU, or group level. Once turned on, eligible users will see the “Record” button become a “Notes” button during calls.</div><div><br></div><div>When you tap "Notes" during a Voice call, your conversation will be recorded and transcribed, while Gemini captures notes. When you hang up, you'll get an email with your notes in the body of the email. You can then find the transcript, audio recording, and notes saved right inside the Voice app alongside call details.</div><div><br></div><div><br></div><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8hTrROngjhQ3bGfVUPm-HgZkAzZRp12bxfRLTJ_oKI08oxqSAYqj3LhIYrt0OrP6lE1JEO5Cp82CXjxOrnRKSjWlf-mHBBhjiFZznfw-JNRpcM2Bn2VY9KodsuyrBNF7RDQhftMpIYxWhsZfa_Hz-4qPi0VJZ0huxTZ4C_d45Pr6HjVhyBPR10K8dPkwI/s1200/Voice%20Note%20Taking%20GIF%201.gif" imageanchor="1"><img alt='GIF showing how to tap the "Notes" icon on your phone' border="0" data-original-height="1200" data-original-width="554" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8hTrROngjhQ3bGfVUPm-HgZkAzZRp12bxfRLTJ_oKI08oxqSAYqj3LhIYrt0OrP6lE1JEO5Cp82CXjxOrnRKSjWlf-mHBBhjiFZznfw-JNRpcM2Bn2VY9KodsuyrBNF7RDQhftMpIYxWhsZfa_Hz-4qPi0VJZ0huxTZ4C_d45Pr6HjVhyBPR10K8dPkwI/w185-h400/Voice%20Note%20Taking%20GIF%201.gif" width="185"></a></div><div><i><br></i></div><div><i>Tap "Notes" on your phone to start recording, transcription, and note-taking</i></div><div><i><br></i></div><div><i><br></i></div><div><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiK95MlagqfsB1g_vNXizVySbrNhk96P1iVdlkkfEUaRHkYp7cYaG0k1p3eQeCGr1BzwuFeXltnfJcgXGp0AfhtfJhowd1RDR4U8IIe8vHewO8dyIkgj-myKRwsBy6ZWJp5oYn5DJvOlBTn0FRvNDfo8Jn9Q-GEQitv8UYZRqbAKKvIvkvwpg4YctkSW81Q/s1200/Voice%20Note%20Taking%20GIF%202.gif" imageanchor="1"><img alt="GIF showing notes in Voice app on phone" border="0" data-original-height="1200" data-original-width="554" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiK95MlagqfsB1g_vNXizVySbrNhk96P1iVdlkkfEUaRHkYp7cYaG0k1p3eQeCGr1BzwuFeXltnfJcgXGp0AfhtfJhowd1RDR4U8IIe8vHewO8dyIkgj-myKRwsBy6ZWJp5oYn5DJvOlBTn0FRvNDfo8Jn9Q-GEQitv8UYZRqbAKKvIvkvwpg4YctkSW81Q/w185-h400/Voice%20Note%20Taking%20GIF%202.gif" width="185"></a></div><div class="separator"><br></div></div><div><br></div><div><div><div class="separator"><i>After the call, your notes, recording, and transcription are captured in the Voice app</i></div></div><div><br></div></div><div><br></div><div><b>Privacy, ownership, and consent</b></div><div><ul><li>Post-call notes and transcriptions are strictly accessible only to the individual who initiated the AI capture. If multiple people start it, everyone gets their own separate artifact.</li><li>An audio disclosure ("This call is being recorded and captured by AI") ensures all participants are fully informed the moment the feature is activated. Admins are able to customize the consent in the admin console. Admins can also customize the consent language to align with their company's standards.</li></ul></div><div><i>Note that this feature is only available in English at this time.</i></div><h3>Getting started</h3><div><ul><li><b>Admins: </b>This feature is OFF by default for existing Google Voice customers and can be enabled at the domain, OU, or group level. It is available by default for new Voice customers and can be turned off at any time. Visit the Help Center to <a href="https://knowledge.workspace.google.com/p/tnfm-voice" target="_blank">learn more about letting Google Voice take AI notes for your users</a>.</li><li><b>End users: </b>End users need to turn on Workspace Smart Feature Consent in the account settings to gain access. Visit the Help Center to <a href="https://support.google.com/voice?p=voice_notes" target="_blank">learn more about Take notes for me in Google Voice</a>.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid and Scheduled Release domains</a>: Extended rollout (potentially longer than 15 days for feature visibility) starting on June 16, 2026</li></ul></div><h3>Availability</h3><div><ul><li>Available to all Google Workspace customers with Voice Standard and Voice Premier add-ons, as well as customers with Voice Standard standalone plans</li></ul></div><h3>Resources</h3><div><ul><li>Google Workspace Admin Help: <a href="https://knowledge.workspace.google.com/p/tnfm-voice" target="_blank">Let Google Voice take AI notes for my users</a></li><li>Google Voice Help: <a href="https://support.google.com/voice?p=voice_notes" target="_blank">Take notes for me in Google Voice</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[New discoverable space setting in Google Chat]]></title>
<description><![CDATA[Google Chat is expanding how users can find and join spaces by adding a third access option called "Discoverable."Previously, spaces were either private (invite-only) or open (anyone in the organization can find and join). Discoverable spaces provide a new option between the two: they appear when...]]></description>
<link>https://tsecurity.de/de/3602347/it+betriebssysteme/web+tipps/new+discoverable+space+setting+in+google+chat/</link>
<pubDate>Tue, 16 Jun 2026 17:27:13 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Google Chat is expanding how users can find and join spaces by adding a third access option called "Discoverable."<div><br></div><div>Previously, spaces were either private (invite-only) or open (anyone in the organization can find and join). Discoverable spaces provide a new option between the two: they appear when users browse for spaces within their organization, but the conversation history and messages remain private until an owner or manager approves a user's request to join.</div><div><br></div><div>This update helps organization leaders and community managers build groups  that are easy to find without sacrificing data privacy. For instance, this setup is ideal for employee resource groups, specialized internal committees, or project teams that want to maintain an organization-facing presence but require membership vetting before sharing ongoing discussions.</div><div><br></div><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPLiDy4-byDEocerUQvgmrL4I4Zhp8vHX-3KTyDiy1BQCkA1W84usBLlJL20_hhOkZmbo-SHlocKZVXi-0K_GYMKGiragPUqqec3K2wq6WDiixaoQXAblGc63QX6aIzEdbHO472EdANTq5Olkuc1DYNMGuwMXXYAo8TVOE7kADFa35oNdscl88lQbBBxfc/s2048/Discoverable%20Spaces.png" imageanchor="1"><img alt="Space settings showing three access types" border="0" data-original-height="1352" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPLiDy4-byDEocerUQvgmrL4I4Zhp8vHX-3KTyDiy1BQCkA1W84usBLlJL20_hhOkZmbo-SHlocKZVXi-0K_GYMKGiragPUqqec3K2wq6WDiixaoQXAblGc63QX6aIzEdbHO472EdANTq5Olkuc1DYNMGuwMXXYAo8TVOE7kADFa35oNdscl88lQbBBxfc/s16000/Discoverable%20Spaces.png"></a></div><div><i>Space settings showing three access types</i></div><div><br></div><div>Additionally, for customers that allow sharing spaces with multiple groups of users, advanced settings can be used to mix and match different groups of users for who can find and join the space.</div><div><br></div><div><i><b>Note: </b>Space access types are only in space settings for now, but we will also extend them to space creation in the future.</i></div><h3>Getting started</h3><div><ul><li><b>Admins: </b>There is no admin control for this feature.</li><li><b>End users: </b>Space owners and managers can update this option by navigating to their existing space settings. Visit the Help Center to <a href="https://support.google.com/chat/answer/11971020" target="_blank">learn more about changing space access levels</a>.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains</a>: Gradual rollout (up to 15 days for feature visibility) starting on June 15, 2026</li></ul></div><div><i>API and mobile support will follow within the next month. Stay tuned to <a href="https://developers.google.com/workspace/chat/release-notes" target="_blank">API release notes</a>.</i></div><h3>Availability</h3><div><ul><li>Available to all Google Workspace customers</li></ul></div><h3>Resources</h3><div><ul><li>Google Workspace Admin Help: <a href="https://knowledge.workspace.google.com/admin/chat/optimize-spaces-for-your-organization" target="_blank">Optimize spaces for your organization</a></li><li>Google Chat Help: <a href="https://support.google.com/chat/answer/13340792?hl=en&amp;co=GENIE.Platform%3DDesktop" target="_blank">Manage space settings</a></li><li>Google Chat Help: <a href="https://support.google.com/chat/answer/11971020?hl=en&amp;co=GENIE.Platform%3DDesktop&amp;oco=0" target="_blank">Change the space access level</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Carrier Link for Google Voice]]></title>
<description><![CDATA[Carrier Link allows Workspace customers to easily add phone numbers and calling plans from a certified local carrier, leveraging a pre-configured multi-tenant implementation of SIP Link.This simplifies the process of setting up a cloud phone system, allowing customers to make and receive calls wi...]]></description>
<link>https://tsecurity.de/de/3599667/it+betriebssysteme/web+tipps/carrier+link+for+google+voice/</link>
<pubDate>Mon, 15 Jun 2026 18:07:43 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Carrier Link allows Workspace customers to easily add phone numbers and calling plans from a certified local carrier, leveraging a pre-configured multi-tenant implementation of SIP Link.<div><br></div><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDxKa1_s_cn7n9z5IjmTH470XapQH-U3GOIZSVxNaCpEKaBJLi5tl93wx7nVLf4RbbjLigq4O1dvoiPtF-x-d8S0OgEIrUjoi_T_-yOzn91VcOJz0WKBojFHFaUtI4XZspMS8bWb0BtNc-Y5Azl2yNUIPIgLoXRgR52IyO1J0CQvJjfjghZuwNjhQQWAQL/s864/Carrier%20Link%20for%20Voice.png" imageanchor="1"><img alt="Flow chart showing how Carrier Link works" border="0" data-original-height="236" data-original-width="864" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDxKa1_s_cn7n9z5IjmTH470XapQH-U3GOIZSVxNaCpEKaBJLi5tl93wx7nVLf4RbbjLigq4O1dvoiPtF-x-d8S0OgEIrUjoi_T_-yOzn91VcOJz0WKBojFHFaUtI4XZspMS8bWb0BtNc-Y5Azl2yNUIPIgLoXRgR52IyO1J0CQvJjfjghZuwNjhQQWAQL/s16000/Carrier%20Link%20for%20Voice.png"></a></div><br><div><br></div><div>This simplifies the process of setting up a cloud phone system, allowing customers to make and receive calls with payment handled by their local carrier and minimal configuration. Carrier Link is especially helpful for small businesses that want a reliable connection without the hassle of setting up their own hardware.</div><div><br></div><div>We are launching this feature in <a href="https://knowledge.workspace.google.com/admin/voice/google-voice-operating-system-and-browser-compatibility#SIP" target="_blank">20 countries</a> with our Carrier Link partners, <a href="https://www.tatacommunications.com/kaleyra/ucaas/voice-solutions-google-workspace?hs_preview=TKKWkQmY-211617092721" target="_blank">Tata Communications</a> and <a href="https://globalsolutions.telefonica.com/es/multinacionales/productos/servicios-de-voz/global-sip-trunk/" target="_blank">Telefonica Global Solutions</a>, who have collaborated with Google Voice to offer services via alternative carriers.</div><h3>Getting started</h3><div><ul><li><b>Admins: </b>Contact one of our Carrier Link partners to get started. They will provision the SIP Link licenses and phone numbers, which you can then assign to <a href="https://support.google.com/a/answer/9037998" target="_blank">users</a>, <a href="https://support.google.com/a/answer/9250113" target="_blank">desk phones</a>, <a href="https://support.google.com/a/answer/9204988" target="_blank">auto-attendants</a>, and <a href="https://support.google.com/a/answer/9424746" target="_blank">ring groups</a>. Visit the Help Center to <a href="https://knowledge.workspace.google.com/admin/voice/carrier-link-works" target="_blank">learn more about Carrier Link requirements</a>.</li><li><b>End users: </b>There is no end user action required.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains</a>: Gradual rollout (up to 15 days for feature visibility) June 15, 2026</li></ul></div><h3>Availability</h3><div><ul><li>Available to Workspace customers with SIP Link Standard and Premier subscriptions</li></ul></div><h3>Resources</h3><div><ul><li>Google Workspace Admin Help: <a href="https://knowledge.workspace.google.com/admin/voice/carrier-link-works" target="_blank">How Carrier Link works</a></li><li>Google Workspace Admin Help: <a href="https://support.google.com/voice/answer/115061" target="_blank">Set up Google Voice</a></li><li>Google Workspace Admin Help: <a href="https://knowledge.workspace.google.com/admin/voice/manage-carrier-link-numbers" target="_blank">Manage Carrier Link Number</a></li><li>Google Workspace Admin Help: <a href="https://support.google.com/a/answer/9250113" target="_blank">Set up Voice desk phones for your organization</a></li><li>Google Workspace Admin Help: <a href="https://support.google.com/a/answer/9204988" target="_blank">Set up an automated attendant</a></li><li>Google Workspace Admin Help: <a href="https://support.google.com/a/answer/9424746" target="_blank">Set up ring groups</a></li><li>Google Workspace Updates  Blog: <a href="https://workspaceupdates.googleblog.com/2022/10/google-voice-sip-link.html" target="_blank">Use SIP Link to link phone numbers from local carriers to Google Voice</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Google Workspace Updates Weekly Recap - June 12, 2026]]></title>
<description><![CDATA[Request lightweight document alignment with approvals in Google DriveGoogle Drive is introducing alignment approvals, a lightweight mechanism that allows teams to request and record document sign-offs without file changes resetting the approval flow. When a document is in a partially approved sta...]]></description>
<link>https://tsecurity.de/de/3594542/it+betriebssysteme/web+tipps/google+workspace+updates+weekly+recap+-+june+12+2026/</link>
<pubDate>Fri, 12 Jun 2026 22:55:03 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h3>Request lightweight document alignment with approvals in Google Drive</h3><div>Google Drive is introducing alignment approvals, a lightweight mechanism that allows teams to request and record document sign-offs without file changes resetting the approval flow. When a document is in a partially approved state, collaborators can continue making edits without resetting any recorded approver decisions. | Learn more about <a href="https://workspaceupdates.googleblog.com/2026/06/request-lightweight-document-alignment-with%20approvals%20in%20Google%20Drive.html" target="_blank">how to request lightweight document alignment with approvals in Google Drive</a>.</div><h3>Convert rubric files and images into Google Classroom rubrics with help from Gemini</h3><div>With this launch, rubric conversion will be controlled by the Gemini in Classroom setting in the Admin console. | Learn more about <a href="https://workspaceupdates.googleblog.com/2026/06/convert-rubric-files-and-images-into-Google-Classroom-rubrics-with-help-from-Gemini.html" target="_blank">how to convert rubric files and images into Google Classroom rubrics with help from Gemini</a>.</div><h3>Introducing the Workspace Policy API mutate endpoints for DLP</h3><div>With our latest update, we are introducing mutate endpoints (Create, Update, Delete) alongside existing read-only capabilities (Get, List) for data loss prevention (DLP) rules and detectors. This allows super admins to programmatically manage and fully automate the entire lifecycle of their DLP policies, from initial creation to real-time activation and deactivation. | Learn more about <a href="https://workspaceupdates.googleblog.com/2026/06/introducing-workspace-policy-api-mutate-endpoints-for-DLP.html" target="_blank">the Workspace Policy API mutate endpoints for DLP</a>.</div><h3>Google Meet now supports sending 1080p HD video from ChromeOS meeting room hardware</h3><div>We previously launched support for sending full HD video (1080p) in Meet on the web, and we’re now extending that capability to Google Meet room hardware based on ChromeOS. | Learn more about <a href="https://workspaceupdates.googleblog.com/2026/06/google-meet-now-supports-sending-1080p-HD-video-from-ChromeOS-meeting-room-hardware.html" target="_blank">Google Meet now supports sending 1080p HD video from ChromeOS meeting room hardware</a>.</div><h3>Google Vault now supports retention rules and litigation holds for Gemini app</h3><div>Google Vault now supports retention rules and litigation holds for the Gemini app on web and mobile. Previously, administrators were able to use Vault to search Gemini app conversations and export those search results. | Learn more about <a href="https://workspaceupdates.googleblog.com/2026/06/google-vault-now-supports-retention-rules-and-litigation-holds-for-Gemini-app.html" target="_blank">Google Vault now supports retention rules and litigation holds for Gemini app</a>.</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Google Vault now supports retention rules and litigation holds for Gemini app]]></title>
<description><![CDATA[Google Vault now supports retention rules and litigation holds for the Gemini app on web and mobile. Previously, administrators were able to use Vault to search Gemini app conversations and export those search results. With this update, administrators can now also create, update, and delete the f...]]></description>
<link>https://tsecurity.de/de/3591603/it+betriebssysteme/web+tipps/google+vault+now+supports+retention+rules+and+litigation+holds+for+gemini+app/</link>
<pubDate>Thu, 11 Jun 2026 20:54:46 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Google Vault now supports retention rules and litigation holds for the Gemini app on web and mobile. Previously, administrators were able to use Vault to search Gemini app conversations and export those search results. With this update, administrators can now also create, update, and delete the following for the Gemini app:<div><br></div><div><ul><li><b>Default retention rules:</b> Set default retention rules for the Gemini app for a finite or indefinite retention period.</li><li><b>Custom retention rules:</b> Create custom retention rules for the Gemini app by organizational unit (OU) or the entire domain for a finite or indefinite retention period.</li><li><b>Litigation holds:</b> Place holds on the Gemini app data for a specific OU or a list of users.</li></ul><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHQn6Ug0AAmXUNouX4t32lUHtfaONrEpg7eOIMd0Zb4HDd9JPmxgnM0IWHqZNQpHMIFvRHi5aiPQTCLsKp7GGiuOgsMAFIYZxgoskJkMTehM88TJt8S-poBKAKJPLTqGu63JvOtWgdhvNAw4v0Y9tnE4lv_bknF0_CC0jGWdRV6wgXgw9dpDQ7wSEH980/s2048/Google%20Vault%20now%20supports%20retention%20rules%20and%20litigation%20holds%20for%20Gemini%20app%20-%206407.png" imageanchor="1"><img border="0" data-original-height="984" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHQn6Ug0AAmXUNouX4t32lUHtfaONrEpg7eOIMd0Zb4HDd9JPmxgnM0IWHqZNQpHMIFvRHi5aiPQTCLsKp7GGiuOgsMAFIYZxgoskJkMTehM88TJt8S-poBKAKJPLTqGu63JvOtWgdhvNAw4v0Y9tnE4lv_bknF0_CC0jGWdRV6wgXgw9dpDQ7wSEH980/s16000/Google%20Vault%20now%20supports%20retention%20rules%20and%20litigation%20holds%20for%20Gemini%20app%20-%206407.png"></a></div></div><div><a href="https://workspace.google.com/products/vault/" target="_blank">Google Vault</a> is an eDiscovery and information governance tool for Google Workspace that enables customers to retain, hold, search, and export users’ Google Workspace data. With this update, customers can expand their regulatory and legal eDiscovery management to include retention and holds for the Gemini app, making it easier to comply with data obligations from a central tool.</div><div><br></div><div><b>Additional details</b></div><div><br></div><div><ul><li><b>Application scope: </b>This update applies specifically to the Gemini app (on web and mobile) and is not applicable to Gemini in Google Workspace features integrated into other apps (such as "Help me write" in Gmail or Docs), as those specific interactions are not retained in the same manner.</li><li><b>Policy precedence: </b>Vault retention rules and holds will always take precedence over Admin console settings, user deletion settings, or user activity settings.</li><ul><li><i>Example: </i>If a user deletes a conversation or turns off their activity setting, but an active Vault hold requires retention, the data is hidden from the user but remains fully retained and visible to Vault administrators.</li></ul><li><b>API support: </b>Support for Vault API users will be available in the coming weeks.</li></ul></div><h3>Getting started</h3><div><ul><li><b>Admins:</b> Visit the Help Center to learn more about <a href="https://support.google.com/vault/answer/15695746" target="_blank">using Vault to search the Gemini app</a>, as well as <a href="https://support.google.com/vault/answer/6127699" target="_blank">supported services and data types</a>. If active, Vault retention rules and holds will take precedence over any other Admin Console setting or user setting.</li><li><b>End users:</b> There is no end-user setting for this feature.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid and Scheduled Release domains:</a> Available now</li></ul></div><h3>Availability</h3><div><ul><li><b>Business: </b>Business Plus</li><li><b>Other Editions:</b> Frontline Standard and Plus; Enterprise Essentials Plus</li><li><b>Enterprise:</b> Enterprise Standard and Plus</li><li><b>Education:</b> Education Fundamentals, Standard and Plus</li><li><b>Other Add-ons:</b> Vault</li></ul></div><h3>Resources</h3><div><ul><li>Google Workspace Updates: <a href="https://workspaceupdates.googleblog.com/2025/02/google-vault-now-supports-gemini.html" target="_blank">Google Vault now supports the Gemini app</a></li><li>Google Workspace Updates: <a href="https://workspaceupdates.googleblog.com/2025/05/google-vault-gemini-support-for-all-google-workspace-for-education-customers.html" target="_blank">Gemini app reporting now available for all Google Workspace for Education customers</a></li><li>Google Vault Help: <a href="https://support.google.com/vault/answer/6127699?hl=en#Gemini&amp;zippy=%2Csupported-gemini-app-data" target="_blank">Supported services &amp; data types</a></li><li>Google Vault Help: <a href="https://support.google.com/vault/answer/15695746" target="_blank">Use Vault to search Gemini app</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Improvements to Out-of-Domain file-level warnings]]></title>
<description><![CDATA[Today, we’re announcing improvements to our Out-of-Domain file-level warnings. First launched in April 2025, these badges alert users to documents and users outside of their Workspace organization, helping to prevent accidental data exfiltration and potential phishing attacks that spoof internal ...]]></description>
<link>https://tsecurity.de/de/3589223/it+betriebssysteme/web+tipps/improvements+to+out-of-domain+file-level+warnings/</link>
<pubDate>Thu, 11 Jun 2026 01:55:01 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Today, we’re announcing improvements to our Out-of-Domain file-level warnings. First launched in April 2025, these badges alert users to documents and users outside of their Workspace organization, helping to prevent accidental data exfiltration and potential phishing attacks that spoof internal content. We’ve expanded support across devices and sharing types in the following ways:<div><br><div><ul><li>Files in the Android and iOS apps for Drive, Docs, Sheets, and Slides now include external indicators</li><li>Chat Spaces and Google Groups can be configured to allow external users; if they’re given access to a document, that document now shows the external badge</li><li>If a service account has access to a document, and that service account is owned by an external Google Cloud organization, it now triggers the external badge in documents</li><li>Comment email notifications now include badges for external documents and users</li><li>File sharing email notifications now include badges for external documents and users</li></ul></div><div><b><br></b></div><div><b>How Out-of-Domain warnings work</b></div><div><br></div><div>This feature helps users identify potentially risky files and avoid phishing scams when working with files shared from outside your organization.</div><div><br></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container"><tbody><tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQy2JIt2r0a8lr3MNeIuRiSuWjhJ5MfoLAKUis3IGNYLEF9k5OyEXvWJfHHjoYi6MDncizwtrU7UvVqD7UxnQPtpn0RKHWZRMDdIKkzZknCClJXBdvfWhSHDD9fvlQhERRDg5eftlvmJgn7qwhVllnRFFPi6ItEjAf8Ewq6QhWw3ZxwxjNiHm5aL-sXxY/s2048/Improvements%20to%20Out-of-Domain%20file-level%20warnings%20-%201.png"><img border="0" data-original-height="2048" data-original-width="1262" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQy2JIt2r0a8lr3MNeIuRiSuWjhJ5MfoLAKUis3IGNYLEF9k5OyEXvWJfHHjoYi6MDncizwtrU7UvVqD7UxnQPtpn0RKHWZRMDdIKkzZknCClJXBdvfWhSHDD9fvlQhERRDg5eftlvmJgn7qwhVllnRFFPi6ItEjAf8Ewq6QhWw3ZxwxjNiHm5aL-sXxY/s16000/Improvements%20to%20Out-of-Domain%20file-level%20warnings%20-%201.png"></a></td></tr><tr><td class="tr-caption"><span><span face='"Google Sans Text", sans-serif'>Notification in comments</span></span></td></tr></tbody></table><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container"><tbody><tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1Xjq4IfzCvgL5np8UW-30Rvcts3_4ly80zvqhEzyAMcHtJEqbN3uy0LkgkdYv6aM0AbgwVwiF_P1R0e2z301tscCd2mviEglB9p5uC-DHaN5iy_qXIDXaEDMVb1ohCQGApWVeHUTFgnycinBy75DBthiebYhKqTdlPtCIRpgoVKrXf_uacwtMs17CekQ/s1924/Improvements%20to%20Out-of-Domain%20file-level%20warnings%20-%202.png"><img border="0" data-original-height="1924" data-original-width="1504" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1Xjq4IfzCvgL5np8UW-30Rvcts3_4ly80zvqhEzyAMcHtJEqbN3uy0LkgkdYv6aM0AbgwVwiF_P1R0e2z301tscCd2mviEglB9p5uC-DHaN5iy_qXIDXaEDMVb1ohCQGApWVeHUTFgnycinBy75DBthiebYhKqTdlPtCIRpgoVKrXf_uacwtMs17CekQ/s16000/Improvements%20to%20Out-of-Domain%20file-level%20warnings%20-%202.png"></a></td></tr><tr><td class="tr-caption"><span><p dir="ltr"><span face='"Google Sans Text", sans-serif'>Notification in file sharing email</span></p></span></td></tr></tbody></table><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container"><tbody><tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqHshXomWaOj6QPCMrIba4nSBkHCcN40xQdEQeq0LxhfT4miuI0CexK2rEQ3AzYb4VeHlzamYtBA-RG8pv5AdUfyMFZLQXE3ioAB9wmpZPw7l-RdON11GZ8HUmNZp2Zcs7rxoeZ73DzfsI3hPa-1BqcBU_t8MhmABG475_BSh_RXguPiZJn9z6iiYj42w/s979/Improvements%20to%20Out-of-Domain%20file-level%20warnings%20-%203.png"><img alt='An image showing a Google Doc with the word "External" displayed in a small yellow badge next to the document title. The badge has been clicked, and a pop-up window appears with more information stating that “This document is owned by someone outside your organization. Be cautious about sharing sensitive information.' border="0" data-original-height="350" data-original-width="979" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqHshXomWaOj6QPCMrIba4nSBkHCcN40xQdEQeq0LxhfT4miuI0CexK2rEQ3AzYb4VeHlzamYtBA-RG8pv5AdUfyMFZLQXE3ioAB9wmpZPw7l-RdON11GZ8HUmNZp2Zcs7rxoeZ73DzfsI3hPa-1BqcBU_t8MhmABG475_BSh_RXguPiZJn9z6iiYj42w/s16000/Improvements%20to%20Out-of-Domain%20file-level%20warnings%20-%203.png"></a></td></tr><tr><td class="tr-caption"><span><span face='"Google Sans Text", sans-serif'>Image of "External" badge displayed in Google Docs</span></span></td></tr></tbody></table><h3>Getting started</h3><div><ul><li><b>Admins: </b>This feature is <b>ON</b> by default and can be disabled at the domain and organizational level. Visit the Help Center to <a href="https://support.google.com/a/answer/60781" target="_blank">learn more about turning Out-of-Domain Warnings on or off for your organization</a>.</li><li><b>End users:</b> This feature is ON by default. There is no end-user setting for this feature. Visit the Help Center to <a href="https://support.google.com/drive/answer/2494822?hl=en#:~:text=Learn%20about%20alerts%20for%20external%20files" target="_blank">learn more about sharing files from Google Drive</a>.</li></ul><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container"><tbody><tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7mo3hbQeWyBTL9WKeDT_Cz7e3UcbHbs0DHJBK8yTnLOUylNcfS9Z0axncnIjEI0D45CaUu_CYikMbp2FVdjGKj-pQGMYJRORf8CiWlQU1EY-HReZFBUVwjjG-qA2kcv-IR9gLN1aybGnggFH9Z-5fg_pDYn1-1dJtG_-unFRfhv2AD2-uFJETUJqHaMc/s2048/Improvements%20to%20Out-of-Domain%20file-level%20warnings%20-%204.png"><img alt='Screenshot of the Google Workspace Admin console, navigated to Sharing settings. At the bottom of the page, a new section labeled "Highlight external files" is highlighted. The checkbox is checked, and the description reads: "Mark external files shared or owned externally as “external” to flag that content may be viewable outside your organization.' border="0" data-original-height="1427" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7mo3hbQeWyBTL9WKeDT_Cz7e3UcbHbs0DHJBK8yTnLOUylNcfS9Z0axncnIjEI0D45CaUu_CYikMbp2FVdjGKj-pQGMYJRORf8CiWlQU1EY-HReZFBUVwjjG-qA2kcv-IR9gLN1aybGnggFH9Z-5fg_pDYn1-1dJtG_-unFRfhv2AD2-uFJETUJqHaMc/s16000/Improvements%20to%20Out-of-Domain%20file-level%20warnings%20-%204.png"></a></td></tr><tr><td class="tr-caption"><span><span face='"Google Sans Text", sans-serif'>Image of the Google Workspace Admin console, Sharing settings, showing the "Highlight external files" option enabled</span></span></td></tr></tbody></table></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Available now</li></ul></div><h3>Availability</h3><div><ul><li>Available to all Google Workspace customers</li></ul></div><h3>Resources</h3><div><ul><li>Google Workspace Admin Help: <a href="https://knowledge.workspace.google.com/admin/drive/manage-external-sharing-for-your-organization" target="_blank">Manage external sharing for your organization</a></li><li>Google Drive Help: <a href="https://support.google.com/drive/answer/2494822?hl=en#:~:text=Learn%20about%20alerts%20for%20external%20files" target="_blank">Share files from Google Drive - Android</a></li><li>Google Drive Help: <a href="https://support.google.com/drive/answer/2494893?hl=en#:~:text=Learn%20about%20alerts%20for%20external%20files" target="_blank">Stop, limit, or change sharing</a></li><li>Google Workspace Updates Blog: <a href="https://workspaceupdates.googleblog.com/2025/04/out-of-domain-file-warnings-for-drive-docs-sheets-slides-files.html" target="_blank">Enhance Your Organization’s Security with Out-of-Domain File Warnings in Google Workspace</a></li></ul></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Keep your sources up to date with automatic Drive syncing in NotebookLM]]></title>
<description><![CDATA[We’re making it easier to keep your sources and insights current in NotebookLM by enabling automatic syncing with Google Drive. Previously, if you uploaded a file in Google Docs, Sheets, or Slides, you’d have to manually update it in NotebookLM to see the changes. With this update, as the content...]]></description>
<link>https://tsecurity.de/de/3589222/it+betriebssysteme/web+tipps/keep+your+sources+up+to+date+with+automatic+drive+syncing+in+notebooklm/</link>
<pubDate>Thu, 11 Jun 2026 01:55:00 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[We’re making it easier to keep your sources and insights current in <a href="https://notebooklm.google.com/" target="_blank">NotebookLM</a> by enabling automatic syncing with Google Drive. Previously, if you uploaded a file in Google Docs, Sheets, or Slides, you’d have to manually update it in NotebookLM to see the changes. With this update, as the content in your Drive files evolves, the information within the notebook updates automatically to match. This update ensures that you're always working with the most accurate and up-to-date information without the manual effort of re-syncing files.<div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2JCOvcTOqjiBVdXJF9js3qI5JAqydmcSal7S-IghgMzpuowQdT4JYtEqP2hTNukrqbhwo9ymwgcpV_UIIiJNMfw3qtLYCefWHa5l5_iw4acxzap3iVWl1PUorDY7-q7G4Vn2DYuhtk5_CahA7ogWWZ6UI0btCUrxRI6kty2r5M4pa3bCpeUSVOE5eJws/s720/Keep%20your%20sources%20up%20to%20date%20with%20automatic%20Drive%20syncing%20in%20NotebookLM%20-%206917.gif"><img border="0" data-original-height="320" data-original-width="720" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2JCOvcTOqjiBVdXJF9js3qI5JAqydmcSal7S-IghgMzpuowQdT4JYtEqP2hTNukrqbhwo9ymwgcpV_UIIiJNMfw3qtLYCefWHa5l5_iw4acxzap3iVWl1PUorDY7-q7G4Vn2DYuhtk5_CahA7ogWWZ6UI0btCUrxRI6kty2r5M4pa3bCpeUSVOE5eJws/s16000/Keep%20your%20sources%20up%20to%20date%20with%20automatic%20Drive%20syncing%20in%20NotebookLM%20-%206917.gif"></a></div><div>NotebookLM will also strictly respect file deletions and permissions. If a user’s access to a Drive file is revoked, they will no longer be able to use that file as a source in their notebook. The source will appear in the sources list with a link to the source for the user to request access. Additionally, if a file is deleted from Drive, it will be removed from the notebook as well, ensuring your research environment stays organized and secure.</div><h3>Getting started</h3><div><ul><li><b>Admins:</b> There is no admin control for this feature. Visit the Admin Help Center to <a href="https://knowledge.workspace.google.com/admin/users/access/turn-notebooklm-on-or-off-for-users?hl=en&amp;visit_id=639087764918516771-2920918685&amp;rd=1" target="_blank">learn more about turning NotebookLM on or off for users</a>.</li><li><b>End users: </b>There is no end user setting for this feature.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Gradual rollout (up to 15 days for feature visibility) starting on May 26, 2026</li></ul></div><h3>Availability</h3><div><ul><li>Available to all Google Workspace customers and users with personal Google accounts with access to NotebookLM</li></ul></div><h3>Resources</h3><div><ul><li>Google Workspace Admin Help: <a href="https://support.google.com/a/answer/15239506?hl=en" target="_blank">Turn NotebookLM on or off for users</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Gemini LTI Update: Include your LMS sources when using NotebookLM in Powerschool Schoology]]></title>
<description><![CDATA[When creating a notebook in Powerschool Schoology, Gemini LTI users can now add content directly from their course as sources. This integration allows educators and students to seamlessly bridge their course materials with AI-powered research and analysis, and generate Studio artifacts like Audio...]]></description>
<link>https://tsecurity.de/de/3589221/it+betriebssysteme/web+tipps/gemini+lti+update+include+your+lms+sources+when+using+notebooklm+in+powerschool+schoology/</link>
<pubDate>Thu, 11 Jun 2026 01:54:59 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[When creating a notebook in Powerschool Schoology, Gemini LTI users can now add content directly from their course as sources. This integration allows educators and students to seamlessly bridge their course materials with AI-powered research and analysis, and generate Studio artifacts like Audio and Video Overviews, infographics, slide decks, and more based on their Schoology resources. By automating the import of Schoology course materials, users can quickly ground their notebooks in specific curriculum content without the need for manual file uploads.<div><br></div><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZPZaqQoQelv7pOdoeAr1N_WT4NBtHZkxrBV6P1lon4gdcm6vZxyaY6d_n4RYd0o41n2dAscalUwj06R0TEnjEkG0FGvX8dDq_JY0wKgAVmLWL6gbsBiP6iLYP7S0uOX2R5ianFkfHGVVvZSr3qi9eb9Ua1GZvw4zzCNVAArXeT-6mIfyiYaSRYaxAftw/s1728/Gemini%20LTI%20Update%20-%20Include%20your%20LMS%20sources%20when%20using%20NotebookLM%20in%20Powerschool%20Schoology.gif"><img border="0" data-original-height="994" data-original-width="1728" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZPZaqQoQelv7pOdoeAr1N_WT4NBtHZkxrBV6P1lon4gdcm6vZxyaY6d_n4RYd0o41n2dAscalUwj06R0TEnjEkG0FGvX8dDq_JY0wKgAVmLWL6gbsBiP6iLYP7S0uOX2R5ianFkfHGVVvZSr3qi9eb9Ua1GZvw4zzCNVAArXeT-6mIfyiYaSRYaxAftw/s16000/Gemini%20LTI%20Update%20-%20Include%20your%20LMS%20sources%20when%20using%20NotebookLM%20in%20Powerschool%20Schoology.gif"></a></div><h3>Getting started</h3><div><ul><li><b>Admins:</b></li><ul><li>In order for educators and students to access Gemini LTI™, you’ll need to <a href="https://support.google.com/edu/assignments/answer/14996805?hl=en" target="_blank">enable the Google Workspace LTI™ service in the Admin console</a> and <a href="https://support.google.com/a/answer/14571493?hl=en" target="_blank">enable the Gemini service in the Admin console</a>. Visit the Help Center to learn more about <a href="https://support.google.com/edu/assignments/answer/15672329" target="_blank">Gemini LTI in general</a>.</li><li>Learning Management Systems admins need to <a href="https://support.google.com/edu/assignments/answer/15672329" target="_blank">enable Gemini LTI™ in their LMS</a> as well. Visit the Help Center to learn more about <a href="https://support.google.com/edu/assignments/answer/15672142?hl=en" target="_blank">setting up Gemini LTI in Powerschool Schoology</a>.</li><li>For educators and students to use Schoology content as a source in NotebookLM, users must be in a group or OU with NotebookLM set to On. Visit the Help Center to learn more about <a href="https://support.google.com/a/answer/15239506" target="_blank">turning NotebookLM on or off for users</a>.</li></ul><li><b>End users:</b></li><ul><li>To add Schoology content notebook sources, open the Schoology homepage and select Google Gemini &gt; Manage notebooks &gt; Create new &gt; Enter a title &gt; Files &gt; Select file(s) &gt; Create notebook.</li><li>Visit the Help Center to learn more about <a href="https://support.google.com/edu/assignments/answer/15672329" target="_blank">Gemini LTI™</a>.</li></ul></ul><h3>Rollout pace</h3></div><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Available now</li></ul></div><h3>Availability</h3><div><ul><li><b>Education:</b> Education Fundamentals, Standard, and Plus</li></ul></div><h3>Resources</h3><div><ul><li>Google Workspace Admin Help: <a href="https://support.google.com/edu/assignments/answer/14996805?hl=en" target="_blank">Learn how to turn on Google Workspace LTI™</a></li><li>Google Workspace Admin Help: <a href="https://support.google.com/edu/assignments/answer/15672142?hl=en" target="_blank">Set up Gemini LTI™ in PowerSchool Schoology Learning</a></li><li>Google Workspace Admin Help: <a href="https://knowledge.workspace.google.com/admin/gemini/turn-the-gemini-app-on-or-off?hl=en&amp;visit_id=639137709399432877-386770673&amp;rd=1" target="_blank">Turn the Gemini app on or off</a></li><li>Google Workspace Admin Help: <a href="http://google.com/url?q=https://support.google.com/a/answer/15239506&amp;sa=D&amp;source=docs&amp;ust=1778178576544156&amp;usg=AOvVaw12DjSgrOBTQEDNnaTBotib" target="_blank">Turn NotebookLM on or off for users</a></li><li>Google Help: <a href="https://support.google.com/edu/assignments/answer/15672329?hl=en" target="_blank">Learn about Gemini LTI</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[More granular admin controls for Workspace Studio steps and starters]]></title>
<description><![CDATA[We’re introducing more granular admin controls for Workspace Studio steps and starters. With these new controls, admins can define which steps and starters people in their organization can use to create flows, including by Workspace service or individually. They provide admins more granular contr...]]></description>
<link>https://tsecurity.de/de/3589220/it+betriebssysteme/web+tipps/more+granular+admin+controls+for+workspace+studio+steps+and+starters/</link>
<pubDate>Thu, 11 Jun 2026 01:54:58 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[We’re introducing more granular admin controls for Workspace Studio steps and starters. With these new controls, admins can define which steps and starters people in their organization can use to create flows, including by Workspace service or individually. They provide admins more granular control of Studio functionality, and are particularly useful for gradual rollout of Studio in their organizations.<div><br></div><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoKDiVsSfCA2P1WWD-b3qj1WDwjR89NM5quaeYGiEhTM8yMPeanC8jcTNtkdyThLARlDREEyfsg3qSu5mqjYDXDMirRuBpZynYoJ_mY9427JVsmR_Heg4iQ8zMPvt5nlvBy8NBYUZZSLlp2FYYP9rqmh6YpfvPyW9rr2egbXnJZTpd1Px6CJd9Q5LuBrg/s1070/More%20granular%20admin%20controls%20for%20Workspace%20Studio%20steps%20and%20starters%20-%206934%20-%201.png" imageanchor="1"><img border="0" data-original-height="862" data-original-width="1070" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoKDiVsSfCA2P1WWD-b3qj1WDwjR89NM5quaeYGiEhTM8yMPeanC8jcTNtkdyThLARlDREEyfsg3qSu5mqjYDXDMirRuBpZynYoJ_mY9427JVsmR_Heg4iQ8zMPvt5nlvBy8NBYUZZSLlp2FYYP9rqmh6YpfvPyW9rr2egbXnJZTpd1Px6CJd9Q5LuBrg/s16000/More%20granular%20admin%20controls%20for%20Workspace%20Studio%20steps%20and%20starters%20-%206934%20-%201.png"></a></div><br><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzhe4UQb3qheu8eMdCCkdXzjP5fR6-0H2FvCLkR49Zok_kPzZ_5buKg38Ddz41ofRpMtwddtm-JpgSeWhwVyx9ERz68LbU5CWElOAdhShLj9yl8TT8a3f8dD_RfslH-AixwBdYn5V4OauVJGprPXbKo5USdkZ_WYhwazYpE4IU3rgcoTuPdKXAeq_d9SU/s1940/More%20granular%20admin%20controls%20for%20Workspace%20Studio%20steps%20and%20starters%20-%206934%20-%202.png" imageanchor="1"><img border="0" data-original-height="1940" data-original-width="1714" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzhe4UQb3qheu8eMdCCkdXzjP5fR6-0H2FvCLkR49Zok_kPzZ_5buKg38Ddz41ofRpMtwddtm-JpgSeWhwVyx9ERz68LbU5CWElOAdhShLj9yl8TT8a3f8dD_RfslH-AixwBdYn5V4OauVJGprPXbKo5USdkZ_WYhwazYpE4IU3rgcoTuPdKXAeq_d9SU/s16000/More%20granular%20admin%20controls%20for%20Workspace%20Studio%20steps%20and%20starters%20-%206934%20-%202.png"></a></div><div><h3>Getting started</h3><div><ul><li><b>Admins: </b>Workspace Studio starters and steps will be  ON by default and can be disabled at the domain, organizational unit, or group level. Visit the Help Center to <a href="https://knowledge.workspace.google.com/admin/studio/allow-or-block-ws-service-specific-steps" target="_blank">learn more</a>.</li><li><b>End users: </b>There is no end user setting for this feature. The steps turned off by admins will show up as disabled (greyed out) in Studio. Existing flows with these steps won’t run, and the user will see an error.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Full rollout (1–3 days for feature visibility) starting on May 26, 2026</li></ul></div><h3>Availability</h3><div><ul><li><b>Business: </b>Business Starter, Standard, and Plus</li><li><b>Enterprise:</b> Enterprise Standard and Plus</li><li><b>Education: </b>Education Fundamentals, Standard, and Plus</li><li><b>Education Add-ons: </b>Google AI Pro for Education; Teaching and Learning</li><li><b>Other Add-ons:</b> AI Expanded Access*</li></ul></div><div><i>*Starting June 1, 2026, users with AI Expanded Access licenses will have <a href="https://support.google.com/a?p=limits" target="_blank">higher limits on usage</a> of Workspace Studio.</i></div><h3>Resources</h3><div><ul><li>Google Workspace Admin Help: <a href="https://knowledge.workspace.google.com/admin/studio/get-started-workspace-studio-set-up-guide-for-admins" target="_blank">Workspace Studio help for admins</a></li><li>Workspace Studio Help: <a href="https://support.google.com/workspace-studio/#topic=16433255" target="_blank">Workspace Studio help for end users</a></li><li>Google Workspace Learning Center: <a href="https://support.google.com/a/users/answer/16275487" target="_blank">Workspace Studio training and help</a></li><li>YouTube: <a href="https://www.youtube.com/playlist?list=PLDdffPXqmxKNtTUF7H3mab3HEnXzxRi8V" target="_blank">Google Workspace Studio video playlist</a></li><li>Discord: <a href="https://discord.com/channels/1439825892833755370/1442898214184292402" target="_blank">Workspace Studio Discord channel</a></li></ul></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Easily identify data irregularities with anomaly detection in Connected Sheets]]></title>
<description><![CDATA[You can now easily identify critical irregularities and outliers in your time-series data when using Connected Sheets to analyze BigQuery data sets from Google Sheets. Anomaly detection in Connected Sheets allows users to distinguish between expected trends and true outliers without requiring man...]]></description>
<link>https://tsecurity.de/de/3589219/it+betriebssysteme/web+tipps/easily+identify+data+irregularities+with+anomaly+detection+in+connected+sheets/</link>
<pubDate>Thu, 11 Jun 2026 01:54:57 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[You can now easily identify critical irregularities and outliers in your time-series data when using <a href="https://docs.cloud.google.com/bigquery/docs/connected-sheets" target="_blank">Connected Sheets</a> to analyze BigQuery data sets from Google Sheets. Anomaly detection in Connected Sheets allows users to distinguish between expected trends and true outliers without requiring manual model training or complex SQL knowledge.<div><br></div><div>Powered by BigQuery ML and <a href="https://docs.cloud.google.com/bigquery/docs/timesfm-model" target="_blank">TimesFM</a>, this capability delivers "zero-shot" analysis, meaning you can uncover actionable AI insights immediately—no need to configure or wait for a model to be trained on your data. Anomaly detection also builds upon our recently introduced <a href="https://workspaceupdates.googleblog.com/2026/02/forecast-data-in-connected-sheets-BigQueryML-TimesFM.html" target="_blank">forecasting feature</a> to provide a more comprehensive suite of predictive tools right where you already work.</div><div><br></div><div><b>Key features include:</b></div><div><br></div><div><ul><li><b>Easy, SQL-free configuration:</b> A user-friendly side panel guides you through configuring your anomaly detection analysis without writing a single line of SQL.</li><li><b>Clear, built-in formatting: </b>Results are cleanly rendered with new columns for <span>is_anomaly</span> (a boolean indicator) and <span>lower_bound</span>/<span>upper_bound</span> intervals to help you quickly sort, filter, and interpret the findings. </li><li><b>Customizable thresholds: </b>Take control of your analysis by setting a specific time period, anomaly probability threshold (defaulting to 0.95), and filtering input data</li><li><b>Automated refresh ability: </b>Just like other Connected Sheets objects, your anomaly detection extracts can be scheduled to refresh automatically, ensuring your insights are always current.</li></ul><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE5MDnvDWP4WY5eQAhbU63O4wu5ELKGtd_iNs4vwlqjZYRIwh9_cYmqbIxj7OxfLUCf9Rvfw7vtHlGeujASrYbNo5zAkgnR__SPANikp4McXOn-e90mSNhL3bu-ISjyKPFgE6Y_EdXJ79AjF1IP_nZyHsAixk8wtFNzHkpMjPerpBbSwbvxvnGJ1KwJog/s1920/Easily%20identify%20data%20irregularities%20with%20anomaly%20detection%20in%20Connected%20Sheets%20-%206924.gif" imageanchor="1"><img border="0" data-original-height="920" data-original-width="1920" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE5MDnvDWP4WY5eQAhbU63O4wu5ELKGtd_iNs4vwlqjZYRIwh9_cYmqbIxj7OxfLUCf9Rvfw7vtHlGeujASrYbNo5zAkgnR__SPANikp4McXOn-e90mSNhL3bu-ISjyKPFgE6Y_EdXJ79AjF1IP_nZyHsAixk8wtFNzHkpMjPerpBbSwbvxvnGJ1KwJog/s16000/Easily%20identify%20data%20irregularities%20with%20anomaly%20detection%20in%20Connected%20Sheets%20-%206924.gif"></a></div></div><h3>Getting started</h3><div><ul><li><b>Admins:</b> There is no admin control for this feature.</li><li><b>End users: </b>Access to anomaly detection in Connected Sheets requires permissions to a BigQuery project with billing enabled.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Available now</li></ul></div><h3>Availability</h3><div><ul><li>Available to all Google Workspace customers and users with personal Google accounts</li></ul></div><h3>Resources</h3><div><ul><li>Google Help: <a href="https://support.google.com/docs/answer/16923039?hl=en" target="_blank">Use BigQuery ML in Connected Sheets</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Ask Gemini in Google Meet is becoming more easily accessible on web]]></title>
<description><![CDATA[In September 2025, we launched Ask Gemini in Meet, which brings the power of Gemini into your organization’s meetings. Today, we’re excited to announce that we’re making the feature more easily accessible by moving the Ask Gemini prompt box into the bottom left-hand corner of the Google Meet web ...]]></description>
<link>https://tsecurity.de/de/3589218/it+betriebssysteme/web+tipps/ask+gemini+in+google+meet+is+becoming+more+easily+accessible+on+web/</link>
<pubDate>Thu, 11 Jun 2026 01:54:55 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[In September 2025, we launched <a href="https://workspaceupdates.googleblog.com/2025/09/ask-gemini-in-google-meet.html" target="_blank">Ask Gemini in Meet</a>, which brings the power of Gemini into your organization’s meetings. Today, we’re excited to announce that we’re making the feature more easily accessible by moving the Ask Gemini prompt box into the bottom left-hand corner of the Google Meet web interface:<div><br></div><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigebgxmodzP7_QGdkyqUpFKC_8UnTMmyQLdo7RJEZ7neyIW6MKuvLTlZHtvw3DMntLjmABCK_G86U20q1sAsu923Ne9JF5cQJ_aI91szYWsps1awGATQRCb1HPE6PAJV2TdGlXKZ7_GKkAX4m1zNgOSzihd1qgZIe1t21NEgYEcOF3hH86o4qqxse5_Og/s2048/Ask%20Gemini%20in%20Google%20Meet%20is%20becoming%20more%20easily%20accessible%20on%20web%20-%207010.gif"><img border="0" data-original-height="1159" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigebgxmodzP7_QGdkyqUpFKC_8UnTMmyQLdo7RJEZ7neyIW6MKuvLTlZHtvw3DMntLjmABCK_G86U20q1sAsu923Ne9JF5cQJ_aI91szYWsps1awGATQRCb1HPE6PAJV2TdGlXKZ7_GKkAX4m1zNgOSzihd1qgZIe1t21NEgYEcOF3hH86o4qqxse5_Og/s16000/Ask%20Gemini%20in%20Google%20Meet%20is%20becoming%20more%20easily%20accessible%20on%20web%20-%207010.gif"></a></div><br><div><div>Previously, Ask Gemini in Meet was available only by hovering over the icon in the top right corner. This change makes it much easier to discover and use this feature in Google Meet calls. Other than the entrypoint change, there are no changes to the Ask Gemini in Meet functionality itself.</div><div><br></div><div>As a reminder, you use <a href="https://support.google.com/meet/answer/16024610" target="_blank">Ask Gemini in Meet</a> to:</div><div><br></div><div><ul><li>Get a quick brief on the goals and topics for the meeting you’re in</li><li>List key takeaways, decisions, and action items mentioned in the meeting</li><li>Catch up on what you missed if you joined late (as long as Take Notes for Me was enabled)</li></ul></div><h3>Getting started</h3><div><ul><li><b>Admins: </b>These features will be on by default for organizations with Ask Gemini in Meet enabled. Visit the Help Center to <a href="https://support.google.com/a/answer/16472012" target="_blank">learn more about turning Ask Gemini in Meet on or off</a>.</li><li><b>End users:</b> Visit the Help Center to <a href="https://support.google.com/meet/answer/16024610" target="_blank">learn more about using Ask Gemini in Meet</a>.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Gradual rollout (up to 15 days for feature visibility) started on May 26, 2026</li></ul></div><h3>Availability</h3><div><ul><li><b>Business: </b>Business<b> </b>Standard and Plus</li><li><b>Enterprise: </b>Enterprise<b> </b>Standard and Plus</li></ul></div><h3>Resources</h3><div><ul><li>Google Workspace Updates Blog: <a href="https://workspaceupdates.googleblog.com/2025/09/ask-gemini-in-google-meet.html" target="_blank">Ask Gemini in Meet: Your Personal Meeting Assistant</a></li><li>Google Meet Help: <a href="https://support.google.com/meet/answer/16024610?hl=en" target="_blank">Ask Gemini in Meet</a></li><li>Google Workspace Admin Help: <a href="https://support.google.com/a/answer/16472012?hl=en&amp;ref_topic=7302334" target="_blank">Turn Ask Gemini on or off</a></li></ul></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Prevent account takeovers with Device Bound Session Credentials (DBSC), now generally available in the Chrome browser for Windows]]></title>
<description><![CDATA[Previously available in beta, Device Bound Session Credentials (DBSC) in the Chrome browser on Windows is now generally available and enabled by default for Google Workspace users.DBSC strengthens account security after users are logged in and helps bind a session cookie — small files used by web...]]></description>
<link>https://tsecurity.de/de/3589217/it+betriebssysteme/web+tipps/prevent+account+takeovers+with+device+bound+session+credentials+dbsc+now+generally+available+in+the+chrome+browser+for+windows/</link>
<pubDate>Thu, 11 Jun 2026 01:54:54 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Previously <a href="https://workspace.google.com/blog/identity-and-security/defending-against-account-takeovers-top-threats-passkeys-and-dbsc" target="_blank">available in beta</a>, Device Bound Session Credentials (DBSC) in the Chrome browser on Windows is now generally available and enabled by default for Google Workspace users.<div><br></div><div>DBSC strengthens account security after users are logged in and helps bind a session cookie — small files used by websites to remember user information — to the device a user authenticated from. Even if malware was present on the user’s device, DBSC reduces the risk of session theft and makes it meaningfully more difficult for malicious actors to exploit stolen session cookies.</div><div><br></div><div>With this change to general availability, Workspace admins no longer need to take action to enable DBSC in the Admin console. Organizations can also bolster protections with more granular account attributes when using DBSC together with <a href="https://support.google.com/a/answer/9275380" target="_blank">context-aware access</a> (CAA). To monitor DBSC binding events, admins can view the audit logs available in the security investigation tool.</div><div><br></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container"><tbody><tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzz8uJumSBMVVgEukdcSPSlfdx5zffpgl2_zQPv-ec10DS0CSh-OF_aQcGK47P4iY5Wi2ALSfV5azpGSuTpxqjfvdP4FSN69PSyrUBQzylmCAvBE57j8Y-leWZMQn5mDYYaC9T8r7vc_R2KKIjRYjPFaiUG2ub3NMyXnJiwilGWZ7swjbGP-6ewSAq1RY/s1818/Prevent%20account%20takeovers%20with%20Device%20Bound%20Session%20Credentials%20(DBSC),%20now%20generally%20available%20in%20the%20Chrome%20browser%20for%20Windows%20-%205212.png" imageanchor="1"><img border="0" data-original-height="1227" data-original-width="1818" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzz8uJumSBMVVgEukdcSPSlfdx5zffpgl2_zQPv-ec10DS0CSh-OF_aQcGK47P4iY5Wi2ALSfV5azpGSuTpxqjfvdP4FSN69PSyrUBQzylmCAvBE57j8Y-leWZMQn5mDYYaC9T8r7vc_R2KKIjRYjPFaiUG2ub3NMyXnJiwilGWZ7swjbGP-6ewSAq1RY/s16000/Prevent%20account%20takeovers%20with%20Device%20Bound%20Session%20Credentials%20(DBSC),%20now%20generally%20available%20in%20the%20Chrome%20browser%20for%20Windows%20-%205212.png"></a></td></tr><tr><td class="tr-caption"><i>An example of the audit log and log details for a DBSC event in the admin console</i></td></tr></tbody></table><h3>Getting started</h3><div><ul><li><b>Admins: </b>This feature is ON by default for all Google Workspace customers, and there is no administrator control to disable it.</li><li><b>End users: </b>There is no end user setting for this feature.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Gradual rollout (up to 60 days for feature visibility) started on May 25, 2026</li></ul></div><h3>Availability</h3><div><ul><li>Available to all Google Workspace customers, Workspace Individual subscribers, and users with personal Google accounts</li></ul></div><h3>Resources</h3><div><ul><li>Google Workspace Admin Help: <a href="https://support.google.com/a/answer/15956470" target="_blank">Prevent cookie theft with session binding</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Share chats, canvases, and generated media from the Gemini app securely via Google Drive]]></title>
<description><![CDATA[We are introducing the ability for Workspace users on the web to share snapshots of their chats, canvases, and generated media in the Gemini app. Because this feature is powered by the same underlying technology as Google Drive, it uses the familiar, consistent sharing interface you already rely ...]]></description>
<link>https://tsecurity.de/de/3589216/it+betriebssysteme/web+tipps/share+chats+canvases+and+generated+media+from+the+gemini+app+securely+via+google+drive/</link>
<pubDate>Thu, 11 Jun 2026 01:54:53 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[We are introducing the ability for Workspace users on the web to share snapshots of their chats, canvases, and generated media in the Gemini app. Because this feature is powered by the same underlying technology as Google Drive, it uses the familiar, consistent sharing interface you already rely on for Google Docs and other files. You can still choose to <a href="https://workspaceupdates.googleblog.com/2026/03/workspace-admins-can-allow-gemini-app-conversation-for-their-organizations.html" target="_blank">allow conversation sharing via link</a>.<div><br></div><div>With this update, members of your organization can easily share Gemini workflows and build on top of what others have created, scaling AI competency and collaboration across teams and enabling new ways for educators and students to teach and learn.</div><div><br></div><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUvnQbDe4GNVIaqQ3nsPYg0un5y1Qm85_S_Z2aXUhqLBupVOxT-6SAtfZtl2Jxktn4s827R98EVoMlb-lS6x07gEN95nroS7hVSClsb3tqC8nhFQf3aElkoHrnq-Qm4usJ7w9xaAXnCMVIl6DH4WNgGipav0G2bmdWeJIit_UB14GQuub32Vpz-cKZVoQ/s1910/Share%20chats,%20canvases,%20and%20generated%20media%20from%20the%20Gemini%20app%20securely%20via%20Google%20Drive%20-%206883%20-%201.gif"><img border="0" data-original-height="1006" data-original-width="1910" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUvnQbDe4GNVIaqQ3nsPYg0un5y1Qm85_S_Z2aXUhqLBupVOxT-6SAtfZtl2Jxktn4s827R98EVoMlb-lS6x07gEN95nroS7hVSClsb3tqC8nhFQf3aElkoHrnq-Qm4usJ7w9xaAXnCMVIl6DH4WNgGipav0G2bmdWeJIit_UB14GQuub32Vpz-cKZVoQ/s16000/Share%20chats,%20canvases,%20and%20generated%20media%20from%20the%20Gemini%20app%20securely%20via%20Google%20Drive%20-%206883%20-%201.gif"></a></div><h3>Getting started</h3><div><ul><li><b>Admins:</b>  This feature will be ON by default and can be managed via a new Admin console setting. Additionally, sharing is governed by your organization’s existing Drive sharing policies. If Drive content is set to be shareable outside the organization, your Gemini assets will be as well. Visit the Help Center to <a href="https://knowledge.workspace.google.com/admin/gemini/turn-conversation-sharing-on-or-off" target="_blank">learn more</a>.</li></ul><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpnZDTWdE8gy3Ri8IY4bWFi-BJ61-n2UfDuf0xkfp-4UFYMeLpC_JVRhgK4SoqVq5jVwdfTTu9yneSrcXdmM_4aFwUjtbsHvNmosPrAK85OLOcXDZeHQa96zJjywWFg8Qgmgy0Yr3G8dBJbzvCt5NpARNqMjilVfhIDYpE9-FvQYuFjilSU-xcSQeL44M/s2048/Share%20chats,%20canvases,%20and%20generated%20media%20from%20the%20Gemini%20app%20securely%20via%20Google%20Drive%20-%206883%20-%202.png"><img border="0" data-original-height="897" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpnZDTWdE8gy3Ri8IY4bWFi-BJ61-n2UfDuf0xkfp-4UFYMeLpC_JVRhgK4SoqVq5jVwdfTTu9yneSrcXdmM_4aFwUjtbsHvNmosPrAK85OLOcXDZeHQa96zJjywWFg8Qgmgy0Yr3G8dBJbzvCt5NpARNqMjilVfhIDYpE9-FvQYuFjilSU-xcSQeL44M/s16000/Share%20chats,%20canvases,%20and%20generated%20media%20from%20the%20Gemini%20app%20securely%20via%20Google%20Drive%20-%206883%20-%202.png"></a></div><br><ul><li><b>End users: </b>If enabled by your admin, you can share your Gemini conversations, canvases, and media from the web interface using the standard Drive sharing menu.</li></ul></div><h3>Rollout pace</h3><div><ul><li>Admin controls</li><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Full rollout (1–3 days for feature visibility) starting on May 28, 2026</li></ul><li>End-user visibility</li><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Full rollout (1–3 days for feature visibility) starting on June 3, 2026</li></ul></ul></div><h3>Availability</h3><div><ul><li>Available to all Google Workspace customers</li></ul></div><h3>Resources</h3><div><ul><li>Google Workspace Admin Help: <a href="https://knowledge.workspace.google.com/admin/gemini/turn-conversation-sharing-on-or-off" target="_blank">Turn conversation sharing on or off</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Google Chat external interoperability with Microsoft Teams via NextPlane OpenHub is now available]]></title>
<description><![CDATA[Organizations often need to collaborate with customers, partners, and suppliers who use Microsoft Teams. NextPlane OpenHub was built to bridge this Google Chat and Microsoft Teams divide, and it is now launching external interoperability to allow communication across organizational boundaries. Op...]]></description>
<link>https://tsecurity.de/de/3589215/it+betriebssysteme/web+tipps/google+chat+external+interoperability+with+microsoft+teams+via+nextplane+openhub+is+now+available/</link>
<pubDate>Thu, 11 Jun 2026 01:54:52 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Organizations often need to collaborate with customers, partners, and suppliers who use Microsoft Teams. <b><u><a href="https://nextplane.net/openhub/" target="_blank">NextPlane OpenHub</a></u></b> was built to bridge this Google Chat and Microsoft Teams divide, and it is now launching external interoperability to allow communication across organizational boundaries. OpenHub directly connects Google Chat users to people on external Microsoft Teams tenants, making cross-platform collaboration more seamless.<div><br></div><div>This release supports external interoperability between Google Chat and Microsoft Teams, including presence, 1:1 chat, group chat, Channels and Spaces, file sharing, and meeting and call initiation. A single Google Workspace environment can connect to multiple external Microsoft Teams tenants via OpenHub, enabling cross-tenant collaboration through a single interoperability layer. OpenHub is designed to provide a familiar cross-platform collaboration experience without requiring all parties to use the same collaboration platform.</div><div><br></div><div>OpenHub is also designed to support enterprise governance and deployment requirements. It is deployed as a dedicated single-tenant service, can run in a customer-owned GCP project, and keeps customer data under customer control. It uses customer-managed identities and does not require fake user accounts, Nextplane-controlled user accounts, cross-tenant impersonation, or a proxy Teams tenant.</div><div><br></div><div>For Google Workspace admins and IT decision-makers, this can help reduce deployment friction through tightly scoped, auditable permissions aligned with customer best practices. Ongoing configuration and management are handled through the existing Google Admin console and Microsoft Teams admin center, without requiring a separate OpenHub administration console. This is especially important for Google Workspace customers working with external organizations, because it avoids imposing a separate portal or a new management process on customers, partners, and suppliers.</div><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPUMg5ErhexirN9TvrODedq-ndH1zoOYYnZQ0rnVpPIfLSuc2X-IC1cQkso07ERIRVh1D87x6q1YleRFDYwqFWW3Xmqg0dp0FGFq_x_98Suar3yPpJApBALpSNenz7MTkr5qi-T-rVLrQ2XdqX3x22US3Botw-yDB-GZwoZ45_1bzI7OzxYA9QzMtMFJs/s1704/Google%20Chat%20external%20interoperability%20with%20Microsoft%20Teams%20via%20NextPlane%20OpenHub%20is%20now%20available%20-%207012.png" imageanchor="1"><img border="0" data-original-height="923" data-original-width="1704" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPUMg5ErhexirN9TvrODedq-ndH1zoOYYnZQ0rnVpPIfLSuc2X-IC1cQkso07ERIRVh1D87x6q1YleRFDYwqFWW3Xmqg0dp0FGFq_x_98Suar3yPpJApBALpSNenz7MTkr5qi-T-rVLrQ2XdqX3x22US3Botw-yDB-GZwoZ45_1bzI7OzxYA9QzMtMFJs/s16000/Google%20Chat%20external%20interoperability%20with%20Microsoft%20Teams%20via%20NextPlane%20OpenHub%20is%20now%20available%20-%207012.png"></a></div><div><br></div><div><b>Examples of how this can be used include:</b></div><div><b><br></b></div><div><ul><li>Collaborate with customers, partners, and suppliers who use Microsoft Teams</li><li>Support cross-Teams tenant collaboration from a single Google Workspace environment</li><li>Maintain cross-platform communication during multi-company projects, joint ventures, or extended partner workflows</li><li>Enable interoperability when domain validation requirements make internal interoperability difficult to deploy</li></ul></div><h3>Getting started</h3><div><ul><li><b>Admins: </b>This feature requires administrator consent on both sides of the connection, and Workspace and Teams admins must register NextPlan OpenHub as an enterprise application with their respective platforms before use. Configuration is managed at the domain level through the Google Admin console and Microsoft Teams admin center. OpenHub does not require a separate administration console and is managed through existing platform controls. Visit the NextPlane site to <a href="https://nextplane.net/openhub/" target="_blank">learn more about connecting Teams and Workspace.</a> </li><li><b>End users: </b>There is no end user setting for this feature.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Available now</li></ul></div><h3>Availability</h3><div><ul><li><b>Business:</b> Business Starter, Standard, and Plus</li><li><b>Enterprise: </b>Enterprise Starter, Standard, and Plus</li></ul></div><div><i>Note that separate NextPlane licensing is required to enable interoperability.</i></div><h3>Resources</h3><div><ul><li>NextPlane: <a href="https://nextplane.net/openhub/" target="_blank">Connect Teams &amp; Google Workspace</a></li><li>Workspace Updates Blog: <a href="https://workspaceupdates.googleblog.com/2025/08/enhanced-chat-interoperability.html" target="_blank">Introducing enhanced interoperability between Google Chat and Microsoft Teams — powered by NextPlane</a></li><li>NextPlane Blog: <a href="https://nextplane.net/blog/google-and-nextplane-partnership/" target="_blank">Google and NextPlane Partner to Enhance Cross-Platform Collaboration for Google Workspace Customers</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Available in beta: Convert your client-side encrypted Slides after a Vault or Takeout export]]></title>
<description><![CDATA[Admins can now bulk export client-side encrypted (CSE) Slides using Vault or Data Export (takeout), and then convert those exports into PowerPoint files. This allows your organization to retain complete ownership, access, and control of sensitive data in a highly portable format.Eligible Google W...]]></description>
<link>https://tsecurity.de/de/3589214/it+betriebssysteme/web+tipps/available+in+beta+convert+your+client-side+encrypted+slides+after+a+vault+or+takeout+export/</link>
<pubDate>Thu, 11 Jun 2026 01:54:50 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Admins can now bulk export client-side encrypted (CSE) Slides using Vault or Data Export (<a href="https://support.google.com/a/answer/14339894" target="_blank">takeout</a>), and then convert those exports into PowerPoint files. This allows your organization to retain complete ownership, access, and control of sensitive data in a highly portable format.<div><br></div><div>Eligible Google Workspace admins can <a href="https://forms.gle/tP2gaMr7DW3Xd1FQ6" target="_blank">sign up for the CSE Office Interop beta</a> program, which provides immediate access to CSE compatible export, import, takeout and office editing features. Organizations who’ve previously signed up for the beta program should see this feature in their domains now.</div><div><br></div><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhS1QV53rXAQyAdifFkvaHvZCEr3lkvXFO-vyR9i9spKw8_wlDx-AcrY3HzMPQIK7_gxmM4YeRo9x4PU2u3EWZIzbaAPoaHf9GPYu_ieGNV6RfEBJkPcvk2_8NoKXjrtT7xjG2RrgUt7BrARMT4hMZo04DBvQkZ2OZontShAJOAPoyyCmSHe4o9lpyupbw/s2048/Available%20in%20beta%20-%20Convert%20your%20client-side%20encrypted%20Slides%20after%20a%20Vault%20or%20Takeout%20export%20-%206767.png"><img border="0" data-original-height="916" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhS1QV53rXAQyAdifFkvaHvZCEr3lkvXFO-vyR9i9spKw8_wlDx-AcrY3HzMPQIK7_gxmM4YeRo9x4PU2u3EWZIzbaAPoaHf9GPYu_ieGNV6RfEBJkPcvk2_8NoKXjrtT7xjG2RrgUt7BrARMT4hMZo04DBvQkZ2OZontShAJOAPoyyCmSHe4o9lpyupbw/s16000/Available%20in%20beta%20-%20Convert%20your%20client-side%20encrypted%20Slides%20after%20a%20Vault%20or%20Takeout%20export%20-%206767.png"></a></div><h3>Getting started</h3><div><ul><li><b>Admins: </b>Admins with eligible Workspace licenses can <a href="https://forms.gle/tP2gaMr7DW3Xd1FQ6" target="_blank">sign up for the CSE Office Interop beta</a>. We’ll provide more information on how to get started if you’re accepted.</li><li><b>End users: </b>This launch has no impact on end users.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Available now for customers previously accepted into the CSE Office Interop beta program and upon acceptance into the beta for those who sign up in the future</li></ul></div><h3>Availability</h3><div><ul><li><b>Enterprise: </b>Enterprise Plus</li><li><b>Education: </b>Education Standard and Plus</li><li><b>Other Editions: </b>Frontline Plus, Assured Controls, Assured Controls Plus</li></ul></div><h3>Resources</h3><div><ul><li>Google Workspace Admin Help: <a href="https://support.google.com/a/answer/10741897?hl=en&amp;ref_topic=10742486" target="_blank">About client-side encryption</a></li><li>Google Workspace Updates Blog: <a href="https://workspaceupdates.googleblog.com/2025/03/beta-convert-client-side-encrypted-documents-after-vault-or-takeout-export.html" target="_blank">Available in beta: Convert your client-side encrypted documents after a Vault or Takeout export</a></li><li>Google Workspace Updates Blog: <a href="https://workspaceupdates.googleblog.com/2025/09/client-side-encryption-full-sheets-support.html" target="_blank">Now generally available: Convert your Client-side encrypted Google Sheets after a Vault or Takeout export</a></li><li>Beta Application: <a href="https://forms.gle/tP2gaMr7DW3Xd1FQ6" target="_blank">Registration form</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Keep track of student progress with learning standards and skills in Google Classroom]]></title>
<description><![CDATA[Google Classroom now allows educators to tag coursework and rubrics with learning goals, including specific learning standards and skills, providing a more structured way to monitor student growth. When creating assignments, quiz assignments, questions, or materials, educators can search for avai...]]></description>
<link>https://tsecurity.de/de/3589213/it+betriebssysteme/web+tipps/keep+track+of+student+progress+with+learning+standards+and+skills+in+google+classroom/</link>
<pubDate>Thu, 11 Jun 2026 01:54:49 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Google Classroom now allows educators to tag coursework and rubrics with learning goals, including specific learning standards and skills, providing a more structured way to monitor student growth. When creating assignments, quiz assignments, questions, or materials, educators can search for available, established standards and skills or click on suggested goals, which use AI to analyze assignment and course content. By tagging coursework with these goals, teachers can view analytics that visualize student performance and identify instructional gaps across individual students, entire classes, or specific learning areas.<div><br></div><div>Learning standards from around the world are made available in Classroom through <a href="https://www.1edtech.org/blog/unlocking-the-power-of-open-standards-expanding-utility-of-learning-frameworks-with-caser-and" target="_blank">partnerships with 1EdTech and Common Good Learning Tools</a>. These standard frameworks are pulled from <a href="https://rosetta.commongoodlt.com/" target="_blank">Satchel Rosetta Exchange</a>, a public space hosted by Common Good Learning Tools where anyone can browse various learning standard sets that leverage the 1EdTech® <a href="https://www.1edtech.org/standards/case" target="_blank">Competencies and Academic Standards Exchange® (CASE®)</a> standard specification. Visit the Help Center to <a href="https://support.google.com/edu/classroom/answer/17073569#onboard_additional_learning_standards" target="_blank">learn more about getting new standard sets added to Classroom</a>.</div><div><br></div><div>This update enables systematic tracking for standards-based learning, offering several benefits across the school community:</div><div><br></div><div><ul><li><b>For educators and leaders:</b> Teachers can utilize data-driven student performance analytics to adjust instruction, while education leaders with Google Workspace for Education Plus can use the "Visit a class" feature to see how coursework aligns with required standards.</li><li><b>For students and guardians:</b> Students and guardians can see the learning goals tagged on assignments, giving them clarity for how curriculum relates to required learning milestones and targeted skill growth.</li><li><b>Global availability: </b>Classroom has a growing list of standards already available and periodically brings in new ones from the <a href="https://rosetta.commongoodlt.com/" target="_blank">Satchel Rosetta Exchange</a>. Learning standards are available in the United States, Canada, United Kingdom, Brazil, Japan, Mexico, Italy, and Australia. Learning skills are currently supported in a selection of languages including English, Spanish, Italian, Japanese, Korean, Malay, and Brazilian Portuguese.</li></ul></div><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfXgSFBRAZ3SLsSIBRFNx7opyRR40LTwsWaz4ZEod05gjBFJdMpsQTXUCce44HjRizj3S0o_DjfdKMnl9BLAvtz21xt7_bdjN37-Yk1GHD3EFVrDeEJloTJYOHowVfLruofso1l9dArRmRt5VHO0zLdMSOsQgVk375Zvh_PiFVoxN_HDS5D9NCKSc6qUs/s1415/Keep%20track%20of%20student%20progress%20with%20learning%20standards%20and%20skills%20in%20Google%20Classroom%20-%205601.png" imageanchor="1"><img border="0" data-original-height="946" data-original-width="1415" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfXgSFBRAZ3SLsSIBRFNx7opyRR40LTwsWaz4ZEod05gjBFJdMpsQTXUCce44HjRizj3S0o_DjfdKMnl9BLAvtz21xt7_bdjN37-Yk1GHD3EFVrDeEJloTJYOHowVfLruofso1l9dArRmRt5VHO0zLdMSOsQgVk375Zvh_PiFVoxN_HDS5D9NCKSc6qUs/s16000/Keep%20track%20of%20student%20progress%20with%20learning%20standards%20and%20skills%20in%20Google%20Classroom%20-%205601.png"></a></div><h3>Getting started</h3><div><ul><li><b>Admins: </b>There is no admin control for this feature.</li><li><b>End users:</b> There is no end user setting for this feature.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Gradual rollout (up to 15 days for feature visibility) started on May 27, 2026</li></ul></div><h3>Availability</h3><div><ul><li>Available in all courses owned by a Google Workspace customer, including Education Fundamentals, Standard, and Plus</li></ul></div><h3>Resources</h3><div><ul><li>Google Help: <a href="https://support.google.com/edu/classroom/answer/17074065?hl=en&amp;ref_topic=11987116&amp;sjid=11901611438301605427-NC" target="_blank">Use learning goals in Classroom</a></li><li>Google Help: <a href="https://support.google.com/edu/classroom/answer/17073569?sjid=11901611438301605427-NC#onboard_additional_learning_standards" target="_blank">Add local learning standards to Classroom</a></li><li>Keyword: <a href="https://blog.google/products-and-platforms/products/education/bett-2026-gemini-classroom-updates/" target="_blank">Transform teaching and learning with updates to Gemini and Google Classroom</a></li><li>Keyword: <a href="https://blog.google/products-and-platforms/products/education/classroom-ai-features/" target="_blank">Gemini in Classroom: No-cost AI tools that amplify teaching and learning</a></li><li>YouTube: <a href="https://www.youtube.com/shorts/Lu6Z31XYeDs" target="_blank">Learning goals with data-driven insights in Google Classroom</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Google Workspace Updates Weekly Recap - May 29, 2026]]></title>
<description><![CDATA[Introducing a fresh visual identity for Google Workspace app iconsWe’re updating icons across Google Workspace to introduce a modern visual design that gives every app a more distinct identity. Over the next several weeks, users will see new icons for Gmail, Calendar, Chat, Meet, Drive, Docs, Sli...]]></description>
<link>https://tsecurity.de/de/3589212/it+betriebssysteme/web+tipps/google+workspace+updates+weekly+recap+-+may+29+2026/</link>
<pubDate>Thu, 11 Jun 2026 01:54:48 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h3>Introducing a fresh visual identity for Google Workspace app icons</h3><div>We’re updating icons across Google Workspace to introduce a modern visual design that gives every app a more distinct identity. Over the next several weeks, users will see new icons for Gmail, Calendar, Chat, Meet, Drive, Docs, Slides, Sheets, Vids, Keep, Forms, Voice, Sites, and Tasks. | Learn more about <a href="https://workspaceupdates.googleblog.com/2026/05/introducing-fresh-visual-identity-for-Google-Workspace-app-icons.html" target="_blank">the new fresh visual identity for Google Workspace app icons</a>.</div><h3>Simplify decision-making with Polly, now available for Google Chat</h3><div>Making decisions in a fast-paced environment often leads to long, messy threads and lost consensus. Polly helps teams solve this by enabling the creation of interactive polls within existing Chat conversations. | Learn more about <a href="https://workspaceupdates.googleblog.com/2026/05/simplify-decision-making-with-polly-now-available-for-Google-Chat.html" target="_blank">how to Simplify decision-making with Polly, now available for Google Chat</a>.</div><h3>Improvements to Out-of-Domain file-level warnings</h3><div>We’re announcing improvements to our Out-of-Domain file-level warnings. First launched in April 2025, these badges alert users to documents and users outside of their Workspace organization, helping to prevent accidental data exfiltration and potential phishing attacks that spoof internal content. | Learn more about <a href="https://workspaceupdates.googleblog.com/2026/05/improvements-to-out-of-domain-file-level-warnings.html" target="_blank">the improvements to Out-of-Domain file-level warnings</a>.</div><h3>Keep your sources up to date with automatic Drive syncing in NotebookLM</h3><div>We’re making it easier to keep your sources and insights current in NotebookLM by enabling automatic syncing with Google Drive. Previously, if you uploaded a file in Google Docs, Sheets, or Slides, you’d have to manually update it in NotebookLM to see the changes. With this update, as the content in your Drive files evolves, the information within the notebook updates automatically to match. | Learn more about <a href="https://workspaceupdates.googleblog.com/2026/05/keep-your-sources-up-to-date-with-automatic-Drive-syncing-in-NotebookLM.html" target="_blank">how to Keep your sources up to date with automatic Drive syncing in NotebookLM</a>.</div><h3>Gemini LTI Update: Include your LMS sources when using NotebookLM in Powerschool Schoology</h3><div>When creating a notebook in Powerschool Schoology, Gemini LTI users can now add content directly from their course as sources. This integration allows educators and students to seamlessly bridge their course materials with AI-powered research and analysis, and generate Studio artifacts like Audio and Video Overviews, infographics, slide decks, and more based on their Schoology resources. | Learn more about <a href="https://workspaceupdates.googleblog.com/2026/05/gemini-lti-update-include-your-lms-sources-when-using-NotebookLM-in-Powerschool-Schoology.html" target="_blank">how to include your LMS sources when using NotebookLM in Powerschool Schoology</a>.</div><h3>More granular admin controls for Workspace Studio steps and starters</h3><div>We’re introducing more granular admin controls for Workspace Studio steps and starters. With these new controls, admins can define which steps and starters people in their organization can use to create flows, including by Workspace service or individually. | Learn more about <a href="https://workspaceupdates.googleblog.com/2026/05/more-granular-admin-controls-for-Workspace-Studio-steps-and-starters.html" target="_blank">more granular admin controls for Workspace Studio steps and starters</a>.</div><h3>Easily identify data irregularities with anomaly detection in Connected Sheets</h3><div>You can now easily identify critical irregularities and outliers in your time-series data when using Connected Sheets to analyze BigQuery data sets from Google Sheets. Anomaly detection in Connected Sheets allows users to distinguish between expected trends and true outliers without requiring manual model training or complex SQL knowledge. | Learn more about <a href="https://workspaceupdates.googleblog.com/2026/05/easily-identify-data-irregularities-with-anomaly-detection-in-Connected-Sheets.html" target="_blank">how to easily identify data irregularities with anomaly detection in Connected Sheets</a>.</div><h3>Ask Gemini in Google Meet is becoming more easily accessible on web</h3><div>We’re excited to announce that we’re making the feature more easily accessible by moving the Ask Gemini prompt box into the bottom left-hand corner of the Google Meet web interface. | Learn more about <a href="https://workspaceupdates.googleblog.com/2026/05/ask-gemini-in-google-meet-is-becoming-more-easily-accessible-on-web.html" target="_blank">how ask Gemini in Google Meet is becoming more easily accessible on web</a>.</div><h3>Prevent account takeovers with Device Bound Session Credentials (DBSC), now generally available in the Chrome browser for Windows</h3><div>Previously available in beta, Device Bound Session Credentials (DBSC) in the Chrome browser on Windows is now generally available and enabled by default for Google Workspace users. | Learn more about <a href="https://workspaceupdates.googleblog.com/2026/05/prevent-account-takeovers-with-DBSC-now-generally-available-in-the-Chrome-browser-for-Windows.html" target="_blank">how to prevent account takeovers with Device Bound Session Credentials (DBSC), now generally available in the Chrome browser for Windows</a>.</div><h3>Share chats, canvases, and generated media from the Gemini app securely via Google Drive</h3><div>We are introducing the ability for Workspace users on the web to share snapshots of their chats, canvases, and generated media in the Gemini app. | Learn more about <a href="https://workspaceupdates.googleblog.com/2026/04/share-chats-canvases-and-generated-media-from-the-Gemini-app-securely-via-Google-Drive.html" target="_blank">how to share chats, canvases, and generated media from the Gemini app securely via Google Drive</a>.</div><h3>Google Chat external interoperability with Microsoft Teams via NextPlane OpenHub is now available </h3><div>Organizations often need to collaborate with customers, partners, and suppliers who use Microsoft Teams. NextPlane OpenHub was built to bridge this Google Chat and Microsoft Teams divide, and it is now launching external interoperability to allow communication across organizational boundaries. | Learn more about <a href="https://workspaceupdates.googleblog.com/2026/05/google-chat-external-interoperability-with-Microsoft-Teams-via-NextPlane-OpenHub-is-now-available.html" target="_blank">how Google Chat external interoperability with Microsoft Teams via NextPlane OpenHub is now available</a>.</div><div><br></div><h3>Available in beta: Convert your client-side encrypted Slides after a Vault or Takeout export</h3><div>Admins can now bulk export client-side encrypted (CSE) Slides using Vault or Data Export (takeout), and then convert those exports into PowerPoint files. This allows your organization to retain complete ownership, access, and control of sensitive data in a highly portable format. | Learn more about <a href="https://workspaceupdates.googleblog.com/2026/05/available-in-beta-convert-your-client-side-encrypted-Slides-after-a-Vault-or-Takeout-export.html" target="_blank">how to Convert your client-side encrypted Slides after a Vault or Takeout export</a>.</div><div><br></div><h3>Keep track of student progress with learning standards and skills in Google Classroom</h3><div>Google Classroom now allows educators to tag coursework and rubrics with learning goals, including specific learning standards and skills, providing a more structured way to monitor student growth. | Learn more about <a href="https://workspaceupdates.googleblog.com/2026/05/keep-track-of-student-progress-with-learning-standards-and-skills-in-Google-Classroom.html" target="_blank">how to keep track of student progress with learning standards and skills in Google Classroom</a>.</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Organize My Files in Drive now generally available]]></title>
<description><![CDATA[In October 2025, we launched a beta for Organize My Files in Drive. This feature is now generally available and has started rolling out to eligible Google Workspace and Google AI plans.It can be overwhelming to see loose files in your Drive and moving them into the right folder can be manual, ted...]]></description>
<link>https://tsecurity.de/de/3589211/it+betriebssysteme/web+tipps/organize+my+files+in+drive+now+generally+available/</link>
<pubDate>Thu, 11 Jun 2026 01:54:47 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[In October 2025, we launched a beta for Organize My Files in Drive. This feature is now generally available and has started rolling out to <a href="https://support.google.com/drive/answer/13952129" target="_blank">eligible Google Workspace and Google AI plans</a>.<div><br></div><div>It can be overwhelming to see loose files in your Drive and moving them into the right folder can be manual, tedious, and repetitive. Gemini can help you organize your Drive by providing suggestions of where to move loose files based on your organizing structure and strategies.</div><div><br></div><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTkjZX06AV24lpN2cI9JjREcO77bl8Qjo2O-6uRXLZs_ZmYxcToXO7bKzdbiayGy013K-CQocsOXlHf_qLa85p9EEcubg6rYzIu0OmLEQceETf6bJlDfgNsh4vqbXqzO_UMqMjcM5VEjZUuLvRk_uiKFLxtlY1utUJCVdh2ajwtr4bqOtDsTdI_OoSf9k/s1440/Organize%20My%20Files%20in%20Drive%20now%20generally%20available%20-%205304.png"><img border="0" data-original-height="880" data-original-width="1440" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTkjZX06AV24lpN2cI9JjREcO77bl8Qjo2O-6uRXLZs_ZmYxcToXO7bKzdbiayGy013K-CQocsOXlHf_qLa85p9EEcubg6rYzIu0OmLEQceETf6bJlDfgNsh4vqbXqzO_UMqMjcM5VEjZUuLvRk_uiKFLxtlY1utUJCVdh2ajwtr4bqOtDsTdI_OoSf9k/s16000/Organize%20My%20Files%20in%20Drive%20now%20generally%20available%20-%205304.png"></a></div><div><br></div><div>Users can access this view through a dedicated entry point titled “Suggest File Moves” within My Drive and parent folders. The dedicated interface displays recommendations divided into two sections: moving files to existing folders, and creating new folders for related file groupings. End users can review these recommendations before any files are relocated.</div><div><br></div><div>The interface supports several interactive adjustments:</div><div><br></div><div><ul><li>Reviewing files and folders through hovercards or opening them in a new tab.</li><li>Selecting or deselecting specific file suggestions using checkboxes.</li><li>Customizing target destinations or renaming proposed new folders directly inline.</li></ul></div><div>Once the user approves the selection, the system performs a batch move and prompts the user to confirm any resulting permission changes. This feature helps users in reducing digital clutter and maintaining organized file structures with minimal manual effort.</div><div><br></div><div>Note that this feature is available globally in English.</div><h3>Getting started</h3><div><ul><li><b>Admins: </b>This feature is available by default if <a href="https://knowledge.workspace.google.com/admin/gemini/manage-access-to-gemini-features-in-workspace-services" target="_blank">Gemini for Workspace in Drive is enabled</a>.</li><li><b>End users: </b>You must have <a href="https://support.google.com/mail/answer/15604322?sjid=17363988672514456782-NA#gw&amp;zippy=%2Csmart-features-in-google-workspace%2Cwhat-are-googles-legal-bases-of-processing-for-users-in-the-european-economic-area-united-kingdom-or-switzerland%2Chow-long-is-your-workspace-content-activity-used-to-provide-smart-features-and-to-improve-these-features" target="_blank">Workspace smart features</a> enabled to use Organize My Files in Drive. Visit the Help Center to learn more about <a href="https://support.google.com/drive/answer/16671865" target="_blank">letting Gemini organize your files</a>.</li></ul></div><div><i>Note: Through July 15, 2026, Workspace customers will get promotional access to higher limits for Organize My Files, allowing users to experiment with this feature. Users will see a notification when they use this feature to inform them of the limited higher promotional access period. Per-user usage limits will apply after that date; we’ll provide more information in the <a href="https://support.google.com/a?p=limits" target="_blank">Help Center</a> in advance of updated usage limits going into effect.</i></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Available now</li></ul></div><h3>Availability</h3><div><ul><li><b>Business:</b> Business Standard and Plus</li><li><b>Enterprise: </b>Enterprise Standard and Plus</li><li><b>Consumer: </b>Google AI Pro and Ultra</li><li><b>Education Add-ons: </b>Google AI Pro for Education</li><li><b>Other Add-ons: </b>AI Expanded Access</li></ul></div><h3>Resources</h3><div><ul><li>Google Drive Help: <a href="https://support.google.com/drive/answer/16671865" target="_blank">Let Gemini organize your files</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Introducing the ability to loop over a list of items in Workspace Studio]]></title>
<description><![CDATA[We are introducing the ability to loop over a list of items in Google Workspace Studio flows, bringing more power and flexibility to your everyday workflows. As part of this, the Ask Gemini step has a new configuration section called Response format where you can decide if the output of the step ...]]></description>
<link>https://tsecurity.de/de/3589210/it+betriebssysteme/web+tipps/introducing+the+ability+to+loop+over+a+list+of+items+in+workspace+studio/</link>
<pubDate>Thu, 11 Jun 2026 01:54:46 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[We are introducing the ability to loop over a list of items in Google Workspace Studio flows, bringing more power and flexibility to your everyday workflows. As part of this, the <b>Ask Gemini</b> step has a new configuration section called <b>Response format</b> where you can decide if the output of the step should be in text or list format. When list format is selected, the new step <b>Repeat for each</b> can be used so that the flow can loop over the items of that list.<div><br></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container"><tbody><tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUvJ_8kl2pEAnX_GfsP5bY1iZ2A7PgSEKa2AwFvqpVKrfqqJ0TnBzFIZvzM1GN_jLHekRnqmMaIERGLsCIEUbF0GCXKSOEDN8fBF6eg0EplpMQTd6RSN05zu8dnP_mo-aYWsP3TDS5LyBAgVz7gvXiKgOX2M1wj359BxRT5DEZ-KdS3ex6tLGYJwD-158/s2048/Introducing%20the%20ability%20to%20loop%20over%20a%20list%20of%20items%20in%20Workspace%20Studio%20-%206937.png"><img border="0" data-original-height="1146" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUvJ_8kl2pEAnX_GfsP5bY1iZ2A7PgSEKa2AwFvqpVKrfqqJ0TnBzFIZvzM1GN_jLHekRnqmMaIERGLsCIEUbF0GCXKSOEDN8fBF6eg0EplpMQTd6RSN05zu8dnP_mo-aYWsP3TDS5LyBAgVz7gvXiKgOX2M1wj359BxRT5DEZ-KdS3ex6tLGYJwD-158/s16000/Introducing%20the%20ability%20to%20loop%20over%20a%20list%20of%20items%20in%20Workspace%20Studio%20-%206937.png"></a></td></tr><tr><td class="tr-caption"><i>Select List in Response format to be able to loop over a list in the flow</i></td></tr></tbody></table><div><div><br></div><div>The <b>Repeat for each</b> step can also be used to loop over Google Sheet data row by row and run substeps.</div><div><br></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container"><tbody><tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNeLwYwDnnmqbX4tqhe_VP1znp-nrUMYSpZQvOfcjkK6x6eCMcrJNnYWv-4854C0n8b096KkNSrFU4LiirUZt35ssrhyphenhyphennjFjocLG3itn5ft5YbfbD9O83jrY8aQ1DtLsypbgyyTYjYghrKpG1-N4sfu2XMhhShC_ohi9G803f-p2Fp0O2Uw9Y5XoWt8GU/s2048/Introducing%20the%20ability%20to%20loop%20over%20a%20list%20of%20items%20in%20Workspace%20Studio%20-%206937-2.png"><img border="0" data-original-height="1144" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNeLwYwDnnmqbX4tqhe_VP1znp-nrUMYSpZQvOfcjkK6x6eCMcrJNnYWv-4854C0n8b096KkNSrFU4LiirUZt35ssrhyphenhyphennjFjocLG3itn5ft5YbfbD9O83jrY8aQ1DtLsypbgyyTYjYghrKpG1-N4sfu2XMhhShC_ohi9G803f-p2Fp0O2Uw9Y5XoWt8GU/s16000/Introducing%20the%20ability%20to%20loop%20over%20a%20list%20of%20items%20in%20Workspace%20Studio%20-%206937-2.png"></a></td></tr><tr><td class="tr-caption"><i>Looping over data from a Sheet to draft an email for each person in the file</i></td></tr></tbody></table><div><br></div><div>This improvement unlocks new possibilities for many use cases, including:</div><div><br></div><div><ul><li>Create a task for each action item based on meeting notes.</li><li>Draft an email for each sales lead based on your sales tracker Google Sheet.</li></ul></div><h3>Getting started</h3><div><ul><li><b>Admins: </b>Visit the Help Center to <a href="https://knowledge.workspace.google.com/admin/studio/manage-access-to-steps-and-starters-in-workspace-studio" target="_blank">learn more about managing access to steps and starts in Workspace Studio</a>. </li><li><b>End users: </b>Try the feature in <a href="https://studio.workspace.google.com/" target="_blank">Google Workspace Studio</a>. Visit the Help Center to <a href="https://support.google.com/workspace-studio/answer/16765661?ref_topic=16431192&amp;sjid=2853051862223050020-EU" target="_blank">learn more about the Ask Gemini step</a>.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Full rollout (1–3 days for feature visibility) starting on June 2, 2026</li></ul></div><h3>Availability</h3><div><ul><li><b>Business: </b>Business Starter, Standard, and Plus</li><li><b>Enterprise:</b> Enterprise Standard and Plus</li><li><b>Education:</b> Education Fundamentals, Standard, and Plus</li><li><b>Education Add-ons:</b> Google AI Pro for Education; Teaching and Learning</li><li><b>Other Add-ons: </b>AI Expanded Access*</li></ul></div><div><i>*Starting July 1, 2026, users with AI Expanded Access licenses will have <a href="https://support.google.com/a?p=limits" target="_blank">higher limits on usage</a> of Workspace Studio.</i></div><h3>Resources</h3><div><ul><li>Google Workspace Admin Help: <a href="https://support.google.com/a/topic/16443963" target="_blank">Workspace Studio admin help</a></li><li>Workspace Studio Help: <a href="https://support.google.com/workspace-studio/#topic=16433255" target="_blank">Get Started with Workspace Studio</a></li><li>Google Workspace Learning Center: <a href="https://support.google.com/a/users/answer/16275487" target="_blank">Workspace Studio training and help</a></li><li>Google Workspace Blog: <a href="https://workspace.google.com/blog/product-announcements/introducing-google-workspace-studio-agents-for-everyday-work" target="_blank">Introducing Google Workspace Studio: Automate everyday work with AI agents </a></li><li>YouTube: <a href="https://www.youtube.com/playlist?list=PLDdffPXqmxKNtTUF7H3mab3HEnXzxRi8V" target="_blank">Google Workspace Studio Video Playlist</a></li><li>Discord Channel: <a href="https://discord.com/channels/1439825892833755370/1442898214184292402" target="_blank">Google Workspace Studio Discord</a></li></ul></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Enhanced data protection for managed third-party apps]]></title>
<description><![CDATA[Previously, data transfers from corporate Google Workspace accounts to third-party apps were restricted. We’re now recalibrating these restrictions to allow for a "trusted ecosystem" between managed apps.With this release, users are now able to maintain efficient workflows and securely move data ...]]></description>
<link>https://tsecurity.de/de/3589209/it+betriebssysteme/web+tipps/enhanced+data+protection+for+managed+third-party+apps/</link>
<pubDate>Thu, 11 Jun 2026 01:54:44 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Previously, data transfers from corporate Google Workspace accounts to third-party apps were restricted. We’re now recalibrating these restrictions to allow for a "trusted ecosystem" between managed apps.<div><br></div><div>With this release, users are now able to maintain efficient workflows and securely move data between corporate Workspace accounts and other authorized, managed third-party applications without being blocked. For added data protection, this capability strictly prevents the transfer of that data to personal accounts within the same managed Google application or to unmanaged personal apps.</div><div><br></div><div>For example, a user is able to copy a client's email address from their corporate Gmail account and successfully paste it into a managed third-party CRM application. When they try to paste that same email address into their personal Gmail account, they are blocked and receive the following message: "This information can only be shared within your organization's Google Workspace apps.”</div><h3>Getting started</h3><div><ul><li><b>Admins: </b>This feature will be OFF by default and can be enabled at the OU level. Admins can leverage iOS AppConfig through their MDM provider to enforce these restrictions for each Workspace app. Visit the Help Center to l<a href="https://knowledge.workspace.google.com/admin/devices/prevent-accidental-data-leaks-on-ios-devices" target="_blank">earn more about preventing accidental data leaks on iOS devices.</a></li></ul><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhe0KttnDVIDx8-ILDqtb4oao-eotyQsvtn-JQlrSKrAZzkTXC1GUrb3hoca_0jAunJ_z-8R1ECvPWAvygedACFm8SnovOhI4OhTYl2kTgCE8qz5TrvPFGgHpThtREcxIumstb8SDsR6B5DL0AUqT8VB7TACeVBsOgPpc58XDCvk_Gn_YAyxOARRR3-lx0/s2048/Enhanced%20data%20protection%20for%20managed%20third-party%20apps%20-%206990.png" imageanchor="1"><img border="0" data-original-height="660" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhe0KttnDVIDx8-ILDqtb4oao-eotyQsvtn-JQlrSKrAZzkTXC1GUrb3hoca_0jAunJ_z-8R1ECvPWAvygedACFm8SnovOhI4OhTYl2kTgCE8qz5TrvPFGgHpThtREcxIumstb8SDsR6B5DL0AUqT8VB7TACeVBsOgPpc58XDCvk_Gn_YAyxOARRR3-lx0/s16000/Enhanced%20data%20protection%20for%20managed%20third-party%20apps%20-%206990.png"></a></div><ul><li><b>End users:</b> There is no end-user setting for this feature.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains: </a>Available now</li></ul></div><h3>Availability</h3><div><ul><li><b>Enterprise:</b> Enterprise Standard and Plus</li><li><b>Education:</b> Education Standard and Plus</li><li><b>Other Editions: </b>Frontline Standard; Enterprise Essentials Plus; Cloud Identity Premium</li></ul></div><h3>Resources</h3><div><ul><li>Google Workspace Admin Help Center: <a href="https://knowledge.workspace.google.com/admin/devices/prevent-accidental-data-leaks-on-ios-devices" target="_blank">Prevent accidental data leaks on iOS devices</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Quickly scan multiple pages in Google Drive on Android]]></title>
<description><![CDATA[Tired of scanning one page at a time? With the new Document Scanner in Google Drive on Android, you can now scan multiple pages at the same time. Flip through the pages of a book or lay your receipts out on a table and our Document Scanner will identify, separate, and capture each page within the...]]></description>
<link>https://tsecurity.de/de/3589208/it+betriebssysteme/web+tipps/quickly+scan+multiple+pages+in+google+drive+on+android/</link>
<pubDate>Thu, 11 Jun 2026 01:54:43 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Tired of scanning one page at a time? With the new Document Scanner in Google Drive on Android, you can now scan multiple pages at the same time. Flip through the pages of a book or lay your receipts out on a table and our Document Scanner will identify, separate, and capture each page within the camera view. It even detects duplicates to prevent accidental re-scans.<div><br></div><div>Note this is only available for Android devices with 8GB+ RAM.<br><div><br></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container"><tbody><tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqHAmqK8byvQ9d3P3ARrH7BF13fyfQTImOLolaFCaW5Rip6VuMNqVYF6EPgC87P4koZWtWj6_X4Ifb93bdASEbGDqLfKs8uhLlHM80EnE057vZ-qRtZxL4YeVhYovnW1QfbTOWDnuL8BpNXXQ7616wt0eunbBMlysY_Tw-39pGqnPPK6ePJOMtIi9n2as/s851/Quickly%20scan%20multiple%20pages%20in%20Google%20Drive%20on%20Android%20-%206188%20-%202.gif" imageanchor="1"><img border="0" data-original-height="851" data-original-width="386" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqHAmqK8byvQ9d3P3ARrH7BF13fyfQTImOLolaFCaW5Rip6VuMNqVYF6EPgC87P4koZWtWj6_X4Ifb93bdASEbGDqLfKs8uhLlHM80EnE057vZ-qRtZxL4YeVhYovnW1QfbTOWDnuL8BpNXXQ7616wt0eunbBMlysY_Tw-39pGqnPPK6ePJOMtIi9n2as/s16000/Quickly%20scan%20multiple%20pages%20in%20Google%20Drive%20on%20Android%20-%206188%20-%202.gif"></a></td></tr><tr><td class="tr-caption"><i>New multi-page scanning with Android Document Scanner</i></td></tr></tbody></table><h3>Getting started</h3><div><ul><li><b>Admins:</b> There is no admin control for this feature.</li><li><b>End users:</b> Visit the Help Center to <a href="https://support.google.com/drive/answer/3145835?hl=en&amp;sjid=1000589892105825013-NC&amp;co=GENIE.Platform%3DAndroid&amp;oco=1" target="_blank">learn more about scanning documents with Drive</a>.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Available now</li></ul></div><h3>Availability</h3><div><ul><li>Available to all Google Workspace customers, Workspace Individual subscribers, and users with personal Google accounts</li></ul></div><h3>Resources</h3><div><ul><li>Google Help: <a href="https://support.google.com/drive/answer/3145835?hl=en&amp;sjid=1000589892105825013-NC&amp;co=GENIE.Platform%3DAndroid&amp;oco=1" target="_blank">Scan documents with Google Drive</a></li></ul></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[New data loss prevention capabilities for file attachments and proximity conditions are generally available]]></title>
<description><![CDATA[Data loss prevention (DLP) rules for non-Workspace file attachments and associated proximity conditions are now generally available. These new capabilities enable organizations to target files with specific parameters, such as blocking the sharing of sensitive file formats or identifying files th...]]></description>
<link>https://tsecurity.de/de/3589207/it+betriebssysteme/web+tipps/new+data+loss+prevention+capabilities+for+file+attachments+and+proximity+conditions+are+generally+available/</link>
<pubDate>Thu, 11 Jun 2026 01:54:42 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Data loss prevention (DLP) rules for non-Workspace file attachments and associated proximity conditions are now generally available. These new capabilities enable organizations to target files with specific parameters, such as blocking the sharing of sensitive file formats or identifying files that contain specific strings in their titles.<div><br></div><div>Using these new content conditions, admins can set up various DLP rules for added protection, such as:</div><div><br></div><div><ul><li><b>File names:</b> Block files containing text string “funkyword”</li><li><b>File extensions:</b> Block .java files</li><li><b>File types: </b>Block custom mime type such as application/custom_app</li><li><b>Proximity matching: </b>Detect “routing number” in proximity of 100 characters of “account number”</li></ul></div><div><b><br></b></div><div><b>Additional details</b></div><div><b><br></b></div><div>In addition to file-based conditions, administrators can utilize associated proximity conditions to identify sensitive information in the file. This feature allows for the detection of sensitive data that appears within a specified distance of other predefined data types, regular expressions, or word lists.</div><div><br></div><div>For example, a rule can be configured to trigger when a bank account number is found within 100 characters of a routing number. By identifying data in context, proximity matching helps administrators reduce false positives and more accurately secure financial information or proprietary content.</div><div><br></div><div>Key functionality in DLP rules for file attachments and associated proximity conditions include:</div><div><br></div><div><ul><li>Ability to match against common or custom MIME types and system file categories</li><li>Support for scanning attachments in Gmail, Drive, and Chat to set rules across communication channels </li><li>Granular distance settings for proximity matching, allowing admins to define a range of up to 1,000 characters between matched conditions</li></ul></div><h3>Getting started</h3><div><ul><li><b>Admins: </b> When configuring DLP rules in the admin console, admins can locate the new content conditions of file extension, file name, and file type under content conditions. Admins can also select the option of proximity matching to set a maximum distance between two pieces of matched texts. Visit the Help Center to <a href="https://knowledge.workspace.google.com/p/metadata-proximity" target="_blank">learn more</a>.</li><li><b>End users:</b> There is no end user setting for this feature.</li></ul><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container"><tbody><tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOum_lOuEyz1LzxrRumk_fePVhREsTRByI1go73CZVlPdlvYKZGFV9Rcp7yGD42qBZbfIcijlQM92wmaX29SKDz3y1vtTyAkq5COPxe9F63oAiD77u7CkpBYsm_n-8Ju0WQM-7zkTGg7TF8TWmJYD0FDXGYx-_os4YOfJU6IN3m7VTO3tFQCPzK1qJnXI/s2048/New%20data%20loss%20prevention%20capabilities%20for%20file%20attachments%20and%20proximity%20conditions%20are%20generally%20available%20-%207005.png" imageanchor="1"><img border="0" data-original-height="574" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOum_lOuEyz1LzxrRumk_fePVhREsTRByI1go73CZVlPdlvYKZGFV9Rcp7yGD42qBZbfIcijlQM92wmaX29SKDz3y1vtTyAkq5COPxe9F63oAiD77u7CkpBYsm_n-8Ju0WQM-7zkTGg7TF8TWmJYD0FDXGYx-_os4YOfJU6IN3m7VTO3tFQCPzK1qJnXI/s16000/New%20data%20loss%20prevention%20capabilities%20for%20file%20attachments%20and%20proximity%20conditions%20are%20generally%20available%20-%207005.png"></a></td></tr><tr><td class="tr-caption"><i>Content conditions for DLP in the Admin console to configure policies for sensitive file attachments</i></td></tr></tbody></table></div><h3>Rollout pace</h3><div><ul><li><a href="https://knowledge.workspace.google.com/admin/releases/choose-when-users-get-new-features" target="_blank">Rapid Release and Scheduled Release domains:</a> Gradual rollout (up to 15 days for feature visibility) started on May 27, 2026</li></ul></div><h3>Availability</h3><div><ul><li><b>Enterprise:</b> Enterprise Standard and Plus</li><li><b>Education: </b>Education Fundamentals, Standard, and Plus</li><li><b>Other Editions:</b> Enterprise Essentials; Frontline Standard and Plus</li></ul></div><h3>Resources</h3><div><ul><li>Google Workspace Admin Help: <a href="https://docs.google.com/document/d/18sStig6zzfLF2bKl1_HXD981fTxqaSSYW-aX-yIjC_A/edit?resourcekey=0-qlEoSg7nkXUX9GkD3fDM9A&amp;tab=t.0" target="_blank">How to use predefined detectors</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Data loss prevention policies for Google Calendar now available in GA]]></title>
<description><![CDATA[Data loss prevention (DLP) for Google Calendar is now generally available to protect sensitive information shared within event details. Previously available in beta, this feature allows you to create and apply data protection rules that scan calendar event titles, descriptions, and locations for ...]]></description>
<link>https://tsecurity.de/de/3589206/it+betriebssysteme/web+tipps/data+loss+prevention+policies+for+google+calendar+now+available+in+ga/</link>
<pubDate>Thu, 11 Jun 2026 01:54:41 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Data loss prevention (DLP) for Google Calendar is now generally available to protect sensitive information shared within event details. Previously <a href="https://workspaceupdates.googleblog.com/2026/02/data-loss-prevention-policies-for.html" target="_blank">available in beta</a>, this feature allows you to create and apply data protection rules that scan calendar event titles, descriptions, and locations for sensitive content, such as credit card numbers or national identification numbers.<div><br></div><div><b>Key functionalities include:</b></div><div><br></div><div><ul><li><b>Choice of actions: </b>Admins can choose to <b>audit</b> when an event is saved with sensitive content, <b>warn</b> users about sensitive content in their event, or <b>block</b> event creation or updates if a DLP policy is violated.</li><li><b>Event details:</b> DLP rules scan free-text fields in the event, including the event’s title, description, and location fields.</li><li><b>Owner-based policies: </b>Rules are applied based on the organizational unit (OU) of the owner (event organizer on primary calendars or calendar owner on secondary calendars), consistent with other <a href="https://support.google.com/a?p=dlp_calendar" target="_blank">Workspace DLP</a> configurations.</li><li><b>User notifications:</b> With DLP policies for Calendar, users receive immediate feedback when sensitive data is detected. On the web, users see a pop-up notification explaining the issue. Admins can also customize this message with more specific details. If a meeting update is blocked on Android, iOS, or via the Calendar API, the user will receive an automated email notification explaining the policy violation and why changes to the meeting invite were not successful.</li></ul></div><h3>Getting started</h3><div><ul><li><b>Admins: </b>The feature will be OFF by default and can be enabled at the organizational unit (OU) or group level. Visit the Help Center to <a href="https://support.google.com/a?p=dlp_calendar" target="_blank">learn more about DLP for Calendar</a>.</li><li><b>End users: </b>There is no end user setting for this feature.</li></ul><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container"><tbody><tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_GEE9rC961AGq_8wcrUc20ufbmU2zSefFO3E0lCZBv4HEN3cRHQONffWBXPNI2IhWE8jO3LT6xdU4XQ__O3Yn6nn-NUMGpxlRkgJM251JsymzP4kjyk6hkmO4UXAyE1_kEb-RpaNorBq6ZTDJt9S0pUhlQicHiobadAQj9NayqhwuzPFb07yc0FGhiM0/s2048/Data%20loss%20prevention%20policies%20for%20Google%20Calendar%20now%20available%20in%20GA%20-%206121.png"><img border="0" data-original-height="1324" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_GEE9rC961AGq_8wcrUc20ufbmU2zSefFO3E0lCZBv4HEN3cRHQONffWBXPNI2IhWE8jO3LT6xdU4XQ__O3Yn6nn-NUMGpxlRkgJM251JsymzP4kjyk6hkmO4UXAyE1_kEb-RpaNorBq6ZTDJt9S0pUhlQicHiobadAQj9NayqhwuzPFb07yc0FGhiM0/s16000/Data%20loss%20prevention%20policies%20for%20Google%20Calendar%20now%20available%20in%20GA%20-%206121.png"></a></td></tr><tr><td class="tr-caption"><i>DLP settings in the admin console to configure policies for sensitive data, including actions and alerts when creating Calendar events</i></td></tr></tbody></table><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container"><tbody><tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJZo_pJaC0r1qn6_-MzyauhxHARtYLAJ6YHusVEZYZC0gMTbwiVe1sKCep4rngpnFtXM4tCvrHFccKWV7z4TnAHclnokwMs-ezsAldtGSszzxboDgTXQ61ncaU0UCHsAdtQc6Xk64q2PHTnaRblErrR7iufBNcm-wg-Dsi1p5Ri_oot_1gKyVkBidGxyI/s2048/Data%20loss%20prevention%20policies%20for%20Google%20Calendar%20now%20available%20in%20GA%20-%206121%20-%202.png"><img border="0" data-original-height="1321" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJZo_pJaC0r1qn6_-MzyauhxHARtYLAJ6YHusVEZYZC0gMTbwiVe1sKCep4rngpnFtXM4tCvrHFccKWV7z4TnAHclnokwMs-ezsAldtGSszzxboDgTXQ61ncaU0UCHsAdtQc6Xk64q2PHTnaRblErrR7iufBNcm-wg-Dsi1p5Ri_oot_1gKyVkBidGxyI/s16000/Data%20loss%20prevention%20policies%20for%20Google%20Calendar%20now%20available%20in%20GA%20-%206121%20-%202.png"></a></td></tr><tr><td class="tr-caption"><i>An end user is prompted with a message asking them to remove sensitive information</i></td></tr></tbody></table></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Gradual rollout (up to 15 days for feature visibility) starting on June 3, 2026</li></ul></div><h3>Availability</h3><div><ul><li><b>Enterprise:</b> Enterprise Standard and Plus</li><li><b>Education:</b> Education Fundamentals, Standard, and Plus</li><li><b>Other Editions:</b> Enterprise Essentials; Frontline Standard and Plus</li></ul></div><h3>Resources</h3><div><ul><li>Google Workspace Admin Help: <a href="https://support.google.com/a?p=dlp_calendar" target="_blank">About DLP for Calendar</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Gmail as a source in Ask Gemini in Drive now generally available]]></title>
<description><![CDATA[Gmail sources in Ask Gemini in Drive is now generally available and has started rolling out to eligible Google Workspace and Google AI plans.Ask Gemini in Drive offers a dedicated, immersive workspace designed for deep focus. Users can engage in high-context, multi-turn conversations to efficient...]]></description>
<link>https://tsecurity.de/de/3589205/it+betriebssysteme/web+tipps/gmail+as+a+source+in+ask+gemini+in+drive+now+generally+available/</link>
<pubDate>Thu, 11 Jun 2026 01:54:39 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Gmail sources in Ask Gemini in Drive is now generally available and has started rolling out to <a href="https://support.google.com/drive/answer/13952129" target="_blank">eligible Google Workspace and Google AI plans</a>.<div><br></div><div>Ask Gemini in Drive offers a dedicated, immersive workspace designed for deep focus. Users can engage in high-context, multi-turn conversations to efficiently explore and understand content.</div><div><br></div><div>Previously, users could only add files and folders as sources within Ask Gemini in Drive. Now, users can unlock deeper insights by adding Gmail threads as sources in Ask Gemini for Drive. Users can ground their responses in a complete view of their business context—spanning emails, files, and folders—to ensure the most helpful and accurate answers possible.</div><div><br></div><div>Visit the Help Center for more information on the <a href="https://support.google.com/docs/answer/14925782#zippy=%2Cgemini-in-drive-side-panel" target="_blank">locations and languages where Ask Gemini in Drive is currently supported</a>.</div><h3>Getting started</h3><div><ul><li><b>Admins:</b> This feature is available by default if <a href="https://knowledge.workspace.google.com/admin/gemini/manage-access-to-gemini-features-in-workspace-services" target="_blank">Gemini for Workspace in Drive is enabled</a>.</li><li><b>End users:</b> You must have <a href="https://support.google.com/mail/answer/15604322?sjid=17363988672514456782-NA#gw&amp;zippy=%2Csmart-features-in-google-workspace%2Cwhat-are-googles-legal-bases-of-processing-for-users-in-the-european-economic-area-united-kingdom-or-switzerland%2Chow-long-is-your-workspace-content-activity-used-to-provide-smart-features-and-to-improve-these-features" target="_blank">Workspace smart features</a> enabled to use Ask Gemini in Drive. Visit the Help Center to <a href="https://support.google.com/drive/answer/16963068?hl=en&amp;ref_topic=15113879&amp;sjid=14051016379905367535-NA#ask_gemini_in_drive" target="_blank">learn more about Ask Gemini in Drive</a>.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Gradual rollout (up to 15 days for feature visibility) starting on June 3, 2026</li></ul></div><h3>Availability</h3><div><ul><li><b>Business:</b> Business Standard and Plus</li><li><b>Enterprise:</b> Enterprise Standard and Plus</li><li><b>Consumer: </b>Google AI Pro and Ultra</li><li><b>Education Add-ons: </b>Google AI Pro for Education</li><li><b>Other Add-ons: </b>AI Expanded Access</li></ul></div><h3>Resources</h3><div><ul><li>Google Drive Help: <a href="https://support.google.com/drive/answer/16963068" target="_blank">Use Gemini in Drive for research &amp; analysis</a></li><li>Google Drive Help: <a href="https://support.google.com/drive/answer/16813283" target="_blank">Learn how to use sources with Google Workspace with Gemini</a></li><li>Google Drive Help: <a href="https://support.google.com/drive/answer/16684520" target="_blank">Share your Gemini sources using Drive projects</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[New iOS device management settings now generally available in Google Endpoint Management]]></title>
<description><![CDATA[We’re introducing an expanded set of native Apple Mobile Device Management (MDM) settings to Google Endpoint Management, providing administrators with more granular control over how iOS devices are configured and secured. These new settings—spanning categories such as Apps and Services, Device Fe...]]></description>
<link>https://tsecurity.de/de/3589204/it+betriebssysteme/web+tipps/new+ios+device+management+settings+now+generally+available+in+google+endpoint+management/</link>
<pubDate>Thu, 11 Jun 2026 01:54:38 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[We’re introducing an expanded set of native Apple Mobile Device Management (MDM) settings to Google Endpoint Management, providing administrators with more granular control over how iOS devices are configured and secured. These new settings—spanning categories such as Apps and Services, Device Features, Data Sharing, and Backup &amp; iCloud Sync, etc—allow admins to manage critical device behaviors directly from the Google Workspace Admin console. This update allows organizations to efficiently harden their security posture for both corporate-owned and BYOD iOS devices. With this launch, these settings will become generally available.<div><br></div><div>See below for a detailed list of the new settings by category.</div><div><br></div><div><b>Apps and Services </b>- Writing tools, App clips, App installation from web, App installation from alternative marketplaces, Apps to be hidden, Locking apps, In app purchases</div><div><br></div><div class="separator"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvSFny-HoIaQTteloCeF4XVS68KA1eB7cJc_DaVIsrKqRewzwUESnVx2Y2ZxJ2oVx6kuFeOlbOl7vAnMTVa1MGEXZ63EO7Zv3hjczbsW6c1qv8kOlTZPn1rkVV6jp67_LF_H2wzY2-__0J-3fjx9wP6HNXL0lWO59U3jzamUFYXldoglyYxxExuSjWcqE/s2048/New%20iOS%20device%20management%20settings%20now%20generally%20available%20in%20Google%20Endpoint%20Management%20-%206963.png" imageanchor="1"><img border="0" data-original-height="949" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvSFny-HoIaQTteloCeF4XVS68KA1eB7cJc_DaVIsrKqRewzwUESnVx2Y2ZxJ2oVx6kuFeOlbOl7vAnMTVa1MGEXZ63EO7Zv3hjczbsW6c1qv8kOlTZPn1rkVV6jp67_LF_H2wzY2-__0J-3fjx9wP6HNXL0lWO59U3jzamUFYXldoglyYxxExuSjWcqE/s16000/New%20iOS%20device%20management%20settings%20now%20generally%20available%20in%20Google%20Endpoint%20Management%20-%206963.png"></a></div><div><b><br></b></div><div><b>Safari</b> - Safari history clearing, Safari private browsing</div><div><br></div><div><b>Device Feature</b>s - Auto unlock, Call recording, Auto dim, Default browser modification, Personalized advertising, eSIM outgoing transfers, OTA PKI updates, iPhone mirroring, Satellite connection, RCS messaging, Unpaired external boot to recovery, Untrusted TLS prompt, Limit ad tracking, AirPlay outgoing requests pairing password, Preserve eSIM on erase</div><div><br></div><div><b>Backup and iCloud Sync</b> - Enterprise book backup</div><div><br></div><div><b>Authentication</b> -  Fingerprint for unlock</div><div><br></div><div><b>Data Sharing</b> - Managed pasteboard</div><h3>Getting started</h3><div><ul><li><b>Admins:</b> Visit the Help Center to <a href="https://knowledge.workspace.google.com/admin/devices/apply-settings-for-ios-devices#top" target="_blank">learn more about these settings</a>.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://knowledge.workspace.google.com/admin/releases/choose-when-users-get-new-features?visit_id=639159439865116302-2514711143&amp;rd=1" target="_blank">Rapid Release and Scheduled Release domains:</a> Gradual rollout (up to 15 days for feature visibility) starting on June 4, 2026</li></ul></div><h3>Availability</h3><div><ul><li>Available to all Google Workspace customers with Google Endpoint Management</li></ul></div><h3>Resources</h3><div><ul><li>Google Workspace Admin Help: <a href="https://knowledge.workspace.google.com/admin/devices/apply-settings-for-ios-devices#top" target="_blank">Settings for iOS devices</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Google Workspace Updates Weekly Recap - June 5, 2026]]></title>
<description><![CDATA[Organize My Files in Drive now generally availableIn October 2025, we launched a beta for Organize My Files in Drive. This feature is now generally available and has started rolling out to eligible Google Workspace and Google AI plans. | Learn more about how Organize My Files in Drive is now gene...]]></description>
<link>https://tsecurity.de/de/3589203/it+betriebssysteme/web+tipps/google+workspace+updates+weekly+recap+-+june+5+2026/</link>
<pubDate>Thu, 11 Jun 2026 01:54:37 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h3>Organize My Files in Drive now generally available</h3><div>In October 2025, we launched a beta for Organize My Files in Drive. This feature is now generally available and has started rolling out to eligible Google Workspace and Google AI plans. | Learn more about <a href="https://workspaceupdates.googleblog.com/2026/06/organize-my-files-in-drive-now-generally-available.html" target="_blank">how Organize My Files in Drive is now generally available</a>.</div><h3>Introducing the ability to loop over a list of items in Workspace Studio</h3><div>We are introducing the ability to loop over a list of items in Google Workspace Studio flows, bringing more power and flexibility to your everyday workflows. | Learn more about <a href="https://workspaceupdates.googleblog.com/2026/06/introducing-ability-to-loop-over-list-of-items-in-Workspace-Studio.html" target="_blank">the ability to loop over a list of items in Workspace Studio</a>.</div><h3>Enhanced data protection for managed third-party apps</h3><div>With this release, users are now able to maintain efficient workflows and securely move data between corporate Workspace accounts and other authorized, managed third-party applications without being blocked. | Learn more about <a href="https://workspaceupdates.googleblog.com/2026/06/enhanced-data-protection-for-managed-third-party-apps.html" target="_blank">enhanced data protection for managed third-party apps</a>.</div><h3>Quickly scan multiple pages in Google Drive on Android</h3><div>Tired of scanning one page at a time? With the new Document Scanner in Google Drive on Android, you can now scan multiple pages at the same time. | Learn more about <a href="https://workspaceupdates.googleblog.com/2026/06/quickly-scan-multiple-pages-in-google-Drive-on-Android.html" target="_blank">how to Quickly scan multiple pages in Google Drive on Android</a>.</div><h3>New data loss prevention capabilities for file attachments and proximity conditions are generally available </h3><div>Data loss prevention (DLP) rules for non-Workspace file attachments and associated proximity conditions are now generally available. These new capabilities enable organizations to target files with specific parameters, such as blocking the sharing of sensitive file formats or identifying files that contain specific strings in their titles. | Learn more about <a href="https://workspaceupdates.googleblog.com/2026/06/new-data-loss-prevention-capabilities-for-file-attachments-and-proximity-conditions-are-generally-available.html" target="_blank">the new data loss prevention capabilities for file attachments and proximity conditions are generally available</a>.</div><h3>Data loss prevention policies for Google Calendar now available in GA</h3><div>Data loss prevention (DLP) for Google Calendar is now generally available to protect sensitive information shared within event details. | Learn more about <a href="https://workspaceupdates.googleblog.com/2026/05/data-loss-prevention-policies-for-Google-Calendar-now-available-in-GA.html" target="_blank">data loss prevention policies for Google Calendar now available in GA</a>.</div><h3>Gmail as a source in Ask Gemini in Drive now generally available</h3><div>Gmail sources in Ask Gemini in Drive is now generally available and has started rolling out to eligible Google Workspace and Google AI plans. Ask Gemini in Drive offers a dedicated, immersive workspace designed for deep focus. Users can engage in high-context, multi-turn conversations to efficiently explore and understand content. | Learn more about <a href="https://workspaceupdates.googleblog.com/2026/06/gmail-as-source-in-ask-gemini-in-drive-now-generally-available.html" target="_blank">Gmail as a source in Ask Gemini in Drive now generally available</a>.</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Request lightweight document alignment with approvals in Google Drive]]></title>
<description><![CDATA[Google Drive is introducing alignment approvals, a lightweight mechanism that allows teams to request and record document sign-offs without file changes resetting the approval flow. When a document is in a partially approved state, collaborators can continue making edits without resetting any rec...]]></description>
<link>https://tsecurity.de/de/3589202/it+betriebssysteme/web+tipps/request+lightweight+document+alignment+with+approvals+in+google+drive/</link>
<pubDate>Thu, 11 Jun 2026 01:54:36 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Google Drive is introducing alignment approvals, a lightweight mechanism that allows teams to request and record document sign-offs without file changes resetting the approval flow. When a document is in a partially approved state, collaborators can continue making edits without resetting any recorded approver decisions.<div><br></div><div>Alignment approvals can be initiated via a new checkbox within the standard request dialog across web clients.</div><div><br></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container"><tbody><tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwX08BVNzWUZSGdODGeGynf9n_G5ZprV8ISDgDkQJazQM0bPfcLOadAt4Jjy3AoLmQcI2dZ0Ku2bqWIxgYUtsDm-BjP-NiAIgwsWZY0tYIe0Szjc85fxqjY228LIw3w-5vdZTY20bDIauO_Oz7sj03hn9XpyL3kKwBrcyj1lboH1FGgLzO_jOydFgKHIE/s1166/Request%20lightweight%20document%20alignment%20with%20approvals%20in%20Google%20Drive%20-%206996%20-%201.png" imageanchor="1"><img border="0" data-original-height="1142" data-original-width="1166" height="313" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwX08BVNzWUZSGdODGeGynf9n_G5ZprV8ISDgDkQJazQM0bPfcLOadAt4Jjy3AoLmQcI2dZ0Ku2bqWIxgYUtsDm-BjP-NiAIgwsWZY0tYIe0Szjc85fxqjY228LIw3w-5vdZTY20bDIauO_Oz7sj03hn9XpyL3kKwBrcyj1lboH1FGgLzO_jOydFgKHIE/s320/Request%20lightweight%20document%20alignment%20with%20approvals%20in%20Google%20Drive%20-%206996%20-%201.png" width="320"></a></td></tr><tr><td class="tr-caption"><i><br>When checked, "Require all approvers to review the same content" resets pending approvals if the file content changes. This is the default behavior.</i></td></tr></tbody></table><br><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container"><tbody><tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzI1wJUjVwAUdWYlZNPtwujAP2IEC2B_sMIXfyUe0RjV40h366xpv5Y0V5kj0Hr91copDZc4rm4Kn84gWp5tC8e6x8_QoRqSgRk8o094eO8GxpFNou63UBduhLTGZdtNypJsttUXbKPTaAOefIEhoTv3ZIhntBYqxfUo6baDy96s691ycj0ud7AsLrC_w/s586/Request%20lightweight%20document%20alignment%20with%20approvals%20in%20Google%20Drive%20-%206996%20-%202.png" imageanchor="1"><img border="0" data-original-height="549" data-original-width="586" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzI1wJUjVwAUdWYlZNPtwujAP2IEC2B_sMIXfyUe0RjV40h366xpv5Y0V5kj0Hr91copDZc4rm4Kn84gWp5tC8e6x8_QoRqSgRk8o094eO8GxpFNou63UBduhLTGZdtNypJsttUXbKPTaAOefIEhoTv3ZIhntBYqxfUo6baDy96s691ycj0ud7AsLrC_w/s320/Request%20lightweight%20document%20alignment%20with%20approvals%20in%20Google%20Drive%20-%206996%20-%202.png" width="320"></a></td></tr><tr><td class="tr-caption"><i><br>When unchecked, changes to the file content don't reset pending approvals.</i></td></tr></tbody></table><div><br></div><div>This feature serves use cases where strict content locking is unnecessary, making it easier for teams to maintain momentum on fluid projects. While an approval remains pending, individual approvers retain the flexibility to manually reset their approved status back to pending if subsequent content edits no longer match their expectations.</div><div><br></div><div>This update follows a series of recent enhancements to the Drive approvals ecosystem, including <a href="https://developers.google.com/workspace/drive/api/guides/approvals" target="_blank">programmatic approval management with the Drive API</a>.</div><h3>Getting started</h3><div><ul><li><b>Admins: </b>Approval requests are enabled by default and can be disabled at the domain, OU, and group level. There is no admin setting that controls alignment approvals specifically; users can access them if they have access to the broader approval request feature. Visit the Help Center to <a href="https://knowledge.workspace.google.com/admin/drive/manage-approvals" target="_blank">learn more about managing Drive approvals</a>.</li><li><b>End users:</b> Alignment approvals will be off by default and can be enabled by the user. Visit the Help Center to <a href="https://support.google.com/drive/answer/9387535" target="_blank">learn more about getting approvals in Drive</a>.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release domains:</a> Gradual rollout (up to 15 days for feature visibility)  started on June 2, 2026</li><li><a href="https://support.google.com/a/answer/172177" target="_blank">Scheduled Release domains:</a> Full rollout (1–3 days for feature visibility) starting on June 15, 2026</li></ul></div><h3>Availability</h3><div><ul><li><b>Business:</b> Business Standard and Plus</li><li><b>Enterprise:</b> Enterprise Starter, Standard, and Plus</li><li><b>Education:</b> Education Plus</li><li><b>Other Editions:</b> Enterprise Essentials and Enterprise Essentials Plus; Nonprofits</li><li><b>Education Add-ons:</b> Teaching and Learning</li></ul></div><h3>Resources</h3><div><ul><li>Google Workspace Admin Help: <a href="https://knowledge.workspace.google.com/admin/drive/manage-approvals" target="_blank">Manage approvals</a></li><li>Google Drive Help: <a href="https://support.google.com/drive/answer/9387535" target="_blank">Get approvals on files in Google Drive</a></li><li>Google Workspace Developer Documentation: <a href="https://developers.google.com/workspace/drive/api/guides/approvals" target="_blank">Manage approvals</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Convert rubric files and images into Google Classroom rubrics with help from Gemini]]></title>
<description><![CDATA[Building on our October launch, Gemini in Google Classroom can now help educators more easily convert rubric files and images into Google Classroom rubrics, right within the assignment creation workflow. Educators can now upload more file types, such as .jpeg and .png files. For example, by uploa...]]></description>
<link>https://tsecurity.de/de/3589201/it+betriebssysteme/web+tipps/convert+rubric+files+and+images+into+google+classroom+rubrics+with+help+from+gemini/</link>
<pubDate>Thu, 11 Jun 2026 01:54:35 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Building on our October <a href="https://workspaceupdates.googleblog.com/2025/10/educators-convert-rubrics-google-classroom-drive-gemini.html" target="_blank">launch</a>, Gemini in Google Classroom can now help educators more easily convert rubric files and images into Google Classroom rubrics, right within the assignment creation workflow. Educators can now upload more file types, such as .jpeg and .png files. For example, by uploading a photo of a physical rubric or using existing files, Gemini in Classroom can help educators quickly generate structured, interactive rubrics within the Classroom interface. They can then make edits to the converted rubric before saving it. This Gemini-powered automation reduces manual data entry and helps educators maintain consistent grading standards across their assignments.<div><br></div><div>With this launch, rubric conversion will be controlled by the <a href="https://knowledge.workspace.google.com/admin/getting-started/editions/manage-access-to-gemini-in-classroom" target="_blank">Gemini in Classroom setting</a> in the Admin console. If Gemini in Classroom is disabled for your organization, you’ll no longer be able to convert rubrics from documents or images.</div><div><br></div><div>This feature is only available in English for users over age 18.</div><h3>Getting started</h3><div><ul><li><b>Admins:</b> This feature will be available by default if Gemini in Classroom is enabled. Visit the Help Center to learn more about <a href="https://knowledge.workspace.google.com/admin/getting-started/editions/manage-access-to-gemini-in-classroom" target="_blank">managing access to Gemini in Classroom</a>.</li><li><b>End users: </b>Visit the Help Center to learn more about <a href="https://support.google.com/edu/classroom/answer/9335069" target="_blank">creating and reusing rubrics for an assignment</a>.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Full rollout (1–3 days for feature visibility) starting on June 8, 2026</li></ul></div><h3>Availability</h3><div><ul><li><b>Education:</b> Education Fundamentals, Standard, and Plus</li></ul></div><h3>Resources</h3><div><ul><li>Google Help: <a href="https://support.google.com/edu/classroom/answer/9335069" target="_blank">Create or reuse a rubric for an assignment</a></li><li>Google Workspace Updates Blog: <a href="https://workspaceupdates.googleblog.com/2025/10/educators-convert-rubrics-google-classroom-drive-gemini.html" target="_blank">Educators can now convert rubrics in Google Classroom from Drive or local files with help from Gemini</a></li><li>Keyword: <a href="https://knowledge.workspace.google.com/admin/getting-started/editions/manage-access-to-gemini-in-classroom?hl=es-419" target="_blank">Manage access to Gemini in Classroom</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Introducing the Workspace Policy API mutate endpoints for DLP]]></title>
<description><![CDATA[The Workspace Policy API provides a centralized, comprehensive view of your security settings, eliminating the need to navigate to numerous pages in the Admin console.With our latest update, we are introducing mutate endpoints (Create, Update, Delete) alongside existing read-only capabilities (Ge...]]></description>
<link>https://tsecurity.de/de/3589200/it+betriebssysteme/web+tipps/introducing+the+workspace+policy+api+mutate+endpoints+for+dlp/</link>
<pubDate>Thu, 11 Jun 2026 01:54:33 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[The <a href="https://docs.cloud.google.com/identity/docs/concepts/overview-policies" target="_blank">Workspace Policy API</a> provides a centralized, comprehensive view of your security settings, eliminating the need to navigate to numerous pages in the Admin console.<div><br></div><div>With our latest update, we are introducing mutate endpoints (Create, Update, Delete) alongside existing read-only capabilities (Get, List) for <a href="https://knowledge.workspace.google.com/admin/security/about-dlp" target="_blank">data loss prevention</a> (DLP) rules and detectors. This allows super admins to programmatically manage and fully automate the entire lifecycle of their DLP policies, from initial creation to real-time activation and deactivation.</div><div><br></div><div>Note this is an API-only launch for capabilities currently supported in the Admin console.</div><div><br></div><div><b>About DLP</b></div><div><br></div><div>DLP lets Workspace admins control external file sharing to prevent sensitive information leaks. It scans files for violations, triggering incidents and protective actions like content blocking.</div><div><br></div><div>How DLP works:</div><div><br></div><div><ul><li>Admins define rules for sensitive content across Drive, Gmail, Chat, and Chrome.</li><li>DLP scans content for DLP rule violations that trigger DLP  incidents.</li><li>DLP enforces the rules you defined and violations trigger actions, such as alerts.</li><li>Admins are alerted for DLP rule violations.</li></ul></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container"><tbody><tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6rjOO8OmJ2mi3vjUmrz9BMoff7-n9S9lRc7O0tyjO3Y7dc6plZ8r48gMuhXBIP-Z7TJxAEMAfPjHdnywqXHBOmELx3JAgoG6oWjfgOiViZi5fsiu9OfMtXtGkCNLEvVWokX5Fkcu1XbT3-sbC1fXR798BmbzgNwwE6v_AiUXgwhVKcEEOs3L5la4ckqQ/s2048/Introducing%20the%20Workspace%20Policy%20API%20mutate%20endpoints%20for%20DLP%20-%206003.png" imageanchor="1"><img border="0" data-original-height="885" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6rjOO8OmJ2mi3vjUmrz9BMoff7-n9S9lRc7O0tyjO3Y7dc6plZ8r48gMuhXBIP-Z7TJxAEMAfPjHdnywqXHBOmELx3JAgoG6oWjfgOiViZi5fsiu9OfMtXtGkCNLEvVWokX5Fkcu1XbT3-sbC1fXR798BmbzgNwwE6v_AiUXgwhVKcEEOs3L5la4ckqQ/s16000/Introducing%20the%20Workspace%20Policy%20API%20mutate%20endpoints%20for%20DLP%20-%206003.png"></a></td></tr><tr><td class="tr-caption"><i>Summary of capabilities supported by mutate endpoints for DLP</i></td></tr></tbody></table><h3>Getting started</h3><div><ul><li><b>Admins:</b> You must be a super admin to use the Policy API. See our developer documentation to learn more <a href="https://cloud.google.com/identity/docs/reference/rest/v1/policies" target="_blank">about the Policy API</a>. You can also use <a href="https://github.com/GAM-team/GAM" target="_blank">GAM</a>, an open source tool for managing Workspace, which now supports the Policy API.</li><li><b>End users: </b>This is an admin-only capability.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Available now</li></ul></div><h3>Availability</h3><div><ul><li>Available to all Google Workspace customers and Workspace Individual subscribers</li></ul></div><h3>Resources</h3><div><ul><li>Google Cloud Identity Help: <a href="https://cloud.google.com/identity/docs/concepts/overview-policies" target="_blank">Policy API Overview</a></li><li>Google Cloud Identity Help: <a href="https://cloud.google.com/identity/docs/reference/rest/v1/policies" target="_blank">REST Resource: policies</a></li><li>Google Cloud Identity Help: <a href="https://docs.cloud.google.com/identity/docs/how-to/setup-policies" target="_blank">Setting up the Policy API</a></li><li>Google Cloud Identity Help: <a href="https://docs.cloud.google.com/identity/docs/how-to/list-get-policies" target="_blank">Listing and getting policies</a></li><li>Google Cloud Identity Help: <a href="https://docs.cloud.google.com/identity/docs/how-to/create-patch-delete-policies" target="_blank">Creating, patching, and deleting policies</a></li><li>Google Workspace Updates Blog: <a href="https://workspaceupdates.googleblog.com/2025/02/policy-api-general-availability.html" target="_blank">The Policy API is now generally available with support for auditing more security features</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Google Meet now supports sending 1080p HD video from ChromeOS meeting room hardware]]></title>
<description><![CDATA[We previously launched support for sending full HD video (1080p) in Meet on the web, and we’re now extending that capability to Google Meet room hardware based on ChromeOS.Google Meet will use full HD when the additional bandwidth is needed for sharp video from the room, such as:On large screens:...]]></description>
<link>https://tsecurity.de/de/3589199/it+betriebssysteme/web+tipps/google+meet+now+supports+sending+1080p+hd+video+from+chromeos+meeting+room+hardware/</link>
<pubDate>Thu, 11 Jun 2026 01:54:32 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[We previously launched <a href="https://workspaceupdates.googleblog.com/2024/06/google-meet-full-hd-meeting-recordings-and-more-devices.html" target="_blank">support for sending full HD video (1080p) in Meet on the web</a>, and we’re now extending that capability to Google Meet room hardware based on ChromeOS.<div><br></div><div>Google Meet will use full HD when the additional bandwidth is needed for sharp video from the room, such as:</div><div><br></div><div><ul><li><b>On large screens: </b>When others in the call are viewing the room on large monitors or TVs with a layout that makes 1080p necessary, such as full-screen views in Spotlight mode, 1:1 calls or dual-screen rooms. 
​</li><li><b>When someone pins your video: </b>If a person in the meeting "pins" the room, Meet will send the highest available quality.</li><li><b>​When the meeting is being recorded:</b> Recorded meetings use full HD from the room for the saved meeting video.</li></ul></div><div>​Full HD is available from devices that use a high-resolution camera and can handle the additional processing over a fast, stable internet connection. Meet will continue to automatically adjust video quality downwards if network constraints are detected to ensure a smooth meeting experience.</div><h3>Getting started</h3><div><ul><li><b>Admins:</b> There is no admin control for this feature.</li><li><b>End users:</b> There is no end user setting for this feature; the upgrade happens seamlessly in the background when conditions are met.</li></ul></div><h3>Rollout pace</h3><div><ul><li><a href="https://support.google.com/a/answer/172177" target="_blank">Rapid Release and Scheduled Release domains:</a> Available now</li></ul></div><h3>Availability</h3><div><ul><li>Available to all Google Workspace customers with Google Meet hardware devices</li></ul></div><h3>Resources</h3><div><ul><li>Google Meet Help: <a href="https://support.google.com/meet/answer/9292748" target="_blank">Learn how to view people in Google Meet</a></li><li>Google Meet Help: <a href="https://support.google.com/meet/answer/7501121" target="_blank">Pin or mute Google Meet participants</a></li><li>Google Meet hardware Help: <a href="https://support.google.com/meethardware/answer/9295022" target="_blank">Adjust your view of meeting participants in a Meet hardware room</a></li><li>Google Meet hardware Help: <a href="https://support.google.com/meethardware/answer/14806229" target="_blank">Google Meet hardware certification program for ChromeOS peripherals &amp; devices</a></li><li>Google Workspace Admin Help: <a href="https://knowledge.workspace.google.com/admin/meet/prepare-your-network-for-meet-meetings-and-live-streams" target="_blank">Prepare your network for Meet meetings &amp; live streams</a></li><li>Google Workspace Updates Blog: <a href="https://workspaceupdates.googleblog.com/2024/06/google-meet-full-hd-meeting-recordings-and-more-devices.html" target="_blank">Google Meet now supports high definition video for meeting recording and devices</a></li></ul></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[30+ CSS Cards]]></title>
<description><![CDATA[Bist du auf der Suche nach kreativen CSS Cards für deine Webseite? Dann bist du hier genau richtig! Entdecke eine vielfältige Sammlung an CSS Cards […]
The post 30+ CSS Cards appeared first at webdeasy.de.]]></description>
<link>https://tsecurity.de/de/2734866/it+betriebssysteme/web+tipps/30+css+cards/</link>
<pubDate>Mon, 21 Apr 2025 16:20:04 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Bist du auf der Suche nach kreativen CSS Cards für deine Webseite? Dann bist du hier genau richtig! Entdecke eine vielfältige Sammlung an CSS Cards […]</p>
<p>The post <a href="https://webdeasy.de/css-cards/">30+ CSS Cards</a> appeared first at <a href="https://webdeasy.de/">webdeasy.de</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Hello world!]]></title>
<description><![CDATA[Welcome to WordPress. This is your first post. Edit or delete it, then start writing!]]></description>
<link>https://tsecurity.de/de/2518228/it+betriebssysteme/web+tipps/hello+world/</link>
<pubDate>Fri, 27 Dec 2024 02:19:42 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Welcome to WordPress. This is your first post. Edit or delete it, then start writing!]]></content:encoded>
</item>
<item>
<title><![CDATA[WordPress CI/CD: Ultimative CI/CD Pipeline für WordPress]]></title>
<description><![CDATA[In diesem Tutorial zeige ich dir, wie du eine CI/CD Pipeline für deine WordPress Seite erstellen kannst. Und nicht nur das: Ich stelle dir meinen […]
The post WordPress CI/CD: Ultimative CI/CD Pipeline für WordPress appeared first at webdeasy.de.]]></description>
<link>https://tsecurity.de/de/2427305/it+betriebssysteme/web+tipps/wordpress+cicd+ultimative+cicd+pipeline+fuer+wordpress/</link>
<pubDate>Wed, 06 Nov 2024 12:06:08 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>In diesem Tutorial zeige ich dir, wie du eine CI/CD Pipeline für deine WordPress Seite erstellen kannst. Und nicht nur das: Ich stelle dir meinen […]</p>
<p>The post <a href="https://webdeasy.de/wordpress-ci-cd/">WordPress CI/CD: Ultimative CI/CD Pipeline für WordPress</a> appeared first at <a href="https://webdeasy.de/">webdeasy.de</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[WordPress CI/CD: Ultimative CI/CD Pipeline für WordPress]]></title>
<description><![CDATA[In diesem Tutorial zeige ich dir, wie du eine CI/CD Pipeline für deine WordPress Seite erstellen kannst. Und nicht nur das: Ich stelle dir meinen […]
The post WordPress CI/CD: Ultimative CI/CD Pipeline für WordPress appeared first at webdeasy.de.]]></description>
<link>https://tsecurity.de/de/2427306/it+betriebssysteme/web+tipps/wordpress+cicd+ultimative+cicd+pipeline+fuer+wordpress/</link>
<pubDate>Wed, 06 Nov 2024 12:06:08 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>In diesem Tutorial zeige ich dir, wie du eine CI/CD Pipeline für deine WordPress Seite erstellen kannst. Und nicht nur das: Ich stelle dir meinen […]</p>
<p>The post <a href="https://webdeasy.de/wordpress-ci-cd/">WordPress CI/CD: Ultimative CI/CD Pipeline für WordPress</a> appeared first at <a href="https://webdeasy.de/">webdeasy.de</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[How to fix „A JavaScript error occured in the main process“ (VSCode, Discord, …)]]></title>
<description><![CDATA[Bekommst du die Fehlermeldung „A JavaScript error occured in the main process“ oder ähnlich? Das passiert gelegentlich beim Öffnen von VSCode, Discord oder anderen Apps. […]
The post How to fix „A JavaScript error occured in the main process“ (VSCode, Discord, …) appeared first at webdeasy.de.]]></description>
<link>https://tsecurity.de/de/2315162/it+betriebssysteme/web+tipps/how+to+fix+a+javascript+error+occured+in+the+main+process+vscode+discord/</link>
<pubDate>Wed, 04 Sep 2024 12:05:37 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Bekommst du die Fehlermeldung „A JavaScript error occured in the main process“ oder ähnlich? Das passiert gelegentlich beim Öffnen von VSCode, Discord oder anderen Apps. […]</p>
<p>The post <a href="https://webdeasy.de/a-javascript-error-occured-how-to-fix/">How to fix „A JavaScript error occured in the main process“ (VSCode, Discord, …)</a> appeared first at <a href="https://webdeasy.de/">webdeasy.de</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Container Registry: So pushst du Docker Images zu GitHub]]></title>
<description><![CDATA[Die GitHub Container Registry ermöglicht dir das veröffentlichen bzw. hosten von privaten und öffentlichen Docker Images. Alles was dazu wichtig ist, erfährst du in diesem […]
The post GitHub Container Registry: So pushst du Docker Images zu GitHub appeared first at webdeasy.de.]]></description>
<link>https://tsecurity.de/de/2221684/it+betriebssysteme/web+tipps/github+container+registry+so+pushst+du+docker+images+zu+github/</link>
<pubDate>Wed, 10 Jul 2024 12:01:16 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Die GitHub Container Registry ermöglicht dir das veröffentlichen bzw. hosten von privaten und öffentlichen Docker Images. Alles was dazu wichtig ist, erfährst du in diesem […]</p>
<p>The post <a href="https://webdeasy.de/github-container-registry/">GitHub Container Registry: So pushst du Docker Images zu GitHub</a> appeared first at <a href="https://webdeasy.de/">webdeasy.de</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Rest API Testing: So testest du Rest APIs richtig!]]></title>
<description><![CDATA[Rest API Testing ist mit eine der wichtigsten Aufgaben beim Entwickeln von zuverlässigen und sicheren Rest APIs. Hier bekommst du eine komplette Übersicht was du […]
The post Rest API Testing: So testest du Rest APIs richtig! appeared first at webdeasy.de.]]></description>
<link>https://tsecurity.de/de/2172177/it+betriebssysteme/web+tipps/rest+api+testing+so+testest+du+rest+apis+richtig/</link>
<pubDate>Sun, 09 Jun 2024 11:46:17 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Rest API Testing ist mit eine der wichtigsten Aufgaben beim Entwickeln von zuverlässigen und sicheren Rest APIs. Hier bekommst du eine komplette Übersicht was du […]</p>
<p>The post <a href="https://webdeasy.de/rest-api-testing/">Rest API Testing: So testest du Rest APIs richtig!</a> appeared first at <a href="https://webdeasy.de/">webdeasy.de</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[FRITZ!Box DynDNS einrichten: So geht’s]]></title>
<description><![CDATA[In diesem Tutorial zeige ich dir, wie du DynDNS in der FRITZ!Box einrichtest. Durch das dynamische DNS kannst du das Problem der sich verändernden öffentlichen […]
The post FRITZ!Box DynDNS einrichten: So geht’s appeared first at webdeasy.de.]]></description>
<link>https://tsecurity.de/de/2160779/it+betriebssysteme/web+tipps/fritzbox+dyndns+einrichten+so+gehts/</link>
<pubDate>Sun, 02 Jun 2024 12:47:17 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>In diesem Tutorial zeige ich dir, wie du DynDNS in der FRITZ!Box einrichtest. Durch das dynamische DNS kannst du das Problem der sich verändernden öffentlichen […]</p>
<p>The post <a href="https://webdeasy.de/fritzbox-dyndns/">FRITZ!Box DynDNS einrichten: So geht’s</a> appeared first at <a href="https://webdeasy.de/">webdeasy.de</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[FRITZ!Box VPN einrichten: So funktioniert es]]></title>
<description><![CDATA[VPNs sind beliebter denn je. Aber wusstest du, dass du auch eine VPN auf der FRITZ!Box einrichten kannst? In dieser Schritt-für-Schritt Anleitung zeige ich dir, […]
The post FRITZ!Box VPN einrichten: So funktioniert es appeared first at webdeasy.de.]]></description>
<link>https://tsecurity.de/de/2160737/it+betriebssysteme/web+tipps/fritzbox+vpn+einrichten+so+funktioniert+es/</link>
<pubDate>Sun, 02 Jun 2024 11:47:26 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>VPNs sind beliebter denn je. Aber wusstest du, dass du auch eine VPN auf der FRITZ!Box einrichten kannst? In dieser Schritt-für-Schritt Anleitung zeige ich dir, […]</p>
<p>The post <a href="https://webdeasy.de/fritzbox-vpn/">FRITZ!Box VPN einrichten: So funktioniert es</a> appeared first at <a href="https://webdeasy.de/">webdeasy.de</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[30 CSS Background Pattern]]></title>
<description><![CDATA[Bei diesen 30 CSS Background Pattern (Hintergrundmustern) findest du sicher den perfekten Hintergrund für deine App oder Website. Ein CSS Background Pattern kannst du in […]
The post 30 CSS Background Pattern appeared first at webdeasy.de.]]></description>
<link>https://tsecurity.de/de/2159017/it+betriebssysteme/web+tipps/30+css+background+pattern/</link>
<pubDate>Fri, 31 May 2024 16:01:21 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Bei diesen 30 CSS Background Pattern (Hintergrundmustern) findest du sicher den perfekten Hintergrund für deine App oder Website. Ein CSS Background Pattern kannst du in […]</p>
<p>The post <a href="https://webdeasy.de/css-background-pattern/">30 CSS Background Pattern</a> appeared first at <a href="https://webdeasy.de/">webdeasy.de</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Docker vs. VM (virtuelle Maschine): Das sind die Unterschiede]]></title>
<description><![CDATA[Docker vs. VM (virtuelle Maschine): Was ist der Unterschied zwischen Docker und einer VM? Was haben sie gemeinsam und wann sollte man welche Virtualisierungs-Technologie einsetzen? […]
The post Docker vs. VM (virtuelle Maschine): Das sind die Unterschiede appeared first at webdeasy.de.]]></description>
<link>https://tsecurity.de/de/2158991/it+betriebssysteme/web+tipps/docker+vs+vm+virtuelle+maschine+das+sind+die+unterschiede/</link>
<pubDate>Fri, 31 May 2024 15:46:40 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Docker vs. VM (virtuelle Maschine): Was ist der Unterschied zwischen Docker und einer VM? Was haben sie gemeinsam und wann sollte man welche Virtualisierungs-Technologie einsetzen? […]</p>
<p>The post <a href="https://webdeasy.de/docker-vs-vm/">Docker vs. VM (virtuelle Maschine): Das sind die Unterschiede</a> appeared first at <a href="https://webdeasy.de/">webdeasy.de</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Docker Permission Denied – So behebst du den Fehler]]></title>
<description><![CDATA[Jeder Docker Befehl gibt nur „Permission Denied“ zurück? Keine Panik, in diesem Beitrag erfährst du wie du den Docker Permission Denied Fehler einfach beheben kannst. […]
The post Docker Permission Denied – So behebst du den Fehler appeared first at webdeasy.de.]]></description>
<link>https://tsecurity.de/de/2158825/it+betriebssysteme/web+tipps/docker+permission+denied+-+so+behebst+du+den+fehler/</link>
<pubDate>Fri, 31 May 2024 14:32:34 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Jeder Docker Befehl gibt nur „Permission Denied“ zurück? Keine Panik, in diesem Beitrag erfährst du wie du den Docker Permission Denied Fehler einfach beheben kannst. […]</p>
<p>The post <a href="https://webdeasy.de/docker-permission-denied/">Docker Permission Denied – So behebst du den Fehler</a> appeared first at <a href="https://webdeasy.de/">webdeasy.de</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[GitHub Actions: Tutorial für Einsteiger – Basics & Beispiele]]></title>
<description><![CDATA[In diesem Tutorial möchte ich dir GitHub Actions vorstellen und zeigen, wie du GitHub Actions einsetzten kannst, um CI/CD Pipelines zu erstellen, um langweilige, repetitive […]
The post GitHub Actions: Tutorial für Einsteiger – Basics & Beispiele appeared first at webdeasy.de.]]></description>
<link>https://tsecurity.de/de/2158739/it+betriebssysteme/web+tipps/github+actions+tutorial+fuer+einsteiger+-+basics+beispiele/</link>
<pubDate>Fri, 31 May 2024 13:47:15 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>In diesem Tutorial möchte ich dir GitHub Actions vorstellen und zeigen, wie du GitHub Actions einsetzten kannst, um CI/CD Pipelines zu erstellen, um langweilige, repetitive […]</p>
<p>The post <a href="https://webdeasy.de/github-actions-tutorial/">GitHub Actions: Tutorial für Einsteiger – Basics &amp; Beispiele</a> appeared first at <a href="https://webdeasy.de/">webdeasy.de</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[How to Clear Your Google Search Browsing History in 3 Easy Steps]]></title>
<description><![CDATA[One bad search result in your history can leave a lasting impact on your personal and professional life. That’s why you’ll need to take control of your browsing history on Google. Clearing your Google search history is an important step to take in order to protect your digital footprint online.  ...]]></description>
<link>https://tsecurity.de/de/1966424/it+betriebssysteme/web+tipps/how+to+clear+your+google+search+browsing+history+in+3+easy+steps/</link>
<pubDate>Fri, 22 Dec 2023 11:01:09 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>One bad search result in your history can leave a lasting impact on your personal and professional life. That’s why you’ll need to take control of your browsing history on Google. Clearing your Google search history is an important step to take in order to protect your digital footprint online.  By doing so, you not […]</p>
<p>The post <a rel="nofollow" href="https://www.addictivetips.com/web/how-to-delete-all-your-search-history-on-google/">How to Clear Your Google Search Browsing History in 3 Easy Steps</a> appeared first on <a rel="nofollow" href="https://www.addictivetips.com/">AddictiveTips</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Top Apps and Software for Budding Musicians]]></title>
<description><![CDATA[With the rise of many technological trends, all industries are reaping the benefits. Different technologies are omnipresent, from business, information technology, healthcare, and agriculture to entertainment. Even those inclined in…
The post Top Apps and Software for Budding Musicians appeared f...]]></description>
<link>https://tsecurity.de/de/1943225/it+betriebssysteme/web+tipps/top+apps+and+software+for+budding+musicians/</link>
<pubDate>Tue, 28 Nov 2023 14:46:28 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>With the rise of many technological trends, all industries are reaping the benefits. Different technologies are omnipresent, from business, information technology, healthcare, and agriculture to entertainment. Even those inclined in…</p>
<p>The post <a href="https://cyberspacehawk.com/top-apps-and-software-for-budding-musicians/">Top Apps and Software for Budding Musicians</a> appeared first on <a href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Top 9 Tips to Keep Yourself Safe When Gaming Online]]></title>
<description><![CDATA[Online gaming is the latest normal in today’s fast-paced digital world. The internet now offers vast media for entertainment, be it for video games or online casinos. Adversely, with the…
The post Top 9 Tips to Keep Yourself Safe When Gaming Online appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1935511/it+betriebssysteme/web+tipps/top+9+tips+to+keep+yourself+safe+when+gaming+online/</link>
<pubDate>Tue, 21 Nov 2023 11:31:01 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Online gaming is the latest normal in today’s fast-paced digital world. The internet now offers vast media for entertainment, be it for video games or online casinos. Adversely, with the…</p>
<p>The post <a href="https://cyberspacehawk.com/top-9-tips-to-keep-yourself-safe-when-gaming-online/">Top 9 Tips to Keep Yourself Safe When Gaming Online</a> appeared first on <a href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Docker „Permission Denied“ Fehler beheben]]></title>
<description><![CDATA[Jeder Docker Befehl gibt nur „Permission Denied“ zurück? Keine Panik, in diesem Beitrag erfährst du wie du den Docker Permission Denied Fehler einfach beheben kannst. […]
The post Docker „Permission Denied“ Fehler beheben appeared first at webdeasy.de.]]></description>
<link>https://tsecurity.de/de/1921449/it+betriebssysteme/web+tipps/docker+permission+denied+fehler+beheben/</link>
<pubDate>Wed, 08 Nov 2023 14:03:37 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Jeder Docker Befehl gibt nur „Permission Denied“ zurück? Keine Panik, in diesem Beitrag erfährst du wie du den Docker Permission Denied Fehler einfach beheben kannst. […]</p>
<p>The post <a rel="nofollow" href="https://webdeasy.de/fix-docker-permission-denied/">Docker „Permission Denied“ Fehler beheben</a> appeared first at <a rel="nofollow" href="https://webdeasy.de/">webdeasy.de</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Pros And Cons Of Getting A Tax Extension for Your Fintech Business]]></title>
<description><![CDATA[Tax season: the time of year many individuals and businesses dread. The weight of ensuring that everything is accurately documented and filed by the deadline can be overwhelming. Sometimes, life…
The post Pros And Cons Of Getting A Tax Extension for Your Fintech Business appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1915031/it+betriebssysteme/web+tipps/pros+and+cons+of+getting+a+tax+extension+for+your+fintech+business/</link>
<pubDate>Thu, 02 Nov 2023 15:01:05 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Tax season: the time of year many individuals and businesses dread. The weight of ensuring that everything is accurately documented and filed by the deadline can be overwhelming. Sometimes, life…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/pros-and-cons-of-getting-a-tax-extension-for-your-fintech-business/">Pros And Cons Of Getting A Tax Extension for Your Fintech Business</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[TOP 20 VSCode Extensions, um deine Produktivität zu steigern!]]></title>
<description><![CDATA[VSCode (Visual Studio Code) ist eine sehr weitverbreiteter und kostenlose Code-Editor. Durch unzählige VSCode Extensions kannst du in jeder beliebigen Sprache programmieren und noch viel […]
The post TOP 20 VSCode Extensions, um deine Produktivität zu steigern! appeared first at webdeasy.de.]]></description>
<link>https://tsecurity.de/de/1893092/it+betriebssysteme/web+tipps/top+20+vscode+extensions+um+deine+produktivitaet+zu+steigern/</link>
<pubDate>Fri, 20 Oct 2023 19:04:11 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>VSCode (Visual Studio Code) ist eine sehr weitverbreiteter und kostenlose Code-Editor. Durch unzählige VSCode Extensions kannst du in jeder beliebigen Sprache programmieren und noch viel […]</p>
<p>The post <a rel="nofollow" href="https://webdeasy.de/top-vscode-extensions/">TOP 20 VSCode Extensions, um deine Produktivität zu steigern!</a> appeared first at <a rel="nofollow" href="https://webdeasy.de/">webdeasy.de</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[ChatGPT und KI in der Softwareentwicklung (Best Practices)]]></title>
<description><![CDATA[Die Integration von Künstlicher Intelligenz (KI) in die Softwareentwicklung hat in den letzten Jahren an Bedeutung gewonnen. ChatGPT ist ein herausragendes Beispiel für diese Technologie. […]
The post ChatGPT und KI in der Softwareentwicklung (Best Practices) appeared first at webdeasy.de.]]></description>
<link>https://tsecurity.de/de/1893093/it+betriebssysteme/web+tipps/chatgpt+und+ki+in+der+softwareentwicklung+best+practices/</link>
<pubDate>Fri, 20 Oct 2023 19:04:11 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Die Integration von Künstlicher Intelligenz (KI) in die Softwareentwicklung hat in den letzten Jahren an Bedeutung gewonnen. ChatGPT ist ein herausragendes Beispiel für diese Technologie. […]</p>
<p>The post <a rel="nofollow" href="https://webdeasy.de/chatgpt-in-der-softwareentwicklung/">ChatGPT und KI in der Softwareentwicklung (Best Practices)</a> appeared first at <a rel="nofollow" href="https://webdeasy.de/">webdeasy.de</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[30 hübsche CSS Background Patterns (Collection)]]></title>
<description><![CDATA[Bei diesen 30 CSS Background Pattern (Hintergrundmustern) findest du sicher den perfekten Hintergrund für deine App oder Website. Die gezeigten Pens sind mit MIT lizensiert. Mehr Infos […]
The post 30 hübsche CSS Background Patterns (Collection) appeared first at webdeasy.de.]]></description>
<link>https://tsecurity.de/de/1893091/it+betriebssysteme/web+tipps/30+huebsche+css+background+patterns+collection/</link>
<pubDate>Fri, 20 Oct 2023 19:04:10 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Bei diesen 30 CSS Background Pattern (Hintergrundmustern) findest du sicher den perfekten Hintergrund für deine App oder Website. Die gezeigten Pens sind mit MIT lizensiert. Mehr Infos […]</p>
<p>The post <a rel="nofollow" href="https://webdeasy.de/css-background-patterns/">30 hübsche CSS Background Patterns (Collection)</a> appeared first at <a rel="nofollow" href="https://webdeasy.de/">webdeasy.de</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Will Roblox Work on the Chromebook?]]></title>
<description><![CDATA[Roblox is a platform where users can both play and make their own games. Many young people, especially teens, use Chromebooks to access the platform, which has seen rapid growth…
The post Will Roblox Work on the Chromebook? appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1893088/it+betriebssysteme/web+tipps/will+roblox+work+on+the+chromebook/</link>
<pubDate>Fri, 20 Oct 2023 19:04:09 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Roblox is a platform where users can both play and make their own games. Many young people, especially teens, use Chromebooks to access the platform, which has seen rapid growth…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/will-roblox-work-on-the-chromebook/">Will Roblox Work on the Chromebook?</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Was ist CI/CD? Definitionen, Konzepte und CI/CD Tools im Überblick]]></title>
<description><![CDATA[Was verbirgt sich hinter den Begriffen CI/CD, CI/CD Pipeline, CI/CD Tools und DevOps? In diesem Artikel erhältst du eine umfassende Erklärung aller Begriffe, Konzepte und […]
The post Was ist CI/CD? Definitionen, Konzepte und CI/CD Tools im Überblick appeared first at webdeasy.de.]]></description>
<link>https://tsecurity.de/de/1893089/it+betriebssysteme/web+tipps/was+ist+cicd+definitionen+konzepte+und+cicd+tools+im+ueberblick/</link>
<pubDate>Fri, 20 Oct 2023 19:04:09 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Was verbirgt sich hinter den Begriffen CI/CD, CI/CD Pipeline, CI/CD Tools und DevOps? In diesem Artikel erhältst du eine umfassende Erklärung aller Begriffe, Konzepte und […]</p>
<p>The post <a rel="nofollow" href="https://webdeasy.de/was-ist-ci-cd/">Was ist CI/CD? Definitionen, Konzepte und CI/CD Tools im Überblick</a> appeared first at <a rel="nofollow" href="https://webdeasy.de/">webdeasy.de</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Docker vs. virtuelle Maschinen (VM): Das sind die Unterschiede]]></title>
<description><![CDATA[Docker vs. Virtuelle Maschine: Was ist der Unterschied zwischen Docker und einer VM? Was haben sie gemeinsam und wann sollte man welche Virtualisierungstechnologie einsetzen? Das […]
The post Docker vs. virtuelle Maschinen (VM): Das sind die Unterschiede appeared first at webdeasy.de.]]></description>
<link>https://tsecurity.de/de/1893090/it+betriebssysteme/web+tipps/docker+vs+virtuelle+maschinen+vm+das+sind+die+unterschiede/</link>
<pubDate>Fri, 20 Oct 2023 19:04:09 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Docker vs. Virtuelle Maschine: Was ist der Unterschied zwischen Docker und einer VM? Was haben sie gemeinsam und wann sollte man welche Virtualisierungstechnologie einsetzen? Das […]</p>
<p>The post <a rel="nofollow" href="https://webdeasy.de/docker-vs-virtuelle-maschinen/">Docker vs. virtuelle Maschinen (VM): Das sind die Unterschiede</a> appeared first at <a rel="nofollow" href="https://webdeasy.de/">webdeasy.de</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[What is Minecraft PE [Pocket Edition] ? Different Than Normal?]]></title>
<description><![CDATA[Since its introduction in 2011, Minecraft has been played by millions of people all over the globe, making it one of the most played video games of all time. What…
The post What is Minecraft PE [Pocket Edition] ? Different Than Normal? appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1893087/it+betriebssysteme/web+tipps/what+is+minecraft+pe+pocket+edition+different+than+normal/</link>
<pubDate>Fri, 20 Oct 2023 19:04:08 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Since its introduction in 2011, Minecraft has been played by millions of people all over the globe, making it one of the most played video games of all time. What…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/what-is-minecraft-pe-pocket-edition-different-than-normal/">What is Minecraft PE [Pocket Edition] ? Different Than Normal?</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Minecraft Horror: How Minecraft Secretly is a Horror Game?]]></title>
<description><![CDATA[First impressions of Minecraft could have you thinking it’s just a basic sandbox game where you can dig around in blocks and construct things. You will realize “How Minecraft Secretly…
The post Minecraft Horror: How Minecraft Secretly is a Horror Game? appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1893083/it+betriebssysteme/web+tipps/minecraft+horror+how+minecraft+secretly+is+a+horror+game/</link>
<pubDate>Fri, 20 Oct 2023 19:04:07 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>First impressions of Minecraft could have you thinking it’s just a basic sandbox game where you can dig around in blocks and construct things. You will realize “How Minecraft Secretly…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/minecraft-horror-how-minecraft-secretly-is-a-horror-game/">Minecraft Horror: How Minecraft Secretly is a Horror Game?</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[How to Use Shaders in Minecraft PE? [Updated]]]></title>
<description><![CDATA[Minecraft has been one of the most played video games ever, and its community has been active for over a decade. Players have the freedom to roam a huge open…
The post How to Use Shaders in Minecraft PE? [Updated] appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1893084/it+betriebssysteme/web+tipps/how+to+use+shaders+in+minecraft+pe+updated/</link>
<pubDate>Fri, 20 Oct 2023 19:04:07 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Minecraft has been one of the most played video games ever, and its community has been active for over a decade. Players have the freedom to roam a huge open…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/how-to-use-shaders-in-minecraft-pe-updated/">How to Use Shaders in Minecraft PE? [Updated]</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Why is Minecraft’s Apk Not Working? 10 Reasons WITH Fixes!]]></title>
<description><![CDATA[Minecraft is a well-known sandbox video game where players can make their own virtual worlds and explore them. The Minecraft apk allows the game to be played on a variety…
The post Why is Minecraft’s Apk Not Working? 10 Reasons WITH Fixes! appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1893085/it+betriebssysteme/web+tipps/why+is+minecrafts+apk+not+working+10+reasons+with+fixes/</link>
<pubDate>Fri, 20 Oct 2023 19:04:07 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Minecraft is a well-known sandbox video game where players can make their own virtual worlds and explore them. The Minecraft apk allows the game to be played on a variety…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/why-is-minecrafts-apk-not-working-10-reasons-with-fixes/">Why is Minecraft’s Apk Not Working? 10 Reasons WITH Fixes!</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Where Are Apk Files Stored on Android? [Updated]]]></title>
<description><![CDATA[The APK file, or Android Package file, contains the whole of an Android programme, including its source code, resources, and manifest file. They function as a medium for the transfer…
The post Where Are Apk Files Stored on Android? [Updated] appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1893086/it+betriebssysteme/web+tipps/where+are+apk+files+stored+on+android+updated/</link>
<pubDate>Fri, 20 Oct 2023 19:04:07 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>The APK file, or Android Package file, contains the whole of an Android programme, including its source code, resources, and manifest file. They function as a medium for the transfer…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/where-are-apk-files-stored-on-android-updated/">Where Are Apk Files Stored on Android? [Updated]</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Minecraft’s Best Version: What’s the Best of Minecraft?]]></title>
<description><![CDATA[Minecraft is a famous sandbox video game that has been played by millions of players all over the globe for over a decade. It stood the test of time because…
The post Minecraft’s Best Version: What’s the Best of Minecraft? appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1893082/it+betriebssysteme/web+tipps/minecrafts+best+version+whats+the+best+of+minecraft/</link>
<pubDate>Fri, 20 Oct 2023 19:04:06 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Minecraft is a famous sandbox video game that has been played by millions of players all over the globe for over a decade. It stood the test of time because…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/minecrafts-best-version-whats-the-best-of-minecraft/">Minecraft’s Best Version: What’s the Best of Minecraft?</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Will Minecraft Legend Ever Be Free?]]></title>
<description><![CDATA[Since its release in 2011, Minecraft has become one of the most played video games worldwide. There has been much talk about whether or not Minecraft: Legends would be a…
The post Will Minecraft Legend Ever Be Free? appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1893080/it+betriebssysteme/web+tipps/will+minecraft+legend+ever+be+free/</link>
<pubDate>Fri, 20 Oct 2023 19:04:05 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Since its release in 2011, Minecraft has become one of the most played video games worldwide. There has been much talk about whether or not Minecraft: Legends would be a…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/will-minecraft-legend-ever-be-free/">Will Minecraft Legend Ever Be Free?</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Can Minecraft Java be Played With Xbox?]]></title>
<description><![CDATA[Minecraft has been active for more than a decade, and in that time it has amassed a tremendous fan base. A sizable and devoted audience follows it wherever it appears. The…
The post Can Minecraft Java be Played With Xbox? appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1893081/it+betriebssysteme/web+tipps/can+minecraft+java+be+played+with+xbox/</link>
<pubDate>Fri, 20 Oct 2023 19:04:05 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Minecraft has been active for more than a decade, and in that time it has amassed a tremendous fan base. A sizable and devoted audience follows it wherever it appears. The…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/can-minecraft-java-be-played-with-xbox/">Can Minecraft Java be Played With Xbox?</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[PHP MySQL Datenbank Klasse (einfach & sicher)]]></title>
<description><![CDATA[Mit dieser PHP MySQL Datenbank Klasse kannst du innerhalb weniger Sekunden eine Verbindung zu deiner Datenbank aufbauen und sichere SQL Queries ausführen. Einfach, flexibel und […]
The post PHP MySQL Datenbank Klasse (einfach & sicher) appeared first at webdeasy.de.]]></description>
<link>https://tsecurity.de/de/1893077/it+betriebssysteme/web+tipps/php+mysql+datenbank+klasse+einfach+sicher/</link>
<pubDate>Fri, 20 Oct 2023 19:04:04 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Mit dieser PHP MySQL Datenbank Klasse kannst du innerhalb weniger Sekunden eine Verbindung zu deiner Datenbank aufbauen und sichere SQL Queries ausführen. Einfach, flexibel und […]</p>
<p>The post <a rel="nofollow" href="https://webdeasy.de/php-mysql-datenbank-klasse/">PHP MySQL Datenbank Klasse (einfach &amp; sicher)</a> appeared first at <a rel="nofollow" href="https://webdeasy.de/">webdeasy.de</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Top 5 Games Which Became Most Popular in 2023 – Detailed Review!]]></title>
<description><![CDATA[As we enter in the final months of 2023, we can talk more clearly about the games that attracted the most attention. Some players are sticking to the ones that…
The post Top 5 Games Which Became Most Popular in 2023 – Detailed Review! appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1893078/it+betriebssysteme/web+tipps/top+5+games+which+became+most+popular+in+2023+-+detailed+review/</link>
<pubDate>Fri, 20 Oct 2023 19:04:04 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>As we enter in the final months of 2023, we can talk more clearly about the games that attracted the most attention. Some players are sticking to the ones that…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/top-5-games-which-became-most-popular-in-2023-detailed-review/">Top 5 Games Which Became Most Popular in 2023 – Detailed Review!</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Docker Init Befehl: Docker Projekte automatisch erstellen]]></title>
<description><![CDATA[Mit Docker Init kannst du im Handumdrehen ein Docker Projekt aufsetzen. Mit nur einem CLI Befehl docker init generierst du dir alles, was du benötigst. […]
The post Docker Init Befehl: Docker Projekte automatisch erstellen appeared first at webdeasy.de.]]></description>
<link>https://tsecurity.de/de/1893079/it+betriebssysteme/web+tipps/docker+init+befehl+docker+projekte+automatisch+erstellen/</link>
<pubDate>Fri, 20 Oct 2023 19:04:04 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Mit Docker Init kannst du im Handumdrehen ein Docker Projekt aufsetzen. Mit nur einem CLI Befehl docker init generierst du dir alles, was du benötigst. […]</p>
<p>The post <a rel="nofollow" href="https://webdeasy.de/docker-init-befehl/">Docker Init Befehl: Docker Projekte automatisch erstellen</a> appeared first at <a rel="nofollow" href="https://webdeasy.de/">webdeasy.de</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[How redBus improved their website's Interaction to Next Paint (INP) and increased sales by 7%]]></title>
<description><![CDATA[The web and its capabilities are evolving at a fast pace. You can now build rich and full-featured experiences on the web that can achieve much of what native applications can in terms of capabilities.
JavaScript is a primary driver for interactivity across the web, but if it's not used with care...]]></description>
<link>https://tsecurity.de/de/1886630/it+betriebssysteme/web+tipps/how+redbus+improved+their+websites+interaction+to+next+paint+inp+and+increased+sales+by+7/</link>
<pubDate>Wed, 24 May 2023 09:44:47 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>The web and its capabilities are evolving at a fast pace. You can now build rich and full-featured experiences on the web that can achieve much of what native applications can in terms of capabilities.</p>
<p>JavaScript is a primary driver for interactivity across the web, but if it's not used with care, interactions can feel sluggish, and lead users to perceive your website to be non-responsive or altogether broken. Thankfully, the <a href="https://web.dev/inp/">Interaction to Next Paint (INP)</a> metric was created to address this specific user experience problem.</p>
<p>INP measures all interactions made with a page during its lifecycle, and reports a single value that is representative of a website's speed in responding to user inputs. Simply put, if a page's INP is at or below the <a href="https://web.dev/inp/#what-is-a-good-inp-score">good threshold</a>, all interactions made with a page can be said to be reliably fast.</p>
<p><a href="https://www.redbus.in/" rel="noopener">redBus</a>, a bus booking and ticketing website based in India, undertook a substantial effort to improve their website's INP, even during the time when it was still considered an experimental metric. As a result of their efforts, they were able to increase sales by 7%, illustrating once again the relationship between web performance and business health. Here's what redBus did to improve their website's INP.</p>
<h2 id="top-goals">Top goals <a class="headline-link" href="https://web.dev/redbus-inp/#top-goals">#</a></h2>
<p>When redBus set out to optimize their website's INP, they had three goals in mind:</p>
<ol>
<li>Provide a better user experience for users by focusing on interaction latency regardless of network speed and device capabilities.</li>
<li>Optimize their website to keep interactions as fast as possible.</li>
<li>Ensure that responses from their API were as light as possible to ensure fast data transfer to the front end.</li>
</ol>
<h2 id="the-journey">The journey <a class="headline-link" href="https://web.dev/redbus-inp/#the-journey">#</a></h2>
<p>redBus categorized interaction latency in two ways:</p>
<ol>
<li>Interaction latency caused by blocking JavaScript on the client. When interactions use excessive JavaScript that blocks the main thread, rendering is delayed, and this affects a page's INP.</li>
<li>Network latency caused by API calls. While network activity is not something that INP measures, an interaction reliant on a call to a remote API can feel sluggish on slower networks, or if requests result in large responses.</li>
</ol>
<p>redBus was initially quite confident that the INP for their website would be good, but the <a href="https://en.wikipedia.org/wiki/Real_user_monitoring" rel="noopener">Real User Monitoring (RUM)</a> data for this metric at the 95th percentile told a different story.</p>
<h2 id="how-redbus-measured-inp">How redBus measured INP <a class="headline-link" href="https://web.dev/redbus-inp/#how-redbus-measured-inp">#</a></h2>
<p>redBus relied on the <a href="https://github.com/GoogleChrome/web-vitals" rel="noopener"><code>web-vitals</code> JavaScript library</a> built by Google to track not just INP, but all important user experience metrics for all pages across their website. In addition to the <code>web-vitals</code> JavaScript library, redBus used <a href="https://www.elastic.co/what-is/elk-stack" rel="noopener">ELK</a> to analyze INP data that was collected on the front end.</p>
<p>However, how you track your website's INP in <a href="https://web.dev/lab-and-field-data-differences/#field-data">the field</a> may be quite different from how redBus approached the problem. We highly recommend that you read about <a href="https://web.dev/find-slow-interactions-in-the-field/">how to find slow interactions in the field</a> to learn how to best to track INP for your websites, and subsequently <a href="https://web.dev/diagnose-slow-interactions-in-the-lab/">how to reproduce them in the lab</a> before you begin <a href="https://web.dev/optimize-inp/">optimizing interactions</a>.</p>
<p>Once redBus had a system in place for tracking INP, they were able to analyze the data in order to gain a better understanding of where slow interactivity was present.</p>
<figure>
  <img alt="A screenshot of the ELK logging system reporting INP values for analysis." decoding="async" height="287" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/s4JxEJgRhQAYZRSi7X3m.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/s4JxEJgRhQAYZRSi7X3m.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/s4JxEJgRhQAYZRSi7X3m.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/s4JxEJgRhQAYZRSi7X3m.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/s4JxEJgRhQAYZRSi7X3m.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/s4JxEJgRhQAYZRSi7X3m.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/s4JxEJgRhQAYZRSi7X3m.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/s4JxEJgRhQAYZRSi7X3m.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/s4JxEJgRhQAYZRSi7X3m.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/s4JxEJgRhQAYZRSi7X3m.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/s4JxEJgRhQAYZRSi7X3m.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/s4JxEJgRhQAYZRSi7X3m.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/s4JxEJgRhQAYZRSi7X3m.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/s4JxEJgRhQAYZRSi7X3m.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/s4JxEJgRhQAYZRSi7X3m.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/s4JxEJgRhQAYZRSi7X3m.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/s4JxEJgRhQAYZRSi7X3m.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/s4JxEJgRhQAYZRSi7X3m.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    A screenshot of the logging system used by redBus to analyze INP values collected from the field. (<a href="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/s4JxEJgRhQAYZRSi7X3m.png" rel="noopener" target="_blank">Click for a higher resolution version of this image</a>.)
  </figcaption>
</figure>
<h2 id="use-cases">Use cases <a class="headline-link" href="https://web.dev/redbus-inp/#use-cases">#</a></h2>
<p>When users search for fares on the redBus website, they can change the date on the search page to filter selected fares for the desired destination. The interaction to change the date on this page was slow, and was a cause of poor INP.</p>
<p>Additionally, when a user scrolls through fares, additional fares are lazy-loaded from the API. <a href="https://web.dev/inp/#whats-in-an-interaction">Though scrolling itself isn't factored in how INP is measured</a>, the <code>scroll</code> event listener itself schedules a lot of work that must run on the main thread. This work was causing contention on the main thread that increased interaction latency, leading to poor INP on the search page.</p>
<figure>
  <video autoplay="" loop="" muted="" playsinline="">
    <source src="https://web-dev.imgix.net/video/jL3OLOhcWUQDnR4XjewLBx4e3PC3/xcxqqKz4JaUO9yQlS3Ex.webm" type="video/webm" />
  </video>
  <figcaption>
    The lazy-loading behavior used to load additional fares from the API on scroll. (<a href="https://web-dev.imgix.net/video/jL3OLOhcWUQDnR4XjewLBx4e3PC3/xcxqqKz4JaUO9yQlS3Ex.webm" rel="noopener" target="_blank">Click for a higher resolution version of this video</a>.)
  </figcaption>
</figure>
<h2 id="how-redbus-optimized-inp-for-the-search-page">How redBus optimized INP for the search page <a class="headline-link" href="https://web.dev/redbus-inp/#how-redbus-optimized-inp-for-the-search-page">#</a></h2>
<p>To improve the search page's INP, redBus made several optimizations:</p>
<ul>
<li>The <a href="https://developer.mozilla.org/docs/Web/API/Element/scroll_event" rel="noopener"><code>scroll</code></a> event handler was <a href="https://web.dev/debounce-your-input-handlers/">debounced</a> in order to reduce the amount of times the event callback would fire in a given period. By lowering the frequency in which <code>scroll</code> event callback ran, the main thread was able to respond more quickly to user interactions on the search page.</li>
<li>The resulting rendering work was prioritized by using a <a href="https://developer.mozilla.org/docs/Web/API/window/requestAnimationFrame" rel="noopener"><code>requestAnimationFrame</code></a> callback. <code>requestAnimationFrame</code> tells the browser that the work in the callback must be done before the next frame.</li>
</ul>
<figure>
  <img alt="A screenshot of the performance panel in Chrome DevTools showing the redBus website firing scroll event callbacks which are not debounced. The result is that the main thread becomes blocked." decoding="async" height="500" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/seddeACyZ710UvE5s5L7.jpg?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/seddeACyZ710UvE5s5L7.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/seddeACyZ710UvE5s5L7.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/seddeACyZ710UvE5s5L7.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/seddeACyZ710UvE5s5L7.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/seddeACyZ710UvE5s5L7.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/seddeACyZ710UvE5s5L7.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/seddeACyZ710UvE5s5L7.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/seddeACyZ710UvE5s5L7.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/seddeACyZ710UvE5s5L7.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/seddeACyZ710UvE5s5L7.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/seddeACyZ710UvE5s5L7.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/seddeACyZ710UvE5s5L7.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/seddeACyZ710UvE5s5L7.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/seddeACyZ710UvE5s5L7.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/seddeACyZ710UvE5s5L7.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/seddeACyZ710UvE5s5L7.jpg?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/seddeACyZ710UvE5s5L7.jpg?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    Before: scroll handlers firing without debouncing applied to the event callback. A considerable number of blocking tasks on the main thread are present, which will delay interactions.
  </figcaption>
</figure>
<figure>
  <img alt="A screenshot of the performance panel in Chrome DevTools showing the redBus website firing scroll event callbacks which are debounced. The result is that the main thread is less blocked because the scroll event handlers fire far less frequently." decoding="async" height="500" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/op1p5FGFPsSi8cNU21WS.jpg?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/op1p5FGFPsSi8cNU21WS.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/op1p5FGFPsSi8cNU21WS.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/op1p5FGFPsSi8cNU21WS.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/op1p5FGFPsSi8cNU21WS.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/op1p5FGFPsSi8cNU21WS.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/op1p5FGFPsSi8cNU21WS.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/op1p5FGFPsSi8cNU21WS.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/op1p5FGFPsSi8cNU21WS.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/op1p5FGFPsSi8cNU21WS.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/op1p5FGFPsSi8cNU21WS.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/op1p5FGFPsSi8cNU21WS.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/op1p5FGFPsSi8cNU21WS.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/op1p5FGFPsSi8cNU21WS.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/op1p5FGFPsSi8cNU21WS.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/op1p5FGFPsSi8cNU21WS.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/op1p5FGFPsSi8cNU21WS.jpg?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/op1p5FGFPsSi8cNU21WS.jpg?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    After: scroll handlers firing with debouncing applied. The scroll event callbacks fire less frequently, giving the main thread more opportunities to respond to user interactions.
  </figcaption>
</figure>
<p>Additionally, the following further optimizations were made to the search results page:</p>
<ul>
<li>New batches of results were fetched on the second to last card on the search results page in order to improve the user experience and visual performance by triggering lazy loading earlier.</li>
<li>Fewer results were fetched on each network call during lazy loading. By reducing fetches from 30 to 10 results, a reduction in INP ranges at 870 to 900 down to 350 to 370 were observed.</li>
</ul>
<figure>
  <video autoplay="" loop="" muted="" playsinline="">
    <source src="https://web-dev.imgix.net/video/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ZjeONw0InjN2H5FEU0PM.webm" type="video/webm" />
  </video>
  <figcaption>
    The lazy-loading behavior used to load additional fares from the API on scroll. (<a href="https://web-dev.imgix.net/video/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ZjeONw0InjN2H5FEU0PM.webm" rel="noopener" target="_blank">Click for a higher resolution version of this video</a>.)
  </figcaption>
</figure>
<p>While these changes significantly improved the INP of the search page, there was still the problem where the <a href="https://developer.mozilla.org/docs/Web/API/HTMLElement/change_event" rel="noopener"><code>change</code></a> event on the search page's input fields would call an expensive reducer function to update the user interface. This resulted in unnecessary rerendering of the user interface, which affected the page's INP.</p>
<figure>
  <video autoplay="" loop="" muted="" playsinline="">
    <source src="https://web-dev.imgix.net/video/jL3OLOhcWUQDnR4XjewLBx4e3PC3/9A46NHqYLxgWLkFsKGmF.webm" type="video/webm" />
  </video>
  <figcaption>
    INP values reported in the console while the user types in an input field. The resulting INP value of 344 observed in a lab setting falls within the "need improvement" thresholds. (<a href="https://web-dev.imgix.net/video/jL3OLOhcWUQDnR4XjewLBx4e3PC3/9A46NHqYLxgWLkFsKGmF.webm" rel="noopener" target="_blank">Click for a higher resolution version of this video</a>.)
  </figcaption>
</figure>
<p>To optimize this interaction, redBus managed the state of input components locally and synced it with the <a href="https://react-redux.js.org/" rel="noopener">Redux</a> store only when an input's <a href="https://developer.mozilla.org/docs/Web/API/Element/blur_event" rel="noopener"><code>blur</code></a> event was fired. This change reduced the number of rerenders and eliminated unwanted rerendering of the user interface by calling the reducer less frequently.</p>
<figure>
  <video autoplay="" loop="" muted="" playsinline="">
    <source src="https://web-dev.imgix.net/video/jL3OLOhcWUQDnR4XjewLBx4e3PC3/gD8RNByfNP8IsjytGbXZ.webm" type="video/webm" />
  </video>
  <figcaption>
    Improved INP as a result of calling the reducer less frequently on an input field change. (<a href="https://web-dev.imgix.net/video/jL3OLOhcWUQDnR4XjewLBx4e3PC3/gD8RNByfNP8IsjytGbXZ.webm" rel="noopener" target="_blank">Click for a higher resolution version of this video</a>.)
  </figcaption>
</figure>
<p>With this change, the page's INP improved by 72%, resulting in a faster and smoother user experience that users are more likely to engage with.</p>
<h2 id="business-impact">Business impact <a class="headline-link" href="https://web.dev/redbus-inp/#business-impact">#</a></h2>
<p>The relationship between business health and page performance is well-known. Though INP is a relatively new metric compared to other Core Web Vitals, redBus observed better business outcomes by focusing on improving this important user-centric performance metric. <strong>The result was a 7% overall increase in sales.</strong></p>
<p>In short, INP helped to paint a picture of runtime performance issues on the redBus website. With the knowledge that there were improvements to be made, redBus was able to observe the problem, reproduce it, and use that crucial information to make optimizations that were beneficial to redBus and its business.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Economic Times quest for fixing INP]]></title>
<description><![CDATA[Interaction to Next Paint (INP) is a metric that assesses a website's responsiveness to user input. Good responsiveness means that a page is quick to respond to user interactions. The lower a page's INP is, the better it is able to respond to user interactions.

  .inp-mobile {
    display: inlin...]]></description>
<link>https://tsecurity.de/de/1886629/it+betriebssysteme/web+tipps/economic+times+quest+for+fixing+inp/</link>
<pubDate>Wed, 24 May 2023 09:44:46 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p><a href="https://web.dev/inp/">Interaction to Next Paint (INP)</a> is a metric that assesses a website's responsiveness to user input. Good responsiveness means that a page is quick to respond to user interactions. The lower a page's INP is, the better it is able to respond to user interactions.</p>
<style>
  .inp-mobile {
    display: inline;
  }

  .inp-desktop {
    display: none;
  }

  @media screen and (min-width: 640px) {
    .inp-mobile {
      display: none;
    }

    .inp-desktop {
      display: inline;
    }
  }
</style>
<figure>
  <svg title="A diagram of the INP thresholds. An INP at or below 200 milliseconds is considered good. Between 200 and 500 milliseconds suggests a page's responsiveness needs improvement. Anything over 500 milliseconds means that a page's responsiveness is poor." class="inp-mobile" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" x="0" y="0" viewBox="0 0 296.6 220.2" style="enable-background:new 0 0 296.6 220.2" xml:space="preserve"><style>.st0{fill:#2979FF} .st1{fill-rule:evenodd;clip-rule:evenodd;fill:#0CCE6B} .st2{fill:#191919} .st3{fill-rule:evenodd;clip-rule:evenodd;fill:#FFA400} .st4{fill-rule:evenodd;clip-rule:evenodd;fill:#FF4E42} @media screen and (prefers-color-scheme: light){.st2{fill:#191919}} [data-user-theme=light] .st2 {fill:#191919} @media screen and (prefers-color-scheme: dark){.st2{fill:#fff}} [data-user-theme=dark] .st2{fill:#fff}</style><path class="st0" d="M83.3 63V0h11.9v63H83.3zm26.3 0V0h13.8l25.3 42.2h.7l-.7-12.1V0h11.8v63H148l-26.8-44.6h-.7l.7 12.1V63h-11.6zm65.4 0V0h22.2c4.1 0 7.7.8 10.9 2.5s5.8 4 7.7 7 2.9 6.4 2.9 10.4c0 3.9-1 7.4-2.9 10.4s-4.5 5.4-7.7 7c-3.2 1.7-6.9 2.5-10.9 2.5h-15.6V28.6h15.9c2.1 0 3.8-.4 5.2-1.2s2.5-1.9 3.2-3.2c.7-1.3 1.1-2.8 1.1-4.3s-.4-2.9-1.1-4.2c-.7-1.3-1.8-2.3-3.2-3.2s-3.1-1.2-5.2-1.2h-10.7V63H175z"></path><path class="st1" d="M0 137.1h96v38.4H0v-38.4z"></path><path class="st2" d="M34 161c-.6 0-1.2-.1-1.8-.3-.5-.2-1-.5-1.4-.9-.4-.4-.7-.9-1-1.4-.2-.6-.3-1.1-.3-1.8 0-.6.1-1.2.3-1.8.2-.6.6-1 1-1.4.4-.4.9-.7 1.4-.9.5-.2 1.1-.3 1.8-.3s1.3.1 1.8.3c.6.2 1 .6 1.4 1l-.9.9c-.2-.2-.4-.4-.6-.5-.2-.1-.5-.3-.8-.3-.3-.1-.6-.1-.9-.1-.4 0-.8.1-1.2.2-.4.1-.7.4-1 .6-.3.3-.5.6-.7 1-.2.4-.2.8-.2 1.3s.1.9.2 1.3c.2.4.4.7.7 1 .3.3.6.5 1 .7.4.1.8.2 1.2.2.4 0 .8-.1 1.1-.2.3-.1.6-.3.9-.5.3-.2.5-.5.6-.8.2-.3.3-.6.3-1H34v-1.2h4.2v.7c0 .6-.1 1.2-.3 1.7-.2.5-.5.9-.9 1.3s-.8.6-1.3.8c-.5.3-1.1.4-1.7.4zm9.5 0c-.6 0-1.2-.1-1.8-.3-.5-.2-1-.5-1.4-1-.4-.4-.7-.9-.9-1.4-.2-.5-.3-1.1-.3-1.8 0-.6.1-1.2.3-1.8.2-.5.5-1 .9-1.4.4-.4.9-.7 1.4-1 .5-.2 1.1-.3 1.8-.3.6 0 1.2.1 1.8.3.5.2 1 .6 1.4 1 .4.4.7.9.9 1.4.2.5.3 1.1.3 1.8 0 .6-.1 1.2-.3 1.8-.2.5-.5 1-.9 1.4-.4.4-.9.7-1.4 1-.5.2-1.1.3-1.8.3zm0-1.2c.6 0 1.1-.1 1.6-.4.5-.3.8-.7 1.1-1.1.3-.5.4-1.1.4-1.7 0-.6-.1-1.2-.4-1.7-.3-.5-.7-.9-1.1-1.1-.5-.3-1-.4-1.6-.4-.6 0-1.1.1-1.6.4-.5.3-.8.7-1.1 1.1-.3.5-.4 1-.4 1.7 0 .6.1 1.2.4 1.7.3.5.7.9 1.1 1.1.5.3 1 .4 1.6.4zm9.9 1.2c-.6 0-1.2-.1-1.8-.3-.5-.2-1-.5-1.4-1-.4-.4-.7-.9-.9-1.4-.2-.5-.3-1.1-.3-1.8 0-.6.1-1.2.3-1.8.2-.5.5-1 .9-1.4.4-.4.9-.7 1.4-1 .5-.2 1.1-.3 1.8-.3.6 0 1.2.1 1.8.3.5.2 1 .6 1.4 1 .4.4.7.9.9 1.4.2.5.3 1.1.3 1.8 0 .6-.1 1.2-.3 1.8-.2.5-.5 1-.9 1.4-.4.4-.9.7-1.4 1-.6.2-1.2.3-1.8.3zm0-1.2c.6 0 1.1-.1 1.6-.4.5-.3.8-.7 1.1-1.1.3-.5.4-1.1.4-1.7 0-.6-.1-1.2-.4-1.7-.3-.5-.7-.9-1.1-1.1-.5-.3-1-.4-1.6-.4-.6 0-1.1.1-1.6.4-.5.3-.8.7-1.1 1.1-.3.5-.4 1-.4 1.7 0 .6.1 1.2.4 1.7.3.5.7.9 1.1 1.1.5.3 1 .4 1.6.4zm6 1.1v-8.6h2.8c.9 0 1.7.2 2.3.5.7.4 1.2.9 1.5 1.5.4.6.5 1.4.5 2.2 0 .8-.2 1.6-.5 2.2-.4.6-.9 1.2-1.5 1.5-.6.4-1.4.5-2.3.5h-2.8zm1.3-1.3h1.4c.6 0 1.2-.1 1.7-.4.5-.3.8-.6 1.1-1 .2-.5.4-1 .4-1.6 0-.6-.1-1.2-.4-1.6-.2-.5-.6-.8-1.1-1-.5-.3-1-.4-1.7-.4h-1.4v6z"></path><path class="st3" d="M96 137.1h105.6v38.4H96v-38.4z"></path><path class="st2" d="M130.8 153.9v-8.6h1.6l3.9 6.3h.1l-.1-1.7v-4.7h1.3v8.6h-1.4l-4.1-6.6h-.1l.1 1.7v5h-1.3zm8.7 0v-8.6h5.2v1.2h-3.9v6.1h3.9v1.2h-5.2zm.7-3.7V149h4.1v1.2h-4.1zm6.2 3.7v-8.6h5.2v1.2h-3.9v6.1h3.9v1.2h-5.2zm.7-3.7V149h4.1v1.2h-4.1zm6.1 3.7v-8.6h2.8c.9 0 1.7.2 2.3.5.7.4 1.2.9 1.5 1.5.4.6.5 1.4.5 2.2s-.2 1.6-.5 2.2c-.4.6-.9 1.2-1.5 1.5-.6.4-1.4.5-2.3.5h-2.8zm1.3-1.3h1.4c.6 0 1.2-.1 1.7-.4.5-.2.8-.6 1.1-1 .2-.5.4-1 .4-1.6 0-.6-.1-1.2-.4-1.6-.2-.5-.6-.8-1.1-1-.5-.2-1-.4-1.7-.4h-1.4v6zm9.9 1.4c-.5 0-.9-.1-1.3-.3-.4-.2-.8-.4-1.1-.8-.3-.4-.5-.8-.7-1.3l1.2-.5c.1.5.3.9.7 1.2.3.3.7.5 1.2.5.3 0 .5 0 .8-.1.2-.1.4-.2.6-.4s.2-.4.2-.7c0-.3-.1-.5-.2-.7-.1-.2-.3-.3-.6-.5s-.6-.3-1-.5l-.5-.2c-.2-.1-.5-.2-.7-.3-.2-.1-.5-.3-.7-.5-.2-.2-.4-.4-.5-.7-.1-.3-.2-.6-.2-.9 0-.4.1-.8.3-1.2.2-.4.5-.6.9-.8.4-.2.9-.3 1.4-.3.6 0 1 .1 1.4.3.4.2.7.4.9.7.2.3.4.5.4.8l-1.2.5c0-.2-.1-.3-.2-.5s-.3-.3-.5-.4c-.2-.1-.4-.2-.8-.2-.2 0-.5.1-.7.2-.2.1-.4.2-.5.4-.1.2-.2.3-.2.6s.1.6.4.8c.3.2.6.4 1.1.5l.6.2c.3.1.6.2.8.3.3.1.5.3.7.5.2.2.4.4.5.7.1.3.2.6.2 1s-.1.8-.3 1.2c-.2.3-.4.6-.7.8-.3.2-.6.3-.9.4s-.5.2-.8.2zM107 167.9v-8.6h1.3v8.6H107zm3.2 0v-8.6h1.8l2.5 6.5h.1l2.5-6.5h1.8v8.6h-1.3V163l.1-1.5h-.1l-2.5 6.4h-1l-2.5-6.4h-.1l.1 1.5v4.9h-1.4zm10.6 0v-8.6h3c.5 0 1 .1 1.4.3.4.2.8.5 1 .9.3.4.4.9.4 1.4 0 .5-.1 1-.4 1.4-.2.4-.6.7-1 .9-.4.2-.9.3-1.4.3h-2.2v-1.2h2.3c.3 0 .6-.1.8-.2.2-.1.4-.3.5-.5.1-.2.2-.4.2-.7 0-.2-.1-.4-.2-.7-.1-.2-.3-.4-.5-.5-.2-.1-.5-.2-.8-.2h-1.7v7.3h-1.4zm7.2 0v-8.6h3c.5 0 1 .1 1.4.3.4.2.7.5 1 .9.2.4.4.8.4 1.4 0 .3-.1.7-.2 1s-.3.6-.6.8c-.3.2-.6.4-1 .6-.4.1-.8.2-1.2.2h-2.1v-1.2h2.3c.3 0 .5-.1.7-.2.2-.1.4-.3.5-.5.1-.2.2-.5.2-.7 0-.2-.1-.5-.2-.7-.1-.2-.3-.4-.5-.5-.2-.1-.5-.2-.8-.2h-1.7v7.4H128zm2-4h1.5l2.7 3.9v.1h-1.5l-2.7-4zm9.3 4.1c-.6 0-1.2-.1-1.8-.3-.5-.2-1-.5-1.4-1-.4-.4-.7-.9-.9-1.4-.2-.5-.3-1.1-.3-1.8s.1-1.2.3-1.8c.2-.5.5-1 .9-1.4.4-.4.9-.7 1.4-1 .5-.2 1.1-.3 1.8-.3.6 0 1.2.1 1.8.3.5.2 1 .6 1.4 1 .4.4.7.9.9 1.4.2.5.3 1.1.3 1.8s-.1 1.2-.3 1.8c-.2.5-.5 1-.9 1.4-.4.4-.9.7-1.4 1-.6.2-1.2.3-1.8.3zm0-1.2c.6 0 1.1-.1 1.6-.4.5-.3.8-.7 1.1-1.1.3-.5.4-1.1.4-1.7 0-.6-.1-1.2-.4-1.7-.3-.5-.7-.9-1.1-1.1-.5-.3-1-.4-1.6-.4-.6 0-1.1.1-1.6.4-.5.3-.8.7-1.1 1.1-.3.5-.4 1-.4 1.7 0 .6.1 1.2.4 1.7.3.5.7.9 1.1 1.1.5.3 1 .4 1.6.4zm7.9 1.1-3-8.6h1.4l1.9 5.7.3 1h.1l.3-1 2-5.7h1.4l-3.1 8.6h-1.3zm5.6 0v-8.6h5.2v1.2h-3.9v6.1h3.9v1.2h-5.2zm.7-3.7V163h4.1v1.2h-4.1zm6.2 3.7v-8.6h1.8l2.5 6.5h.1l2.5-6.5h1.8v8.6H167V163l.1-1.5h-.1l-2.5 6.4h-1l-2.5-6.4h-.1l.1 1.5v4.9h-1.3zm10.6 0v-8.6h5.2v1.2h-3.9v6.1h3.9v1.2h-5.2zm.7-3.7V163h4.1v1.2H171zm6.1 3.7v-8.6h1.6l3.9 6.3h.1l-.1-1.7v-4.7h1.3v8.6h-1.4l-4.1-6.6h-.1l.1 1.7v5h-1.3zm10.5 0V160h1.3v7.9h-1.3zm-2.4-7.4v-1.2h6.1v1.2h-6.1z"></path><path class="st4" d="M200.6 137.1h96v38.4h-96v-38.4z"></path><path class="st2" d="M232.5 160.9v-8.6h3c.5 0 1 .1 1.4.3.4.2.8.5 1 .9.3.4.4.9.4 1.4 0 .5-.1 1-.4 1.4-.2.4-.6.7-1 .9-.4.2-.9.3-1.4.3h-2.2v-1.2h2.3c.3 0 .6-.1.8-.2.2-.1.4-.3.5-.5.1-.2.2-.4.2-.7 0-.2-.1-.4-.2-.7-.1-.2-.3-.4-.5-.5-.2-.1-.5-.2-.8-.2h-1.7v7.3h-1.4zm11 .1c-.6 0-1.2-.1-1.8-.3-.5-.2-1-.5-1.4-1-.4-.4-.7-.9-.9-1.4-.2-.5-.3-1.1-.3-1.8s.1-1.2.3-1.8c.2-.5.5-1 .9-1.4.4-.4.9-.7 1.4-1 .5-.2 1.1-.3 1.8-.3.6 0 1.2.1 1.8.3.5.2 1 .6 1.4 1 .4.4.7.9.9 1.4.2.5.3 1.1.3 1.8s-.1 1.2-.3 1.8c-.2.5-.5 1-.9 1.4-.4.4-.9.7-1.4 1-.5.2-1.1.3-1.8.3zm0-1.2c.6 0 1.1-.1 1.6-.4.5-.3.8-.7 1.1-1.1.3-.5.4-1.1.4-1.7 0-.6-.1-1.2-.4-1.7-.3-.5-.7-.9-1.1-1.1-.5-.3-1-.4-1.6-.4-.6 0-1.1.1-1.6.4-.5.3-.8.7-1.1 1.1-.3.5-.4 1-.4 1.7 0 .6.1 1.2.4 1.7.3.5.7.9 1.1 1.1.6.3 1.1.4 1.6.4zm9.9 1.2c-.6 0-1.2-.1-1.8-.3-.5-.2-1-.5-1.4-1-.4-.4-.7-.9-.9-1.4-.2-.5-.3-1.1-.3-1.8s.1-1.2.3-1.8c.2-.5.5-1 .9-1.4.4-.4.9-.7 1.4-1 .5-.2 1.1-.3 1.8-.3.6 0 1.2.1 1.8.3.5.2 1 .6 1.4 1 .4.4.7.9.9 1.4.2.5.3 1.1.3 1.8s-.1 1.2-.3 1.8c-.2.5-.5 1-.9 1.4-.4.4-.9.7-1.4 1-.6.2-1.1.3-1.8.3zm0-1.2c.6 0 1.1-.1 1.6-.4.5-.3.8-.7 1.1-1.1.3-.5.4-1.1.4-1.7 0-.6-.1-1.2-.4-1.7-.3-.5-.7-.9-1.1-1.1-.5-.3-1-.4-1.6-.4-.6 0-1.1.1-1.6.4-.5.3-.8.7-1.1 1.1-.3.5-.4 1-.4 1.7 0 .6.1 1.2.4 1.7.3.5.7.9 1.1 1.1.5.3 1 .4 1.6.4zm6 1.1v-8.6h3c.5 0 1 .1 1.4.3.4.2.7.5 1 .9.2.4.4.8.4 1.4 0 .3-.1.7-.2 1s-.3.6-.6.8c-.3.2-.6.4-1 .6-.4.1-.8.2-1.2.2h-2.1v-1.2h2.3c.3 0 .5-.1.7-.2.2-.1.4-.3.5-.5.1-.2.2-.5.2-.7 0-.2-.1-.5-.2-.7-.1-.2-.3-.4-.5-.5-.2-.1-.5-.2-.8-.2h-1.7v7.4h-1.2zm2-4h1.5l2.7 3.9v.1H264l-2.6-4zM178.1 219.9c-.5 0-1-.1-1.5-.3-.5-.2-1-.5-1.4-1-.4-.4-.7-1-.8-1.7l1.5-.6c.1.6.4 1 .8 1.4.4.4.9.5 1.4.5.6 0 1.1-.2 1.5-.6.4-.4.6-.9.6-1.5s-.2-1.1-.6-1.5c-.4-.4-.9-.6-1.5-.6-.4 0-.7.1-1 .2-.3.1-.5.4-.7.6l-1.7-.8.7-5.5h5.9v1.6h-4.5l-.4 2.9h.1c.2-.2.5-.3.8-.5.3-.1.7-.2 1.2-.2.6 0 1.2.2 1.7.5s1 .7 1.3 1.3c.3.5.5 1.2.5 1.9s-.2 1.3-.5 1.9c-.3.6-.8 1-1.3 1.3-.7.5-1.4.7-2.1.7zm9.9 0c-.7 0-1.3-.1-1.9-.4-.5-.3-1-.7-1.4-1.2-.4-.5-.7-1.1-.9-1.8-.2-.7-.3-1.4-.3-2.2 0-.8.1-1.6.3-2.2.2-.7.5-1.3.9-1.8s.9-.9 1.4-1.2c.6-.3 1.2-.5 1.9-.5s1.3.2 1.9.5c.6.3 1 .7 1.4 1.2.4.5.7 1.1.9 1.8.2.7.3 1.4.3 2.2 0 .8-.1 1.6-.3 2.2-.2.7-.5 1.3-.9 1.8s-.9.9-1.4 1.2c-.6.2-1.2.4-1.9.4zm.1-1.7c.6 0 1-.2 1.5-.5.4-.4.7-.9 1-1.5.2-.6.3-1.3.3-2.1s-.1-1.5-.3-2.1c-.2-.6-.5-1.1-1-1.5-.4-.4-.9-.5-1.5-.5s-1.1.2-1.5.5c-.4.4-.7.8-.9 1.5-.2.6-.3 1.3-.3 2.1s.1 1.5.3 2.1c.2.6.5 1.1.9 1.5.4.3.9.5 1.5.5zm10.5 1.7c-.7 0-1.3-.1-1.9-.4-.5-.3-1-.7-1.4-1.2-.4-.5-.7-1.1-.9-1.8-.2-.7-.3-1.4-.3-2.2 0-.8.1-1.6.3-2.2.2-.7.5-1.3.9-1.8s.9-.9 1.4-1.2c.6-.3 1.2-.5 1.9-.5s1.3.2 1.9.5c.6.3 1 .7 1.4 1.2.4.5.7 1.1.9 1.8.2.7.3 1.4.3 2.2 0 .8-.1 1.6-.3 2.2-.2.7-.5 1.3-.9 1.8s-.9.9-1.4 1.2c-.6.2-1.2.4-1.9.4zm0-1.7c.6 0 1-.2 1.5-.5.4-.4.7-.9 1-1.5.2-.6.3-1.3.3-2.1s-.1-1.5-.3-2.1c-.2-.6-.5-1.1-1-1.5-.4-.4-.9-.5-1.5-.5s-1.1.2-1.5.5c-.4.4-.7.8-.9 1.5-.2.6-.3 1.3-.3 2.1s.1 1.5.3 2.1c.2.6.5 1.1.9 1.5.4.3.9.5 1.5.5zm10 1.4v-8.2h1.6v1.1h.1c.2-.3.4-.5.6-.7.3-.2.6-.4.9-.5.3-.1.7-.2 1-.2.6 0 1.1.1 1.5.4.4.3.7.7.9 1.1.3-.4.6-.8 1.1-1.1.5-.3 1-.5 1.7-.5 1 0 1.7.3 2.1.9.5.6.7 1.4.7 2.3v5.2h-1.7v-4.9c0-.7-.1-1.1-.4-1.4-.3-.3-.7-.5-1.2-.5-.4 0-.7.1-1 .3-.3.2-.5.5-.7.9-.2.4-.2.8-.2 1.2v4.4h-1.7v-4.9c0-.7-.1-1.1-.4-1.4-.3-.3-.7-.5-1.2-.5-.4 0-.7.1-1 .3-.3.2-.5.5-.7.9-.2.4-.2.8-.2 1.2v4.4h-1.8zm17.2.3c-.6 0-1.2-.1-1.7-.3-.5-.2-.9-.5-1.2-.8-.3-.3-.5-.7-.7-1.1l1.5-.7c.2.4.5.8.8 1 .4.2.8.3 1.2.3.4 0 .8-.1 1.1-.2.3-.2.5-.4.5-.8 0-.2-.1-.4-.2-.6-.1-.1-.3-.3-.6-.4-.2-.1-.5-.2-.8-.2l-1-.2c-.4-.1-.8-.3-1.1-.5-.3-.2-.6-.5-.8-.8-.2-.3-.3-.7-.3-1.1 0-.5.1-.9.4-1.3.3-.4.7-.6 1.1-.8.5-.2 1-.3 1.6-.3.5 0 1 .1 1.4.2.4.1.8.3 1.1.6.3.3.6.6.8 1l-1.5.7c-.2-.4-.4-.6-.7-.8-.3-.1-.6-.2-1-.2s-.7.1-1 .2c-.3.2-.4.4-.4.6 0 .3.1.5.4.7.2.2.5.3.9.4l1.2.3c.8.2 1.4.5 1.8.9.4.4.6.9.6 1.5 0 .5-.2 1-.5 1.4-.3.4-.7.7-1.2.9-.6.2-1.1.4-1.7.4zM69 220v-1.6s.2-.1.4-.4c.2-.2.5-.5.8-.9l1.1-1.1 1-1c.3-.3.5-.6.7-.8.3-.3.5-.6.7-.8.2-.2.3-.5.4-.7.1-.2.1-.5.1-.8 0-.3-.1-.5-.2-.8-.1-.3-.3-.4-.6-.6-.3-.1-.6-.2-1-.2s-.7.1-1 .2c-.3.1-.5.3-.6.6-.1.2-.3.4-.3.7l-1.5-.6c.1-.3.2-.5.4-.8.2-.3.4-.5.7-.8.3-.3.6-.5 1-.6.4-.2.9-.3 1.4-.2.7 0 1.3.2 1.9.5.5.3.9.7 1.2 1.2.3.5.4 1 .4 1.6 0 .5-.1.9-.2 1.3-.2.4-.4.8-.7 1.2-.3.4-.5.7-.8 1l-.5.5c-.2.2-.4.5-.7.7l-.7.7-.6.6-.4.4h4.8v1.6H69zm13.2.2c-.7 0-1.3-.1-1.9-.4-.5-.3-1-.7-1.4-1.2-.4-.5-.7-1.1-.9-1.8-.2-.7-.3-1.4-.3-2.2 0-.8.1-1.6.3-2.2.2-.7.5-1.3.9-1.8s.9-.9 1.4-1.2c.6-.3 1.2-.5 1.9-.5s1.3.2 1.9.5c.6.3 1 .7 1.4 1.2.4.5.7 1.1.9 1.8.2.7.3 1.4.3 2.2 0 .8-.1 1.6-.3 2.2-.2.7-.5 1.3-.9 1.8s-.9.9-1.4 1.2c-.6.3-1.2.4-1.9.4zm0-1.6c.6 0 1-.2 1.5-.5.4-.4.7-.9 1-1.5.2-.6.3-1.3.3-2.1s-.1-1.5-.3-2.1c-.2-.6-.5-1.1-1-1.5-.4-.4-.9-.5-1.5-.5s-1.1.2-1.5.5c-.4.4-.7.8-.9 1.5-.2.6-.3 1.3-.3 2.1s.1 1.5.3 2.1c.2.6.5 1.1.9 1.5.4.3.9.5 1.5.5zm10.5 1.6c-.7 0-1.3-.1-1.9-.4-.5-.3-1-.7-1.4-1.2-.4-.5-.7-1.1-.9-1.8-.2-.7-.3-1.4-.3-2.2 0-.8.1-1.6.3-2.2.2-.7.5-1.3.9-1.8s.9-.9 1.4-1.2c.6-.3 1.2-.5 1.9-.5s1.3.2 1.9.5c.6.3 1 .7 1.4 1.2.4.5.7 1.1.9 1.8.2.7.3 1.4.3 2.2 0 .8-.1 1.6-.3 2.2-.2.7-.5 1.3-.9 1.8s-.9.9-1.4 1.2c-.6.3-1.2.4-1.9.4zm0-1.6c.6 0 1-.2 1.5-.5.4-.4.7-.9 1-1.5.2-.6.3-1.3.3-2.1s-.1-1.5-.3-2.1c-.2-.6-.5-1.1-1-1.5-.4-.4-.9-.5-1.5-.5s-1.1.2-1.5.5c-.4.4-.7.8-.9 1.5-.2.6-.3 1.3-.3 2.1s.1 1.5.3 2.1c.2.6.5 1.1.9 1.5.5.3 1 .5 1.5.5zm10 1.4v-8.2h1.6v1.1h.1c.2-.3.4-.5.6-.7.3-.2.6-.4.9-.5.3-.1.7-.2 1-.2.6 0 1.1.1 1.5.4.4.3.7.7.9 1.1.3-.4.6-.8 1.1-1.1.5-.3 1-.5 1.7-.5 1 0 1.7.3 2.1.9.5.6.7 1.4.7 2.3v5.2h-1.7v-4.9c0-.7-.1-1.1-.4-1.4-.3-.3-.7-.5-1.2-.5-.4 0-.7.1-1 .3-.3.2-.5.5-.7.9-.2.4-.2.8-.2 1.2v4.4H108v-4.9c0-.7-.1-1.1-.4-1.4-.3-.3-.7-.5-1.2-.5-.4 0-.7.1-1 .3-.3.2-.5.5-.7.9-.2.4-.2.8-.2 1.2v4.4h-1.8zm17.2.2c-.6 0-1.2-.1-1.7-.3-.5-.2-.9-.5-1.2-.8-.3-.3-.5-.7-.7-1.1l1.5-.7c.2.4.5.8.8 1 .4.2.8.3 1.2.3.4 0 .8-.1 1.1-.2.3-.2.5-.4.5-.8 0-.2-.1-.4-.2-.6-.1-.1-.3-.3-.6-.4-.2-.1-.5-.2-.8-.2l-1-.2c-.4-.1-.8-.3-1.1-.5-.3-.2-.6-.5-.8-.8-.2-.3-.3-.7-.3-1.1 0-.5.1-.9.4-1.3.3-.4.7-.6 1.1-.8.5-.2 1-.3 1.6-.3.5 0 1 .1 1.4.2.4.1.8.3 1.1.6.3.3.6.6.8 1l-1.5.7c-.2-.4-.4-.6-.7-.8-.3-.1-.6-.2-1-.2s-.7.1-1 .2c-.3.2-.4.4-.4.6 0 .3.1.5.4.7.2.2.5.3.9.4l1.2.3c.8.2 1.4.5 1.8.9.4.4.6.9.6 1.5 0 .5-.2 1-.5 1.4-.3.4-.7.7-1.2.9-.5.3-1.1.4-1.7.4zM42.4 96.3V82h1.7v14.3h-1.7zm4.6 0V86.1h1.6v1.5h.1c.3-.5.7-.9 1.3-1.3.6-.4 1.3-.5 2-.5 1.2 0 2.2.4 2.8 1.1.6.7 1 1.7 1 2.9v6.5h-1.7V90c0-1-.2-1.7-.7-2.1-.5-.4-1.1-.6-1.8-.6-.6 0-1.1.2-1.5.5-.4.3-.8.7-1 1.2-.2.5-.4 1-.4 1.6v5.7H47zm10-10.2h6v1.5h-6v-1.5zm1.8 7.5V83.3h1.7v10c0 .5.1.9.3 1.2s.6.4 1.1.4c.2 0 .4 0 .6-.1.2-.1.4-.2.5-.2v1.7c-.2.1-.4.1-.6.2-.2.1-.5.1-.8.1-.9 0-1.5-.2-2.1-.8-.5-.6-.7-1.3-.7-2.2zm10.3 3c-1 0-1.9-.2-2.6-.7-.8-.5-1.4-1.1-1.8-1.9-.4-.8-.6-1.7-.6-2.8 0-1 .2-1.9.6-2.7s1-1.5 1.7-2 1.6-.8 2.6-.8 1.9.2 2.6.7c.7.4 1.3 1.1 1.7 1.8.4.8.6 1.7.6 2.7v.5H65V90h7c0-.3-.1-.6-.2-.9-.1-.3-.3-.6-.5-.9-.2-.3-.6-.5-.9-.7-.4-.2-.8-.3-1.4-.3-.7 0-1.2.2-1.7.5s-.8.8-1.1 1.4c-.3.6-.4 1.2-.4 2 0 .9.2 1.6.5 2.2.3.6.8 1 1.3 1.3.5.3 1.1.4 1.7.4.8 0 1.4-.2 1.8-.5.5-.4.9-.8 1.2-1.3l1.4.7c-.4.8-1 1.4-1.7 1.9-.9.6-1.8.8-2.9.8zm6.7-.3V86.1h1.6v1.6h.1c.1-.4.4-.7.7-1 .3-.3.7-.5 1.1-.7s.8-.2 1.2-.2h.7c.2 0 .3.1.5.2v1.8c-.2-.1-.5-.2-.7-.2-.2-.1-.5-.1-.7-.1-.5 0-1 .1-1.4.4-.4.3-.7.7-1 1.1-.2.5-.4 1-.4 1.5v5.7h-1.7zm10.4.3c-.8 0-1.4-.1-2-.4s-1-.7-1.3-1.2c-.3-.5-.5-1.1-.5-1.8 0-.8.2-1.4.6-1.9.4-.5.9-.9 1.5-1.2.7-.3 1.4-.4 2.2-.4.4 0 .9 0 1.2.1s.7.2 1 .3c.3.1.5.2.7.3v-.6c0-.8-.3-1.4-.8-1.8-.5-.5-1.2-.7-2-.7-.6 0-1.1.1-1.6.4-.5.2-.9.6-1.1 1l-1.3-1c.3-.4.6-.7 1-1 .4-.3.9-.5 1.4-.7.5-.2 1.1-.2 1.6-.2 1.4 0 2.5.4 3.2 1.1.8.7 1.2 1.7 1.2 3v6.5h-1.6v-1.5h-.1c-.2.3-.4.6-.7.8s-.7.5-1.1.7c-.5.2-1 .2-1.5.2zm.1-1.5c.6 0 1.1-.1 1.6-.4.5-.3.9-.7 1.2-1.2.3-.5.5-1 .5-1.6-.3-.2-.7-.4-1.2-.5s-1-.2-1.5-.2c-1 0-1.7.2-2.1.6-.4.4-.7.9-.7 1.5s.2 1 .6 1.4 1 .4 1.6.4zm11.8 1.5c-1 0-1.9-.2-2.7-.7-.8-.5-1.4-1.1-1.8-1.9-.4-.8-.7-1.7-.7-2.8 0-1 .2-2 .7-2.8.4-.8 1.1-1.5 1.8-1.9.8-.5 1.7-.7 2.7-.7 1.1 0 2.1.3 2.8.8.7.5 1.3 1.2 1.6 2l-1.5.6c-.2-.6-.6-1.1-1.1-1.4-.5-.3-1.1-.5-1.8-.5-.6 0-1.2.2-1.7.5s-.9.8-1.2 1.4c-.3.6-.5 1.3-.5 2 0 .8.2 1.4.5 2 .3.6.7 1 1.2 1.4.5.3 1.1.5 1.7.5.7 0 1.3-.2 1.9-.5s.9-.8 1.2-1.4l1.5.6c-.3.8-.9 1.5-1.6 2s-1.9.8-3 .8zm5.5-10.5h6v1.5h-6v-1.5zm1.7 7.5V83.3h1.7v10c0 .5.1.9.3 1.2s.6.4 1.1.4c.2 0 .4 0 .6-.1.2-.1.4-.2.5-.2v1.7c-.2.1-.4.1-.6.2-.2.1-.5.1-.8.1-.9 0-1.5-.2-2.1-.8s-.7-1.3-.7-2.2zm6.5 2.7V86.1h1.7v10.2h-1.7zm.9-12c-.3 0-.6-.1-.9-.4s-.4-.5-.4-.9c0-.3.1-.6.4-.9.2-.2.5-.4.9-.4.3 0 .6.1.9.4.2.2.4.5.4.9 0 .3-.1.6-.4.9-.3.2-.6.4-.9.4zm8.1 12.3c-1 0-1.9-.2-2.7-.7-.8-.5-1.4-1.1-1.8-1.9-.4-.8-.7-1.7-.7-2.8 0-1 .2-1.9.7-2.8.4-.8 1.1-1.5 1.8-2 .8-.5 1.7-.7 2.7-.7 1 0 1.9.2 2.7.7.8.5 1.4 1.1 1.9 2s.7 1.7.7 2.7c0 1-.2 1.9-.7 2.8-.4.8-1.1 1.5-1.9 1.9-.8.6-1.7.8-2.7.8zm0-1.5c.6 0 1.2-.2 1.7-.5s1-.8 1.3-1.3c.3-.6.5-1.3.5-2.1s-.2-1.5-.5-2.1-.8-1-1.3-1.3c-.5-.3-1.1-.5-1.7-.5-.6 0-1.2.2-1.7.5s-1 .7-1.3 1.3-.5 1.3-.5 2.1.2 1.5.5 2.1c.3.6.8 1 1.3 1.3.5.4 1.1.5 1.7.5zm7 1.2V86.1h1.6v1.5h.1c.3-.5.7-.9 1.3-1.3.6-.4 1.3-.5 2-.5 1.2 0 2.2.4 2.8 1.1.6.7 1 1.7 1 2.9v6.5h-1.7V90c0-1-.2-1.7-.7-2.1-.5-.4-1.1-.6-1.8-.6-.6 0-1.1.2-1.5.5-.4.3-.8.7-1 1.2-.2.5-.4 1-.4 1.6v5.7h-1.7zM143 86.1h6v1.5h-6v-1.5zm1.7 7.5V83.3h1.7v10c0 .5.1.9.3 1.2s.6.4 1.1.4c.2 0 .4 0 .6-.1.2-.1.4-.2.5-.2v1.7c-.2.1-.4.1-.6.2-.2.1-.5.1-.8.1-.9 0-1.5-.2-2.1-.8-.4-.6-.7-1.3-.7-2.2zm10.5 3c-1 0-1.9-.2-2.7-.7-.8-.5-1.4-1.1-1.8-1.9-.4-.8-.7-1.7-.7-2.8 0-1 .2-1.9.7-2.8.4-.8 1.1-1.5 1.8-2 .8-.5 1.7-.7 2.7-.7 1 0 1.9.2 2.7.7.8.5 1.4 1.1 1.9 2 .4.8.7 1.7.7 2.7 0 1-.2 1.9-.7 2.8-.4.8-1.1 1.5-1.9 1.9-.8.6-1.7.8-2.7.8zm0-1.5c.6 0 1.2-.2 1.7-.5s1-.8 1.3-1.3c.3-.6.5-1.3.5-2.1s-.2-1.5-.5-2.1c-.3-.6-.8-1-1.3-1.3-.5-.3-1.1-.5-1.7-.5-.6 0-1.2.2-1.7.5s-1 .7-1.3 1.3c-.3.6-.5 1.3-.5 2.1s.2 1.5.5 2.1c.3.6.8 1 1.3 1.3.5.4 1.1.5 1.7.5zm12.2 1.2V82h2.1l7.2 11.4h.1l-.1-2.8V82h1.7v14.3h-1.8l-7.5-11.9h-.1l.1 2.8v9.2h-1.7zm18.2.3c-1 0-1.9-.2-2.6-.7-.8-.5-1.4-1.1-1.8-1.9-.4-.8-.6-1.7-.6-2.8 0-1 .2-1.9.6-2.7.4-.8 1-1.5 1.7-2s1.6-.8 2.6-.8 1.9.2 2.6.7c.7.4 1.3 1.1 1.7 1.8.4.8.6 1.7.6 2.7v.5h-8.8V90h7c0-.3-.1-.6-.2-.9-.1-.3-.3-.6-.5-.9-.2-.3-.6-.5-.9-.7-.4-.2-.8-.3-1.4-.3-.7 0-1.2.2-1.7.5s-.8.8-1.1 1.4c-.3.6-.4 1.2-.4 2 0 .9.2 1.6.5 2.2.3.6.8 1 1.3 1.3.5.3 1.1.4 1.7.4.8 0 1.4-.2 1.8-.5.5-.4.9-.8 1.2-1.3l1.4.7c-.4.8-1 1.4-1.7 1.9-1 .6-1.9.8-3 .8zm5.5-.3 4.1-5.9h.2l2.9-4.3h2l-4 5.6h-.1l-3.1 4.6h-2zm.1-10.2h1.9l3.2 4.5h.1l4 5.7h-2l-3-4.5h-.1l-4.1-5.7zm9.9 0h6v1.5h-6v-1.5zm1.8 7.5V83.3h1.7v10c0 .5.1.9.3 1.2.2.3.6.4 1.1.4.2 0 .4 0 .6-.1.2-.1.4-.2.5-.2v1.7c-.2.1-.4.1-.6.2-.2.1-.5.1-.8.1-.9 0-1.5-.2-2.1-.8-.4-.6-.7-1.3-.7-2.2zm11.2 2.7V82h4.8c.8 0 1.5.2 2.2.5.7.4 1.2.8 1.6 1.5.4.6.6 1.4.6 2.2 0 .8-.2 1.6-.6 2.2-.4.6-.9 1.1-1.6 1.5-.7.4-1.4.5-2.2.5H215v-1.6h4c.6 0 1-.1 1.4-.4.4-.3.7-.6.9-1 .2-.4.3-.8.3-1.2s-.1-.8-.3-1.2c-.2-.4-.5-.7-.9-1-.4-.3-.9-.4-1.4-.4h-3.2v12.7h-1.7zm14.1.3c-.8 0-1.4-.1-2-.4s-1-.7-1.3-1.2-.5-1.1-.5-1.8c0-.8.2-1.4.6-1.9s.9-.9 1.5-1.2c.7-.3 1.4-.4 2.2-.4.4 0 .9 0 1.2.1s.7.2 1 .3c.3.1.5.2.7.3v-.6c0-.8-.3-1.4-.8-1.8-.5-.5-1.2-.7-2-.7-.6 0-1.1.1-1.6.4-.5.2-.9.6-1.1 1l-1.3-1c.3-.4.6-.7 1-1 .4-.3.9-.5 1.4-.7s1.1-.2 1.6-.2c1.4 0 2.5.4 3.2 1.1.8.7 1.2 1.7 1.2 3v6.5h-1.6v-1.5h-.1c-.2.3-.4.6-.7.8s-.7.5-1.1.7c-.6.2-1 .2-1.5.2zm.1-1.5c.6 0 1.1-.1 1.6-.4.5-.3.9-.7 1.2-1.2.3-.5.5-1 .5-1.6-.3-.2-.7-.4-1.2-.5s-1-.2-1.5-.2c-1 0-1.7.2-2.1.6-.4.4-.7.9-.7 1.5s.2 1 .6 1.4 1 .4 1.6.4zm7.4 1.2V86.1h1.7v10.2h-1.7zm.8-12c-.3 0-.6-.1-.9-.4s-.4-.5-.4-.9c0-.3.1-.6.4-.9.2-.2.5-.4.9-.4.3 0 .6.1.9.4.2.2.4.5.4.9 0 .3-.1.6-.4.9-.2.2-.5.4-.9.4zm3.5 12V86.1h1.6v1.5h.1c.3-.5.7-.9 1.3-1.3.6-.4 1.3-.5 2-.5 1.2 0 2.2.4 2.8 1.1.6.7 1 1.7 1 2.9v6.5h-1.7V90c0-1-.2-1.7-.7-2.1-.5-.4-1.1-.6-1.8-.6-.6 0-1.1.2-1.5.5-.4.3-.8.7-1 1.2-.2.5-.4 1-.4 1.6v5.7H240zm10.1-10.2h6v1.5h-6v-1.5zm1.7 7.5V83.3h1.7v10c0 .5.1.9.3 1.2s.6.4 1.1.4c.2 0 .4 0 .6-.1.2-.1.4-.2.5-.2v1.7c-.2.1-.4.1-.6.2-.2.1-.5.1-.8.1-.9 0-1.5-.2-2.1-.8s-.7-1.3-.7-2.2zM96 172.8c-2.4 0-4.3 1.9-4.3 4.3 0 2 1.4 3.7 3.3 4.2v20.1h2v-20.1c1.9-.5 3.3-2.1 3.3-4.2 0-2.3-1.9-4.3-4.3-4.3zM201.6 172.6c-2.4 0-4.3 1.9-4.3 4.3 0 2 1.4 3.7 3.3 4.2v19.8h2v-19.8c1.9-.5 3.3-2.1 3.3-4.2 0-2.4-1.9-4.3-4.3-4.3z"></path></svg>
  <svg title="A diagram of the INP thresholds. An INP at or below 200 milliseconds is considered good. Between 200 and 500 milliseconds suggests a page's responsiveness needs improvement. Anything over 500 milliseconds means that a page's responsiveness is poor." class="inp-desktop" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" x="0" y="0" viewBox="0 0 658.4 113.6" style="enable-background:new 0 0 658.4 113.6" xml:space="preserve"><style>.st0{fill: #2979FF} v.st1{fill-rule: evenodd;clip-rule: evenodd;fill: #0CCE6B} .st2 {fill: #191919} .st3{fill-rule: evenodd;clip-rule: evenodd;fill: #FFA400} .st4{fill-rule: evenodd;clip-rule: evenodd;fill: #FF4E42} @media screen and (prefers-color-scheme: light){.st2{fill: #191919}} @media screen and (prefers-color-scheme: dark){.st2{fill: #fff}} [data-user-theme=dark] .st2{fill: #fff}</style><path class="st0" d="M30.2 68.7V0h13v68.7h-13zm28.7 0V0H74l27.7 46.1h.8l-.8-13.2V0h12.9v68.7H101L71.7 20.1h-.8l.8 13.2v35.4H58.9zm71.3 0V0h24.2c4.4 0 8.4.9 11.9 2.7 3.5 1.8 6.3 4.4 8.4 7.6 2.1 3.3 3.1 7 3.1 11.3 0 4.3-1 8.1-3.1 11.4-2.1 3.3-4.9 5.8-8.4 7.7-3.5 1.8-7.5 2.7-11.9 2.7h-17V31.2h17.4c2.2 0 4.1-.4 5.7-1.3 1.5-.9 2.7-2.1 3.5-3.5.8-1.4 1.2-3 1.2-4.7 0-1.7-.4-3.2-1.2-4.6-.8-1.4-1.9-2.6-3.5-3.5-1.5-.9-3.4-1.3-5.7-1.3h-11.6v56.5h-13z"></path><path class="st1" d="M303.2 14.9h115.2v43.2H303.2V14.9z"></path><path class="st2" d="M345.3 41.5c-.7 0-1.3-.1-1.9-.4-.6-.2-1.1-.6-1.6-1s-.8-1-1.1-1.6c-.3-.6-.4-1.3-.4-2s.1-1.4.4-2c.3-.6.6-1.1 1.1-1.6.5-.5 1-.8 1.6-1 .6-.2 1.2-.4 1.9-.4s1.4.1 2 .4c.6.2 1.1.6 1.6 1.1l-1 1c-.2-.2-.4-.4-.7-.6-.3-.2-.5-.3-.9-.4-.3-.1-.6-.1-1-.1-.5 0-.9.1-1.3.3-.4.2-.8.4-1.1.7-.3.3-.6.7-.8 1.1-.2.4-.3.9-.3 1.5s.1 1 .3 1.5c.2.4.5.8.8 1.1.3.3.7.6 1.1.7.4.2.9.2 1.3.2s.8-.1 1.2-.2c.4-.1.7-.3 1-.5.3-.2.5-.5.7-.8.2-.3.3-.7.3-1.1h-3.3v-1.3h4.6v.8c0 .7-.1 1.3-.4 1.9-.2.6-.6 1-1 1.5-.4.4-.9.7-1.5.9-.3.2-.9.3-1.6.3zm10.5 0c-.7 0-1.4-.1-2-.4-.6-.3-1.1-.6-1.6-1.1-.4-.5-.8-1-1-1.6-.2-.6-.4-1.2-.4-1.9s.1-1.3.4-1.9c.2-.6.6-1.1 1-1.6s1-.8 1.6-1.1c.6-.3 1.3-.4 2-.4s1.4.1 2 .4c.6.2 1.1.6 1.6 1.1.5.5.8 1 1 1.6.2.6.4 1.2.4 1.9s-.1 1.3-.4 1.9c-.2.6-.6 1.1-1 1.6s-1 .8-1.6 1.1-1.2.4-2 .4zm0-1.4c.6 0 1.2-.2 1.8-.5.5-.3.9-.7 1.2-1.3s.5-1.2.5-1.9-.2-1.3-.5-1.9-.7-1-1.2-1.3c-.5-.3-1.1-.5-1.8-.5-.6 0-1.2.2-1.8.5-.5.3-.9.7-1.2 1.3s-.5 1.2-.5 1.9.2 1.3.5 1.9.7 1 1.2 1.3c.6.4 1.2.5 1.8.5zm11 1.4c-.7 0-1.4-.1-2-.4-.6-.3-1.1-.6-1.6-1.1-.4-.5-.8-1-1-1.6-.2-.6-.4-1.2-.4-1.9s.1-1.3.4-1.9c.2-.6.6-1.1 1-1.6s1-.8 1.6-1.1c.6-.3 1.3-.4 2-.4s1.4.1 2 .4c.6.2 1.1.6 1.6 1.1.5.5.8 1 1 1.6.2.6.4 1.2.4 1.9s-.1 1.3-.4 1.9c-.2.6-.6 1.1-1 1.6s-1 .8-1.6 1.1-1.3.4-2 .4zm0-1.4c.6 0 1.2-.2 1.8-.5.5-.3.9-.7 1.2-1.3s.5-1.2.5-1.9-.2-1.3-.5-1.9-.7-1-1.2-1.3c-.5-.3-1.1-.5-1.8-.5-.6 0-1.2.2-1.8.5-.5.3-.9.7-1.2 1.3s-.5 1.2-.5 1.9.2 1.3.5 1.9.7 1 1.2 1.3c.6.4 1.2.5 1.8.5zm6.6 1.2v-9.5h3c1 0 1.9.2 2.6.6.7.4 1.3 1 1.7 1.7s.6 1.5.6 2.5c0 .9-.2 1.8-.6 2.5s-1 1.3-1.7 1.7c-.7.4-1.6.6-2.6.6h-3zm1.5-1.4h1.5c.7 0 1.3-.1 1.8-.4.5-.3.9-.7 1.2-1.2.3-.5.4-1.1.4-1.8s-.1-1.3-.4-1.8c-.3-.5-.7-.9-1.2-1.2-.5-.3-1.1-.4-1.8-.4h-1.5v6.8z"></path><path class="st3" d="M418.4 14.9h124.8v43.2H418.4V14.9z"></path><path class="st2" d="M460.8 33.3v-9.5h1.7l4.3 7h.1l-.1-1.8v-5.2h1.5v9.5h-1.5l-4.5-7.4h-.1l.1 1.8v5.5h-1.5zm9.7 0v-9.5h5.8v1.4H472V32h4.3v1.4h-5.8zm.7-4.1v-1.4h4.6v1.4h-4.6zm6.9 4.1v-9.5h5.8v1.4h-4.3V32h4.3v1.4h-5.8zm.8-4.1v-1.4h4.6v1.4h-4.6zm6.8 4.1v-9.5h3c1 0 1.9.2 2.6.6.7.4 1.3 1 1.7 1.7s.6 1.5.6 2.5c0 .9-.2 1.8-.6 2.5s-1 1.3-1.7 1.7c-.7.4-1.6.6-2.6.6h-3zm1.5-1.4h1.5c.7 0 1.3-.1 1.8-.4.5-.3.9-.7 1.2-1.2.3-.5.4-1.1.4-1.8s-.1-1.3-.4-1.8c-.3-.5-.7-.9-1.2-1.2-.5-.3-1.1-.4-1.8-.4h-1.5v6.8zm10.9 1.6c-.5 0-1-.1-1.5-.3-.5-.2-.9-.5-1.2-.9-.3-.4-.6-.9-.8-1.5l1.4-.6c.1.5.4.9.8 1.3.4.3.8.5 1.3.5.3 0 .6-.1.8-.2.3-.1.5-.3.6-.5.2-.2.2-.5.2-.8 0-.3-.1-.5-.2-.7-.1-.2-.3-.4-.6-.5-.3-.2-.7-.3-1.1-.5l-.6-.2c-.3-.1-.5-.2-.8-.4-.3-.1-.5-.3-.7-.5-.2-.2-.4-.5-.5-.7-.1-.3-.2-.6-.2-1 0-.5.1-.9.4-1.3.2-.4.6-.7 1-.9.4-.2 1-.4 1.6-.4.6 0 1.1.1 1.5.3.4.2.7.5 1 .8.2.3.4.6.5.9l-1.3.6c-.1-.2-.2-.4-.3-.5-.1-.2-.3-.3-.5-.4-.2-.1-.5-.2-.8-.2-.3 0-.5.1-.8.2-.2.1-.4.2-.6.4-.1.2-.2.4-.2.6 0 .3.1.6.4.8s.7.4 1.2.6l.6.2c.3.1.6.2.9.4.3.1.6.3.8.6.2.2.4.5.6.8.1.3.2.7.2 1.2s-.1.9-.3 1.3c-.2.4-.4.6-.8.9-.3.2-.7.4-1 .5-.3 0-.7.1-1 .1zM434.4 49.3v-9.5h1.5v9.5h-1.5zm3.6 0v-9.5h2l2.8 7.3h.1l2.8-7.3h2v9.5h-1.4v-5.4l.1-1.7h-.1l-2.8 7.1h-1.2l-2.8-7.1h-.1l.1 1.7v5.4H438zm11.7 0v-9.5h3.3c.6 0 1.1.1 1.6.4.5.2.9.6 1.1 1 .3.4.4.9.4 1.5s-.1 1.1-.4 1.5c-.3.4-.7.8-1.1 1-.5.2-1 .4-1.6.4h-2.5v-1.4h2.5c.4 0 .7-.1.9-.2.2-.1.4-.3.5-.6.1-.2.2-.5.2-.8 0-.3-.1-.5-.2-.7-.1-.2-.3-.4-.5-.6-.2-.2-.5-.2-.9-.2h-1.8v8.2h-1.5zm8 0v-9.5h3.3c.6 0 1.1.1 1.6.4.5.2.8.6 1.1 1s.4.9.4 1.5c0 .4-.1.8-.2 1.1s-.4.7-.7.9c-.3.3-.6.5-1 .6-.4.1-.9.2-1.4.2h-2.3v-1.3h2.5c.3 0 .6-.1.8-.2.2-.1.4-.3.6-.6.2-.2.2-.5.2-.8 0-.3-.1-.5-.2-.7-.1-.2-.3-.4-.5-.6-.2-.1-.5-.2-.9-.2h-1.9v8.2h-1.4zm2.2-4.4h1.7l3 4.3v.1h-1.7l-3-4.4zm10.3 4.6c-.7 0-1.4-.1-2-.4-.6-.3-1.1-.6-1.6-1.1-.4-.5-.8-1-1-1.6-.2-.6-.4-1.2-.4-1.9s.1-1.3.4-1.9c.2-.6.6-1.1 1-1.6s1-.8 1.6-1.1c.6-.3 1.3-.4 2-.4s1.4.1 2 .4c.6.2 1.1.6 1.6 1.1.5.5.8 1 1 1.6.2.6.4 1.2.4 1.9s-.1 1.3-.4 1.9c-.2.6-.6 1.1-1 1.6s-1 .8-1.6 1.1c-.6.3-1.2.4-2 .4zm0-1.4c.6 0 1.2-.2 1.8-.5.5-.3.9-.7 1.2-1.3.3-.5.5-1.2.5-1.9s-.2-1.3-.5-1.9c-.3-.5-.7-1-1.2-1.3-.5-.3-1.1-.5-1.8-.5s-1.2.2-1.8.5c-.5.3-.9.7-1.2 1.3-.3.5-.5 1.2-.5 1.9s.2 1.3.5 1.9c.3.5.7 1 1.2 1.3.6.4 1.2.5 1.8.5zm8.8 1.2-3.4-9.5h1.6l2.2 6.3.3 1.1h.1l.4-1.1 2.2-6.3h1.6l-3.5 9.5H479zm6.2 0v-9.5h5.8v1.4h-4.3V48h4.3v1.4h-5.8zm.8-4.1v-1.4h4.6v1.4H486zm6.8 4.1v-9.5h2l2.8 7.3h.1l2.8-7.3h2v9.5H501v-5.4l.1-1.7h-.1l-2.8 7.1H497l-2.8-7.1h-.1l.1 1.7v5.4h-1.4zm11.8 0v-9.5h5.8v1.4h-4.3V48h4.3v1.4h-5.8zm.8-4.1v-1.4h4.6v1.4h-4.6zm6.8 4.1v-9.5h1.7l4.3 7h.1l-.1-1.8v-5.2h1.5v9.5h-1.5l-4.5-7.4h-.1l.1 1.8v5.5h-1.5zm11.7 0v-8.8h1.5v8.8h-1.5zm-2.7-8.2v-1.4h6.8v1.4h-6.8z"></path><path class="st4" d="M543.2 14.9h115.2v43.2H543.2V14.9z"></path><path class="st2" d="M582.9 41.3v-9.5h3.3c.6 0 1.1.1 1.6.4.5.2.9.6 1.1 1 .3.4.4.9.4 1.5s-.1 1.1-.4 1.5c-.3.4-.7.8-1.1 1-.5.2-1 .4-1.6.4h-2.5v-1.4h2.5c.4 0 .7-.1.9-.2.2-.1.4-.3.5-.6.1-.2.2-.5.2-.8 0-.3-.1-.5-.2-.7-.1-.2-.3-.4-.5-.6-.2-.2-.5-.2-.9-.2h-1.8v8.2h-1.5zm12.3.2c-.7 0-1.4-.1-2-.4-.6-.3-1.1-.6-1.6-1.1-.4-.5-.8-1-1-1.6-.2-.6-.4-1.2-.4-1.9s.1-1.3.4-1.9c.2-.6.6-1.1 1-1.6s1-.8 1.6-1.1c.6-.3 1.3-.4 2-.4s1.4.1 2 .4c.6.2 1.1.6 1.6 1.1.5.5.8 1 1 1.6.2.6.4 1.2.4 1.9s-.1 1.3-.4 1.9c-.2.6-.6 1.1-1 1.6s-1 .8-1.6 1.1c-.7.3-1.3.4-2 .4zm0-1.4c.6 0 1.2-.2 1.8-.5.5-.3.9-.7 1.2-1.3.3-.5.5-1.2.5-1.9s-.2-1.3-.5-1.9c-.3-.5-.7-1-1.2-1.3-.5-.3-1.1-.5-1.8-.5-.6 0-1.2.2-1.8.5-.5.3-.9.7-1.2 1.3-.3.5-.5 1.2-.5 1.9s.2 1.3.5 1.9c.3.5.7 1 1.2 1.3.6.4 1.1.5 1.8.5zm10.9 1.4c-.7 0-1.4-.1-2-.4-.6-.3-1.1-.6-1.6-1.1-.4-.5-.8-1-1-1.6-.2-.6-.4-1.2-.4-1.9s.1-1.3.4-1.9c.2-.6.6-1.1 1-1.6s1-.8 1.6-1.1c.6-.3 1.3-.4 2-.4s1.4.1 2 .4c.6.2 1.1.6 1.6 1.1.5.5.8 1 1 1.6.2.6.4 1.2.4 1.9s-.1 1.3-.4 1.9c-.2.6-.6 1.1-1 1.6s-1 .8-1.6 1.1c-.6.3-1.3.4-2 .4zm0-1.4c.6 0 1.2-.2 1.8-.5.5-.3.9-.7 1.2-1.3.3-.5.5-1.2.5-1.9s-.2-1.3-.5-1.9c-.3-.5-.7-1-1.2-1.3-.5-.3-1.1-.5-1.8-.5s-1.2.2-1.8.5c-.5.3-.9.7-1.2 1.3-.3.5-.5 1.2-.5 1.9s.2 1.3.5 1.9c.3.5.7 1 1.2 1.3.6.4 1.2.5 1.8.5zm6.7 1.2v-9.5h3.3c.6 0 1.1.1 1.6.4.5.2.8.6 1.1 1s.4.9.4 1.5c0 .4-.1.8-.2 1.1s-.4.7-.7.9c-.3.3-.6.5-1 .6-.4.1-.9.2-1.4.2h-2.3v-1.3h2.5c.3 0 .6-.1.8-.2.2-.1.4-.3.6-.6.2-.2.2-.5.2-.8 0-.3-.1-.5-.2-.7-.1-.2-.3-.4-.5-.6-.2-.1-.5-.2-.9-.2h-1.9v8.2h-1.4zm2.2-4.4h1.7l3 4.3v.1H618l-3-4.4zM517.7 102.9c-.6 0-1.1-.1-1.7-.3-.6-.2-1-.6-1.5-1-.4-.5-.7-1.1-.9-1.8l1.7-.7c.2.6.4 1.1.8 1.5.4.4.9.6 1.6.6.7 0 1.2-.2 1.6-.6.4-.4.7-1 .7-1.6 0-.7-.2-1.2-.6-1.6-.4-.4-1-.7-1.6-.7-.4 0-.8.1-1.1.2-.3.2-.6.4-.8.7l-1.8-.8.7-6h6.4v1.7h-4.9l-.4 3.2h.1c.3-.2.6-.4.9-.5.4-.1.8-.2 1.3-.2.7 0 1.3.2 1.9.5.6.3 1 .8 1.4 1.4.4.6.5 1.3.5 2 0 .8-.2 1.5-.5 2.1-.4.6-.8 1.1-1.5 1.4-.7.3-1.5.5-2.3.5zm10.8 0c-.7 0-1.4-.2-2-.5-.6-.3-1.1-.8-1.5-1.3-.4-.6-.8-1.2-1-2-.2-.8-.3-1.6-.3-2.4 0-.9.1-1.7.3-2.5.2-.8.6-1.4 1-2 .4-.6.9-1 1.5-1.3.6-.3 1.3-.5 2-.5.8 0 1.4.2 2 .5.6.3 1.1.8 1.5 1.3.4.6.8 1.2 1 2 .2.8.3 1.6.3 2.5 0 .9-.1 1.7-.3 2.4-.2.8-.5 1.4-1 2-.4.6-.9 1-1.5 1.3-.6.3-1.2.5-2 .5zm0-1.8c.6 0 1.1-.2 1.6-.6.4-.4.8-.9 1-1.6.2-.7.4-1.4.4-2.2 0-.8-.1-1.6-.4-2.3-.2-.7-.6-1.2-1-1.6-.4-.4-1-.6-1.6-.6-.6 0-1.2.2-1.6.6-.4.4-.8.9-1 1.6-.2.7-.4 1.4-.4 2.3 0 .8.1 1.6.4 2.2.2.7.6 1.2 1 1.6.5.4 1 .6 1.6.6zm11.4 1.8c-.7 0-1.4-.2-2-.5-.6-.3-1.1-.8-1.5-1.3-.4-.6-.8-1.2-1-2-.2-.8-.3-1.6-.3-2.4 0-.9.1-1.7.3-2.5.2-.8.6-1.4 1-2 .4-.6.9-1 1.5-1.3.6-.3 1.3-.5 2-.5.8 0 1.4.2 2 .5.6.3 1.1.8 1.5 1.3.4.6.8 1.2 1 2 .2.8.3 1.6.3 2.5 0 .9-.1 1.7-.3 2.4-.2.8-.5 1.4-1 2-.4.6-.9 1-1.5 1.3-.5.3-1.2.5-2 .5zm.1-1.8c.6 0 1.1-.2 1.6-.6.4-.4.8-.9 1-1.6.2-.7.4-1.4.4-2.2 0-.8-.1-1.6-.4-2.3-.2-.7-.6-1.2-1-1.6-.4-.4-1-.6-1.6-.6-.6 0-1.2.2-1.6.6-.4.4-.8.9-1 1.6-.2.7-.4 1.4-.4 2.3 0 .8.1 1.6.4 2.2.2.7.6 1.2 1 1.6.4.4.9.6 1.6.6zm10.8 1.5v-8.8h1.8V95h.1c.2-.3.4-.5.7-.8s.6-.4.9-.5c.4-.1.7-.2 1.1-.2.7 0 1.2.2 1.7.5s.8.7 1 1.2c.3-.5.7-.8 1.2-1.2.5-.3 1.1-.5 1.8-.5 1 0 1.8.3 2.3 1 .5.6.8 1.5.8 2.5v5.7h-1.9v-5.4c0-.7-.2-1.2-.5-1.5-.3-.3-.7-.5-1.3-.5-.4 0-.8.1-1.1.4-.3.2-.6.6-.8 1s-.3.9-.3 1.3v4.7h-1.9v-5.4c0-.7-.2-1.2-.5-1.5-.3-.3-.8-.5-1.3-.5-.4 0-.8.1-1.1.4-.3.2-.6.6-.7 1s-.3.9-.3 1.3v4.7h-1.7zm18.6.3c-.7 0-1.3-.1-1.8-.3-.5-.2-.9-.5-1.3-.9-.3-.4-.6-.8-.7-1.2l1.7-.7c.2.5.5.8.9 1.1.4.2.8.4 1.3.4s.9-.1 1.2-.2c.3-.2.5-.4.5-.8 0-.2-.1-.5-.2-.6s-.4-.3-.6-.4l-.9-.3-1.1-.2c-.4-.1-.8-.3-1.2-.5-.4-.2-.7-.5-.9-.9-.2-.4-.3-.8-.3-1.2 0-.5.2-1 .5-1.4.3-.4.7-.7 1.2-.9.5-.2 1.1-.3 1.7-.3.6 0 1.1.1 1.5.2.5.1.9.3 1.2.6.3.3.6.6.8 1l-1.6.7c-.2-.4-.5-.7-.8-.8-.3-.2-.7-.2-1.1-.2-.4 0-.8.1-1.1.3-.3.2-.4.4-.4.7 0 .3.1.5.4.7.3.2.6.3 1 .4l1.3.3c.9.2 1.5.6 2 1 .4.4.7 1 .7 1.6 0 .6-.2 1.1-.5 1.5-.3.4-.8.7-1.3 1-.8.2-1.5.3-2.1.3zM389.2 102.6v-1.8l.4-.4.9-.9c.4-.4.7-.8 1.1-1.2l1.1-1.1.8-.8c.3-.3.6-.6.8-.9.2-.3.3-.5.4-.8.1-.2.1-.5.1-.8 0-.3-.1-.6-.2-.8-.1-.3-.4-.5-.7-.6-.3-.2-.6-.2-1.1-.2-.4 0-.7.1-1 .2-.3.2-.5.4-.7.6-.2.2-.3.5-.3.7l-1.7-.7c.1-.3.2-.6.4-.9.2-.3.4-.6.8-.9.3-.3.7-.5 1.1-.7.4-.2.9-.3 1.5-.3.8 0 1.4.2 2 .5.6.3 1 .7 1.3 1.2.3.5.5 1.1.5 1.7 0 .5-.1 1-.3 1.5-.2.5-.4.9-.7 1.3-.3.4-.6.7-.9 1-.2.1-.4.3-.6.6-.2.2-.5.5-.7.8l-.8.8-.7.7-.4.4h5.2v1.7h-7.6zm14.2.3c-.7 0-1.4-.2-2-.5-.6-.3-1.1-.8-1.5-1.3-.4-.6-.8-1.2-1-2-.2-.8-.3-1.6-.3-2.4 0-.9.1-1.7.3-2.5.2-.8.6-1.4 1-2 .4-.6.9-1 1.5-1.3.6-.3 1.3-.5 2-.5.8 0 1.4.2 2 .5.6.3 1.1.8 1.5 1.3.4.6.8 1.2 1 2 .2.8.3 1.6.3 2.5 0 .9-.1 1.7-.3 2.4-.2.8-.5 1.4-1 2-.4.6-.9 1-1.5 1.3-.5.3-1.2.5-2 .5zm0-1.8c.6 0 1.1-.2 1.6-.6.4-.4.8-.9 1-1.6.2-.7.4-1.4.4-2.2 0-.8-.1-1.6-.4-2.3-.2-.7-.6-1.2-1-1.6-.4-.4-1-.6-1.6-.6-.6 0-1.2.2-1.6.6-.4.4-.8.9-1 1.6-.2.7-.4 1.4-.4 2.3 0 .8.1 1.6.4 2.2.2.7.6 1.2 1 1.6.5.4 1 .6 1.6.6zm11.5 1.8c-.7 0-1.4-.2-2-.5-.6-.3-1.1-.8-1.5-1.3-.4-.6-.8-1.2-1-2-.2-.8-.3-1.6-.3-2.4 0-.9.1-1.7.3-2.5.2-.8.6-1.4 1-2 .4-.6.9-1 1.5-1.3.6-.3 1.3-.5 2-.5.8 0 1.4.2 2 .5.6.3 1.1.8 1.5 1.3.4.6.8 1.2 1 2 .2.8.3 1.6.3 2.5 0 .9-.1 1.7-.3 2.4-.2.8-.5 1.4-1 2-.4.6-.9 1-1.5 1.3-.6.3-1.3.5-2 .5zm0-1.8c.6 0 1.1-.2 1.6-.6.4-.4.8-.9 1-1.6.2-.7.4-1.4.4-2.2 0-.8-.1-1.6-.4-2.3-.2-.7-.6-1.2-1-1.6-.4-.4-1-.6-1.6-.6-.6 0-1.2.2-1.6.6-.4.4-.8.9-1 1.6-.2.7-.4 1.4-.4 2.3 0 .8.1 1.6.4 2.2.2.7.6 1.2 1 1.6.4.4.9.6 1.6.6zm10.8 1.5v-8.8h1.8V95h.1c.2-.3.4-.5.7-.8s.6-.4.9-.5c.4-.1.7-.2 1.1-.2.7 0 1.2.2 1.7.5s.8.7 1 1.2c.3-.5.7-.8 1.2-1.2.5-.3 1.1-.5 1.8-.5 1 0 1.8.3 2.3 1 .5.6.8 1.5.8 2.5v5.7h-1.9v-5.4c0-.7-.2-1.2-.5-1.5-.3-.3-.7-.5-1.3-.5-.4 0-.8.1-1.1.4-.3.2-.6.6-.8 1s-.3.9-.3 1.3v4.7h-1.9v-5.4c0-.7-.2-1.2-.5-1.5-.3-.3-.8-.5-1.3-.5-.4 0-.8.1-1.1.4-.3.2-.6.6-.7 1s-.3.9-.3 1.3v4.7h-1.7zm18.6.3c-.7 0-1.3-.1-1.8-.3-.5-.2-.9-.5-1.3-.9-.3-.4-.6-.8-.7-1.2l1.7-.7c.2.5.5.8.9 1.1.4.2.8.4 1.3.4s.9-.1 1.2-.2c.3-.2.5-.4.5-.8 0-.2-.1-.5-.2-.6-.2-.2-.4-.3-.6-.4l-.9-.3-1.1-.2c-.4-.1-.8-.3-1.2-.5-.4-.2-.7-.5-.9-.9-.2-.4-.3-.8-.3-1.2 0-.5.2-1 .5-1.4.3-.4.7-.7 1.2-.9.5-.2 1.1-.3 1.7-.3.6 0 1.1.1 1.5.2.5.1.9.3 1.2.6.3.3.6.6.8 1l-1.6.7c-.2-.4-.5-.7-.8-.8-.3-.2-.7-.2-1.1-.2-.4 0-.8.1-1.1.3-.3.2-.4.4-.4.7 0 .3.1.5.4.7.3.2.6.3 1 .4l1.3.3c.9.2 1.5.6 2 1 .4.4.7 1 .7 1.6 0 .6-.2 1.1-.5 1.5-.3.4-.8.7-1.3 1-.8.2-1.4.3-2.1.3zM0 113.3V99h1.7v14.3H0zm4.6 0v-10.2h1.6v1.5h.1c.3-.5.7-.9 1.3-1.3.6-.4 1.3-.5 2-.5 1.2 0 2.2.4 2.8 1.1.6.7 1 1.7 1 2.9v6.5h-1.7V107c0-1-.2-1.7-.7-2.1-.5-.4-1.1-.6-1.8-.6-.6 0-1.1.2-1.5.5-.4.3-.8.7-1 1.2-.2.5-.4 1-.4 1.6v5.7H4.6zm10-10.2h6v1.5h-6v-1.5zm1.8 7.5v-10.4h1.7v10c0 .5.1.9.3 1.2.2.3.6.4 1.1.4.2 0 .4 0 .6-.1.2-.1.4-.2.5-.2v1.7c-.2.1-.4.1-.6.2-.2.1-.5.1-.8.1-.9 0-1.5-.2-2.1-.8-.5-.5-.7-1.2-.7-2.1zm10.3 3c-1 0-1.9-.2-2.6-.7-.8-.5-1.4-1.1-1.8-1.9-.4-.8-.6-1.7-.6-2.8 0-1 .2-1.9.6-2.7.4-.8 1-1.5 1.7-2s1.6-.8 2.6-.8 1.9.2 2.6.7c.7.4 1.3 1.1 1.7 1.8.4.8.6 1.7.6 2.7v.5h-8.8V107h7c0-.3-.1-.6-.2-.9-.1-.3-.3-.6-.5-.9-.2-.3-.6-.5-.9-.7-.4-.2-.8-.3-1.4-.3-.7 0-1.2.2-1.7.5s-.8.8-1.1 1.4c-.3.6-.4 1.2-.4 2 0 .9.2 1.6.5 2.2.3.6.8 1 1.3 1.3.5.3 1.1.4 1.7.4.8 0 1.4-.2 1.8-.5.5-.4.9-.8 1.2-1.3l1.4.7c-.4.8-1 1.4-1.7 1.9-1 .5-1.9.8-3 .8zm6.7-.3v-10.2H35v1.6h.1c.1-.4.4-.7.7-1 .3-.3.7-.5 1.1-.7.4-.2.8-.2 1.2-.2h.7c.2 0 .3.1.5.2v1.8c-.2-.1-.5-.2-.7-.2-.2-.1-.5-.1-.7-.1-.5 0-1 .1-1.4.4-.4.3-.7.7-1 1.1-.2.5-.4 1-.4 1.5v5.7h-1.7zm10.4.3c-.8 0-1.4-.1-2-.4-.6-.3-1-.7-1.3-1.2-.3-.5-.5-1.1-.5-1.8 0-.8.2-1.4.6-1.9.4-.5.9-.9 1.5-1.2.7-.3 1.4-.4 2.2-.4.4 0 .9 0 1.2.1.4.1.7.2 1 .3.3.1.5.2.7.3v-.6c0-.8-.3-1.4-.8-1.8-.5-.5-1.2-.7-2-.7-.6 0-1.1.1-1.6.4-.5.2-.9.6-1.1 1l-1.3-1c.3-.4.6-.7 1-1 .4-.3.9-.5 1.4-.7.5-.2 1.1-.2 1.6-.2 1.4 0 2.5.4 3.2 1.1.8.7 1.2 1.7 1.2 3v6.5h-1.6v-1.5h-.1c-.2.3-.4.6-.7.8-.3.3-.7.5-1.1.7-.5.1-1 .2-1.5.2zm.1-1.5c.6 0 1.1-.1 1.6-.4.5-.3.9-.7 1.2-1.2.3-.5.5-1 .5-1.6-.3-.2-.7-.4-1.2-.5-.5-.1-1-.2-1.5-.2-1 0-1.7.2-2.1.6-.4.4-.7.9-.7 1.5s.2 1 .6 1.4c.4.2 1 .4 1.6.4zm11.7 1.5c-1 0-1.9-.2-2.7-.7-.8-.5-1.4-1.1-1.8-1.9-.4-.8-.7-1.7-.7-2.8 0-1 .2-2 .7-2.8.4-.8 1.1-1.5 1.8-1.9.8-.5 1.7-.7 2.7-.7 1.1 0 2.1.3 2.8.8.7.5 1.3 1.2 1.6 2l-1.5.6c-.2-.6-.6-1.1-1.1-1.4-.5-.3-1.1-.5-1.8-.5-.6 0-1.2.2-1.7.5s-.9.8-1.2 1.4c-.3.6-.5 1.3-.5 2 0 .8.2 1.4.5 2 .3.6.7 1 1.2 1.4.5.3 1.1.5 1.7.5.7 0 1.3-.2 1.9-.5.5-.3.9-.8 1.2-1.4l1.5.6c-.3.8-.9 1.5-1.6 2-.9.5-1.8.8-3 .8zm5.5-10.5h6v1.5h-6v-1.5zm1.8 7.5v-10.4h1.7v10c0 .5.1.9.3 1.2.2.3.6.4 1.1.4.2 0 .4 0 .6-.1.2-.1.4-.2.5-.2v1.7c-.2.1-.4.1-.6.2-.2.1-.5.1-.8.1-.9 0-1.5-.2-2.1-.8-.4-.5-.7-1.2-.7-2.1zm6.5 2.7v-10.2h1.7v10.2h-1.7zm.9-12.1c-.3 0-.6-.1-.9-.4-.2-.2-.4-.5-.4-.9 0-.3.1-.6.4-.9.2-.2.5-.4.9-.4.3 0 .6.1.9.4.2.2.4.5.4.9 0 .3-.1.6-.4.9-.3.3-.6.4-.9.4zm8.1 12.4c-1 0-1.9-.2-2.7-.7-.8-.5-1.4-1.1-1.8-1.9-.4-.8-.7-1.7-.7-2.8 0-1 .2-1.9.7-2.8.4-.8 1.1-1.5 1.8-2 .8-.5 1.7-.7 2.7-.7 1 0 1.9.2 2.7.7.8.5 1.4 1.1 1.9 2 .4.8.7 1.7.7 2.7 0 1-.2 1.9-.7 2.8-.4.8-1.1 1.5-1.9 1.9-.8.5-1.7.8-2.7.8zm0-1.6c.6 0 1.2-.2 1.7-.5s1-.8 1.3-1.3c.3-.6.5-1.3.5-2.1s-.2-1.5-.5-2.1c-.3-.6-.8-1-1.3-1.3-.5-.3-1.1-.5-1.7-.5-.6 0-1.2.2-1.7.5s-1 .7-1.3 1.3c-.3.6-.5 1.3-.5 2.1s.2 1.5.5 2.1c.3.6.8 1 1.3 1.3.5.4 1.1.5 1.7.5zm7 1.3v-10.2H87v1.5h.1c.3-.5.7-.9 1.3-1.3.6-.4 1.3-.5 2-.5 1.2 0 2.2.4 2.8 1.1.6.7 1 1.7 1 2.9v6.5h-1.7V107c0-1-.2-1.7-.7-2.1-.5-.4-1.1-.6-1.8-.6-.6 0-1.1.2-1.5.5-.4.3-.8.7-1 1.2-.2.5-.4 1-.4 1.6v5.7h-1.7zm15.1-10.2h6v1.5h-6v-1.5zm1.8 7.5v-10.4h1.7v10c0 .5.1.9.3 1.2.2.3.6.4 1.1.4.2 0 .4 0 .6-.1.2-.1.4-.2.5-.2v1.7c-.2.1-.4.1-.6.2-.2.1-.5.1-.8.1-.9 0-1.5-.2-2.1-.8-.4-.5-.7-1.2-.7-2.1zm10.5 3c-1 0-1.9-.2-2.7-.7-.8-.5-1.4-1.1-1.8-1.9-.4-.8-.7-1.7-.7-2.8 0-1 .2-1.9.7-2.8.4-.8 1.1-1.5 1.8-2 .8-.5 1.7-.7 2.7-.7 1 0 1.9.2 2.7.7.8.5 1.4 1.1 1.9 2 .4.8.7 1.7.7 2.7 0 1-.2 1.9-.7 2.8-.4.8-1.1 1.5-1.9 1.9-.8.5-1.7.8-2.7.8zm0-1.6c.6 0 1.2-.2 1.7-.5s1-.8 1.3-1.3c.3-.6.5-1.3.5-2.1s-.2-1.5-.5-2.1c-.3-.6-.8-1-1.3-1.3-.5-.3-1.1-.5-1.7-.5-.6 0-1.2.2-1.7.5s-1 .7-1.3 1.3c-.3.6-.5 1.3-.5 2.1s.2 1.5.5 2.1c.3.6.8 1 1.3 1.3.5.4 1.1.5 1.7.5zm12.2 1.3V99h2.1l7.2 11.4h.1l-.1-2.8V99h1.7v14.3h-1.8l-7.5-11.9h-.1l.1 2.8v9.2H125zm18.2.3c-1 0-1.9-.2-2.6-.7-.8-.5-1.4-1.1-1.8-1.9-.4-.8-.6-1.7-.6-2.8 0-1 .2-1.9.6-2.7.4-.8 1-1.5 1.7-2s1.6-.8 2.6-.8 1.9.2 2.6.7c.7.4 1.3 1.1 1.7 1.8.4.8.6 1.7.6 2.7v.5h-8.8V107h7c0-.3-.1-.6-.2-.9-.1-.3-.3-.6-.5-.9-.2-.3-.6-.5-.9-.7-.4-.2-.8-.3-1.4-.3-.7 0-1.2.2-1.7.5s-.8.8-1.1 1.4c-.3.6-.4 1.2-.4 2 0 .9.2 1.6.5 2.2.3.6.8 1 1.3 1.3.5.3 1.1.4 1.7.4.8 0 1.4-.2 1.8-.5.5-.4.9-.8 1.2-1.3l1.4.7c-.4.8-1 1.4-1.7 1.9-1 .5-1.9.8-3 .8zm5.5-.3 4.1-5.9h.2l2.9-4.3h2l-4 5.6h-.1l-3.1 4.6h-2zm.1-10.2h1.9l3.2 4.5h.1l4 5.7h-2l-3-4.5h-.1l-4.1-5.7zm9.9 0h6v1.5h-6v-1.5zm1.8 7.5v-10.4h1.7v10c0 .5.1.9.3 1.2.2.3.6.4 1.1.4.2 0 .4 0 .6-.1.2-.1.4-.2.5-.2v1.7c-.2.1-.4.1-.6.2-.2.1-.5.1-.8.1-.9 0-1.5-.2-2.1-.8-.4-.5-.7-1.2-.7-2.1zm11.2 2.7V99h4.8c.8 0 1.5.2 2.2.5.7.4 1.2.8 1.6 1.5.4.6.6 1.4.6 2.2 0 .8-.2 1.6-.6 2.2-.4.6-.9 1.1-1.6 1.5-.7.4-1.4.5-2.2.5h-3.9v-1.6h4c.6 0 1-.1 1.4-.4.4-.3.7-.6.9-1 .2-.4.3-.8.3-1.2 0-.4-.1-.8-.3-1.2-.2-.4-.5-.7-.9-1-.4-.3-.9-.4-1.4-.4h-3.2v12.7h-1.7zm14 .3c-.8 0-1.4-.1-2-.4-.6-.3-1-.7-1.3-1.2-.3-.5-.5-1.1-.5-1.8 0-.8.2-1.4.6-1.9.4-.5.9-.9 1.5-1.2.7-.3 1.4-.4 2.2-.4.4 0 .9 0 1.2.1.4.1.7.2 1 .3.3.1.5.2.7.3v-.6c0-.8-.3-1.4-.8-1.8-.5-.5-1.2-.7-2-.7-.6 0-1.1.1-1.6.4-.5.2-.9.6-1.1 1l-1.3-1c.3-.4.6-.7 1-1 .4-.3.9-.5 1.4-.7.5-.2 1.1-.2 1.6-.2 1.4 0 2.5.4 3.2 1.1.8.7 1.2 1.7 1.2 3v6.5h-1.6v-1.5h-.1c-.2.3-.4.6-.7.8-.3.3-.7.5-1.1.7-.5.1-.9.2-1.5.2zm.2-1.5c.6 0 1.1-.1 1.6-.4.5-.3.9-.7 1.2-1.2.3-.5.5-1 .5-1.6-.3-.2-.7-.4-1.2-.5-.5-.1-1-.2-1.5-.2-1 0-1.7.2-2.1.6-.4.4-.7.9-.7 1.5s.2 1 .6 1.4c.4.2 1 .4 1.6.4zm7.4 1.2v-10.2h1.7v10.2h-1.7zm.8-12.1c-.3 0-.6-.1-.9-.4-.2-.2-.4-.5-.4-.9 0-.3.1-.6.4-.9.2-.2.5-.4.9-.4.3 0 .6.1.9.4.2.2.4.5.4.9 0 .3-.1.6-.4.9-.3.3-.5.4-.9.4zm3.5 12.1v-10.2h1.6v1.5h.1c.3-.5.7-.9 1.3-1.3.6-.4 1.3-.5 2-.5 1.2 0 2.2.4 2.8 1.1.6.7 1 1.7 1 2.9v6.5h-1.7V107c0-1-.2-1.7-.7-2.1-.5-.4-1.1-.6-1.8-.6-.6 0-1.1.2-1.5.5-.4.3-.8.7-1 1.2-.2.5-.4 1-.4 1.6v5.7h-1.7zm10-10.2h6v1.5h-6v-1.5zm1.8 7.5v-10.4h1.7v10c0 .5.1.9.3 1.2.2.3.6.4 1.1.4.2 0 .4 0 .6-.1.2-.1.4-.2.5-.2v1.7c-.2.1-.4.1-.6.2-.2.1-.5.1-.8.1-.9 0-1.5-.2-2.1-.8-.4-.5-.7-1.2-.7-2.1zM418.1 55.2c-1.8 0-3.3 1.5-3.3 3.3 0 1.5 1 2.7 2.3 3.1V83h2V61.6c1.3-.4 2.3-1.7 2.3-3.1 0-1.8-1.5-3.3-3.3-3.3zM546.5 58.6c0-1.8-1.5-3.3-3.3-3.3s-3.3 1.5-3.3 3.3c0 1.5 1 2.7 2.3 3.1v21.2h2V61.7c1.3-.4 2.3-1.6 2.3-3.1z"></path></svg>
</figure>
<h2 id="the-fuzzy-beginning">The fuzzy beginning <a class="headline-link" href="https://web.dev/economic-times-inp/#the-fuzzy-beginning">#</a></h2>
<p>When Google initially introduced INP as an experimental metric with the potential to evolve into one of the Core Web Vitals metrics, the Economic Times team took up the challenge to fix it before it graduates into one, since providing a world class user experience is crucial to our core business values.</p>
<p>INP has been one of the most difficult metrics to solve thus far. In the beginning, it was unclear on how to measure INP effectively. What made it more difficult was the lack of community support—including most Real User Monitoring (RUM) providers not supporting it yet. However, we had Google RUM tools like <a href="https://developer.chrome.com/docs/crux/about/" rel="noopener">Chrome User Experience Report (CrUX)</a>, the <a href="https://github.com/GoogleChrome/web-vitals" rel="noopener"><code>web-vitals</code> JavaScript library</a>, and others supporting it, which gave us a sense of where we stood while we were evaluating the path ahead. Our INP was close to 1,000 milliseconds at the origin level when we started.</p>
<p>One thing that emerged while fixing INP in <a href="https://web.dev/find-slow-interactions-in-the-field/">the field</a> was that one of the lab metrics to target could be <a href="https://web.dev/tbt/">Total Blocking Time (TBT)</a>. TBT was already well documented and supported by the community. Despite already meeting the thresholds for Core Web Vitals, however, we weren't doing as well on the TBT front, as it was over 3 seconds when we began.</p>
<h2 id="what-is-tbt,-and-what-steps-did-we-take-to-improve-it">What is TBT, and what steps did we take to improve it? <a class="headline-link" href="https://web.dev/economic-times-inp/#what-is-tbt,-and-what-steps-did-we-take-to-improve-it">#</a></h2>
<p>TBT is a lab metric that measures the responsiveness of a web page to user input during page load. Any task that takes more than 50 milliseconds to execute is considered a long task, and the time after the 50 millisecond threshold is known as the <strong>blocking time</strong>.</p>
<p>TBT is calculated by taking the sum of the blocking time of all long tasks during page load. For example, if there are two long tasks during load, the blocking time is determined as follows:</p>
<ul>
<li>Task A takes 80 milliseconds (30 milliseconds more than 50 milliseconds).</li>
<li>Task B takes 100 milliseconds (50 milliseconds more than 50 milliseconds).</li>
</ul>
<p>The page's TBT will be: 80 milliseconds (30 + 50). The lower the TBT, the better, and TBT also <a href="https://almanac.httparchive.org/en/2022/performance#inp-and-tbt" rel="noopener">correlates well with INP</a>.</p>
<p>Here’s a quick lab comparison of our TBT before and after taking steps to improve it:</p>
<figure>
  <img alt="A composite image of long tasks during startup as shown in the performance panel of Chrome DevTools, and a report of page metrics. The main thread is blocked during page load for 3,260 milliseconds." decoding="async" height="502" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/UfZ9zaCLHjCMcPg74xHV.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/UfZ9zaCLHjCMcPg74xHV.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/UfZ9zaCLHjCMcPg74xHV.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/UfZ9zaCLHjCMcPg74xHV.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/UfZ9zaCLHjCMcPg74xHV.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/UfZ9zaCLHjCMcPg74xHV.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/UfZ9zaCLHjCMcPg74xHV.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/UfZ9zaCLHjCMcPg74xHV.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/UfZ9zaCLHjCMcPg74xHV.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/UfZ9zaCLHjCMcPg74xHV.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/UfZ9zaCLHjCMcPg74xHV.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/UfZ9zaCLHjCMcPg74xHV.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/UfZ9zaCLHjCMcPg74xHV.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/UfZ9zaCLHjCMcPg74xHV.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/UfZ9zaCLHjCMcPg74xHV.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/UfZ9zaCLHjCMcPg74xHV.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/UfZ9zaCLHjCMcPg74xHV.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/UfZ9zaCLHjCMcPg74xHV.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    The main thread during startup before optimizing TBT. The TBT is 3,260 milliseconds.
  </figcaption>
</figure>
<figure>
  <img alt="A composite image of long tasks during startup as shown in the performance panel of Chrome DevTools, and a report of page metrics. The main thread is blocked during page load for 120 milliseconds." decoding="async" height="701" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/RLx2y7zTItkaklqxSG17.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/RLx2y7zTItkaklqxSG17.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/RLx2y7zTItkaklqxSG17.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/RLx2y7zTItkaklqxSG17.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/RLx2y7zTItkaklqxSG17.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/RLx2y7zTItkaklqxSG17.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/RLx2y7zTItkaklqxSG17.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/RLx2y7zTItkaklqxSG17.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/RLx2y7zTItkaklqxSG17.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/RLx2y7zTItkaklqxSG17.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/RLx2y7zTItkaklqxSG17.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/RLx2y7zTItkaklqxSG17.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/RLx2y7zTItkaklqxSG17.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/RLx2y7zTItkaklqxSG17.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/RLx2y7zTItkaklqxSG17.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/RLx2y7zTItkaklqxSG17.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/RLx2y7zTItkaklqxSG17.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/RLx2y7zTItkaklqxSG17.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    The main thread during startup after optimizing TBT. The TBT is 120 milliseconds.
  </figcaption>
</figure>
<h3 id="minimize-main-thread-work">Minimize main thread work <a class="headline-link" href="https://web.dev/economic-times-inp/#minimize-main-thread-work">#</a></h3>
<p>The browser’s main thread handles everything from parsing HTML, building the DOM, to parsing CSS and applying styles, as well as evaluating and executing JavaScript. The main thread also handles user interactions—that is, click, tap, and keypresses. If the main thread is occupied with doing other work, it may not respond to user inputs efficiently, and may lead to a janky user experience.</p>
<p>This was the most difficult task for us, since we have our own algorithms to detect user identity for serving ads based on subscription status and third party scripts for A/B testing, analytics, and more.</p>
<p>We took small steps at first, such as de-prioritizing loading of less critical business assets. Second, we used <a href="https://developer.mozilla.org/docs/Web/API/Window/requestIdleCallback" rel="noopener"><code>requestIdleCallback</code></a> for non-critical work, which can help to reduce TBT.</p>
<div><pre class="language-js"><code class="language-js"><span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token string">'requestIdleCallback'</span> <span class="token keyword">in</span> window<span class="token punctuation">)</span> <span class="token punctuation">{</span><br />  <span class="token keyword">this</span><span class="token punctuation">.</span>requestIdleCallbackId <span class="token operator">=</span> <span class="token function">requestIdleCallback</span><span class="token punctuation">(</span><span class="token function">fetchMarketsData</span><span class="token punctuation">.</span><span class="token function">bind</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token literal-property property">timeout</span><span class="token operator">:</span> <span class="token number">3000</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br /><span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span><br />  <span class="token function">fetchMarketsData</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Fallback in case requestIdleCallback is not supported</span><br /><span class="token punctuation">}</span></code></pre>
</div><p>Specifying a timeout is recommended when using <code>requestIdleCallback</code>, since it makes sure that if the given time is elapsed and the callback is not already been called, it executes the callback immediately after the timeout.</p>
<h3 id="minimize-script-evaluation-time">Minimize script evaluation time <a class="headline-link" href="https://web.dev/economic-times-inp/#minimize-script-evaluation-time">#</a></h3>
<p>We also lazy loaded third party libraries using <a href="https://loadable-components.com/" rel="noopener">Loadable components</a>. We also removed unused JavaScript and CSS by profiling the page with the <a href="https://developer.chrome.com/docs/devtools/coverage/" rel="noopener">coverage tool</a> in Chrome DevTools. It helped us to identify areas where <a href="https://webpack.js.org/guides/tree-shaking/" rel="noopener">tree shaking</a> was needed to ship less code during page load, and therefore reduce the initial bundle size of the application.</p>
<figure>
  <img alt="A screenshot of the coverage tool in Chrome DevTools. Here, the tool displays unused portions of JavaScript and CSS files during page load." decoding="async" height="100" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/uynCVTUjcv4ujJva41PS.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/uynCVTUjcv4ujJva41PS.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/uynCVTUjcv4ujJva41PS.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/uynCVTUjcv4ujJva41PS.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/uynCVTUjcv4ujJva41PS.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/uynCVTUjcv4ujJva41PS.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/uynCVTUjcv4ujJva41PS.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/uynCVTUjcv4ujJva41PS.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/uynCVTUjcv4ujJva41PS.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/uynCVTUjcv4ujJva41PS.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/uynCVTUjcv4ujJva41PS.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/uynCVTUjcv4ujJva41PS.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/uynCVTUjcv4ujJva41PS.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/uynCVTUjcv4ujJva41PS.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/uynCVTUjcv4ujJva41PS.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/uynCVTUjcv4ujJva41PS.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/uynCVTUjcv4ujJva41PS.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/uynCVTUjcv4ujJva41PS.png?auto=format&w=1600 1600w" width="800" />
</figure>
<h3 id="reduce-dom-size">Reduce DOM size <a class="headline-link" href="https://web.dev/economic-times-inp/#reduce-dom-size">#</a></h3>
<p>Per Lighthouse, large DOM sizes increase memory usage, causes longer <a href="https://web.dev/economic-times-inp/reduce-the-scope-and-complexity-of-style-calculations/">style recalculations</a>, and produces costly <a href="https://developers.google.com/speed/docs/insights/browser-reflow" rel="noopener">layout reflows</a>.</p>
<figure>
  <img alt="A screenshot of the DOM size audit in Lighthouse. The number of DOM elements reported is 2,706 elements." decoding="async" height="86" loading="lazy" sizes="(min-width: 712px) 712px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/JLQfvWp1Fouc55Xbgy7X.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/JLQfvWp1Fouc55Xbgy7X.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/JLQfvWp1Fouc55Xbgy7X.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/JLQfvWp1Fouc55Xbgy7X.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/JLQfvWp1Fouc55Xbgy7X.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/JLQfvWp1Fouc55Xbgy7X.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/JLQfvWp1Fouc55Xbgy7X.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/JLQfvWp1Fouc55Xbgy7X.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/JLQfvWp1Fouc55Xbgy7X.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/JLQfvWp1Fouc55Xbgy7X.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/JLQfvWp1Fouc55Xbgy7X.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/JLQfvWp1Fouc55Xbgy7X.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/JLQfvWp1Fouc55Xbgy7X.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/JLQfvWp1Fouc55Xbgy7X.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/JLQfvWp1Fouc55Xbgy7X.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/JLQfvWp1Fouc55Xbgy7X.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/JLQfvWp1Fouc55Xbgy7X.png?auto=format&w=1424 1424w" width="712" />
</figure>
<p>We reduced the number of DOM nodes in two ways:</p>
<ul>
<li>First, we rendered our menu items at the user’s request (on click). It decreased the DOM size by around 1,200 nodes.</li>
<li>Second, we lazy loaded less important widgets.</li>
</ul>
<p>Because of all these efforts, we reduced TBT significantly, and our INP was reduced accordingly by almost 50%:</p>
<figure>
  <img alt="A screenshot of the INP audit in CrUX. The INP for the page is 539 milliseconds, which exceeds the &#x27;poor&#x27; threshold." decoding="async" height="216" loading="lazy" sizes="(min-width: 574px) 574px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ojm0miY1lwoFqxZWnYVM.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ojm0miY1lwoFqxZWnYVM.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ojm0miY1lwoFqxZWnYVM.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ojm0miY1lwoFqxZWnYVM.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ojm0miY1lwoFqxZWnYVM.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ojm0miY1lwoFqxZWnYVM.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ojm0miY1lwoFqxZWnYVM.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ojm0miY1lwoFqxZWnYVM.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ojm0miY1lwoFqxZWnYVM.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ojm0miY1lwoFqxZWnYVM.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ojm0miY1lwoFqxZWnYVM.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ojm0miY1lwoFqxZWnYVM.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ojm0miY1lwoFqxZWnYVM.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ojm0miY1lwoFqxZWnYVM.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ojm0miY1lwoFqxZWnYVM.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ojm0miY1lwoFqxZWnYVM.png?auto=format&w=1148 1148w" width="574" />
</figure>
<p>At this point, we nearly ran out of easy wins to further reduce TBT (and INP by proxy), but we knew we had a lot of room for improvement. This is when we decided to upgrade our custom-built UI boilerplate to the latest version of React along with <a href="https://nextjs.org/" rel="noopener">Next.js</a> to make better use of <a href="https://react.dev/reference/react" rel="noopener">hooks</a> to avoid unnecessary re-rendering of components.</p>
<p>Due to more frequent updates and comparatively lesser traffic as compared to the other portions of the website, we began to migrate our <a href="https://economictimes.indiatimes.com/topic/home" rel="noopener">topic pages</a> to Next.js. We also used <a href="https://partytown.builder.io/" rel="noopener">PartyTown</a> for offloading additional heavy main thread work to web workers, along with techniques like <code>requestIdleCallBack</code> for deferring non-critical tasks.</p>
<h2 id="how-has-improving-inp-helped-the-economic-times">How has improving INP helped The Economic Times? <a class="headline-link" href="https://web.dev/economic-times-inp/#how-has-improving-inp-helped-the-economic-times">#</a></h2>
<h3 id="current-tbt-and-inp-on-origin">Current TBT and INP on origin <a class="headline-link" href="https://web.dev/economic-times-inp/#current-tbt-and-inp-on-origin">#</a></h3>
<p>At the time of publishing this post, the TBT for our origin was 120 milliseconds, down from 3,260 milliseconds when we began our optimization efforts. Similarly, the INP for our origin was 257 milliseconds after our optimization efforts, down from over 1,000 milliseconds.</p>
<figure>
  <img alt="A screenshot of the INP audit in CrUX. The INP for the page is 257 milliseconds, which is within the &#x27;needs improvement&#x27; thresholds." decoding="async" height="218" loading="lazy" sizes="(min-width: 582px) 582px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6cMvebBQKG2nhyc1eYeB.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6cMvebBQKG2nhyc1eYeB.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6cMvebBQKG2nhyc1eYeB.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6cMvebBQKG2nhyc1eYeB.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6cMvebBQKG2nhyc1eYeB.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6cMvebBQKG2nhyc1eYeB.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6cMvebBQKG2nhyc1eYeB.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6cMvebBQKG2nhyc1eYeB.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6cMvebBQKG2nhyc1eYeB.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6cMvebBQKG2nhyc1eYeB.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6cMvebBQKG2nhyc1eYeB.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6cMvebBQKG2nhyc1eYeB.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6cMvebBQKG2nhyc1eYeB.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6cMvebBQKG2nhyc1eYeB.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6cMvebBQKG2nhyc1eYeB.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6cMvebBQKG2nhyc1eYeB.png?auto=format&w=1164 1164w" width="582" />
</figure>
<h3 id="inp-crux-trend">INP CrUX trend <a class="headline-link" href="https://web.dev/economic-times-inp/#inp-crux-trend">#</a></h3>
<p>The traffic received on topic pages represents a significantly smaller portion of overall traffic. Hence, it was an ideal place for experimentation. The CrUX results along with the business outcomes were very encouraging, and led us to expand our efforts across the entire website to reap further benefits.</p>
<figure>
  <img alt="A screenshot of INP distributions as visualized in CrUX over a period of four months, starting in July 2022 and ending in October 2022. Values within the &#x27;poor&#x27; and &#x27;needs improvement&#x27; thresholds declined somewhat, while the values within the &#x27;good&#x27; threshold increased." decoding="async" height="190" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pkPEYIQIeEDKdIKOCFSY.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pkPEYIQIeEDKdIKOCFSY.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pkPEYIQIeEDKdIKOCFSY.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pkPEYIQIeEDKdIKOCFSY.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pkPEYIQIeEDKdIKOCFSY.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pkPEYIQIeEDKdIKOCFSY.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pkPEYIQIeEDKdIKOCFSY.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pkPEYIQIeEDKdIKOCFSY.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pkPEYIQIeEDKdIKOCFSY.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pkPEYIQIeEDKdIKOCFSY.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pkPEYIQIeEDKdIKOCFSY.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pkPEYIQIeEDKdIKOCFSY.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pkPEYIQIeEDKdIKOCFSY.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pkPEYIQIeEDKdIKOCFSY.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pkPEYIQIeEDKdIKOCFSY.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pkPEYIQIeEDKdIKOCFSY.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pkPEYIQIeEDKdIKOCFSY.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pkPEYIQIeEDKdIKOCFSY.png?auto=format&w=1600 1600w" width="800" />
</figure>
<h3 id="akamai-mpulse-tbt-analysis">Akamai mPulse TBT Analysis <a class="headline-link" href="https://web.dev/economic-times-inp/#akamai-mpulse-tbt-analysis">#</a></h3>
<p>We use <a href="https://www.akamai.com/products/mpulse-real-user-monitoring" rel="noopener">Akamai mPulse</a> as our RUM solution, which measures TBT in the field. We observed a consistent decrease in TBT, clearly mapping to the outcomes of our efforts to reduce INP. As can be seen in the screenshot below, TBT values eventually dropped from approximately 5 seconds in to around 200 milliseconds in the field.</p>
<figure>
  <img alt="A screenshot of a chart in Akamai mPulse, showing a decline in TBT over the course of roughly a month." decoding="async" height="118" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/eS3iIvNxEUhe19GGdDBG.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/eS3iIvNxEUhe19GGdDBG.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/eS3iIvNxEUhe19GGdDBG.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/eS3iIvNxEUhe19GGdDBG.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/eS3iIvNxEUhe19GGdDBG.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/eS3iIvNxEUhe19GGdDBG.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/eS3iIvNxEUhe19GGdDBG.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/eS3iIvNxEUhe19GGdDBG.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/eS3iIvNxEUhe19GGdDBG.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/eS3iIvNxEUhe19GGdDBG.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/eS3iIvNxEUhe19GGdDBG.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/eS3iIvNxEUhe19GGdDBG.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/eS3iIvNxEUhe19GGdDBG.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/eS3iIvNxEUhe19GGdDBG.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/eS3iIvNxEUhe19GGdDBG.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/eS3iIvNxEUhe19GGdDBG.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/eS3iIvNxEUhe19GGdDBG.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/eS3iIvNxEUhe19GGdDBG.png?auto=format&w=1600 1600w" width="800" />
</figure>
<h2 id="business-outcome">Business outcome <a class="headline-link" href="https://web.dev/economic-times-inp/#business-outcome">#</a></h2>
<p>Overall, our efforts to bring down TBT by 30 times, along with migrating to Next.js helped us reduce INP nearly by 4 times, which eventually led to a <strong>50% decrease in bounce rate and 43% uplift in pageviews</strong> on topic pages.</p>
<figure>
  <img alt="A screenshot of Google Analytics comparing pageviews versus bounce rate. Because of the optimizations made to INP on The Economic Times website, a 50% decrease in bounce rate and a 43% increase in pageviews was realized." decoding="async" height="288" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/WOzP0OjtPV6rsjqbtbfe.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/WOzP0OjtPV6rsjqbtbfe.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/WOzP0OjtPV6rsjqbtbfe.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/WOzP0OjtPV6rsjqbtbfe.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/WOzP0OjtPV6rsjqbtbfe.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/WOzP0OjtPV6rsjqbtbfe.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/WOzP0OjtPV6rsjqbtbfe.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/WOzP0OjtPV6rsjqbtbfe.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/WOzP0OjtPV6rsjqbtbfe.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/WOzP0OjtPV6rsjqbtbfe.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/WOzP0OjtPV6rsjqbtbfe.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/WOzP0OjtPV6rsjqbtbfe.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/WOzP0OjtPV6rsjqbtbfe.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/WOzP0OjtPV6rsjqbtbfe.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/WOzP0OjtPV6rsjqbtbfe.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/WOzP0OjtPV6rsjqbtbfe.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/WOzP0OjtPV6rsjqbtbfe.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/WOzP0OjtPV6rsjqbtbfe.png?auto=format&w=1600 1600w" width="800" />
</figure>
<h2 id="conclusion">Conclusion <a class="headline-link" href="https://web.dev/economic-times-inp/#conclusion">#</a></h2>
<p>To summarize, INP extensively helped to determine runtime performance issues on parts of the Economic Times website. It has proven to be one of the most effective metrics to positively impact business outcomes. Due to the very encouraging numbers we've observed as the result of this effort, we are motivated to scale our optimization efforts to other areas of our website and reap additional benefits.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[HP Cloud Stories: Power Of Cloud Computing Unveiled!]]></title>
<description><![CDATA[Cloud computing is an amazing technology that can help businesses in many ways. In this article, we will explore the incredible benefits of cloud computing and how HP Helion, a…
The post HP Cloud Stories: Power Of Cloud Computing Unveiled! appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1886628/it+betriebssysteme/web+tipps/hp+cloud+stories+power+of+cloud+computing+unveiled/</link>
<pubDate>Wed, 24 May 2023 09:44:44 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Cloud computing is an amazing technology that can help businesses in many ways. In this article, we will explore the incredible benefits of cloud computing and how HP Helion, a…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/hp-cloud-stories-power-of-cloud-computing-unveiled/">HP Cloud Stories: Power Of Cloud Computing Unveiled!</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Building Your Own PC: A Step-by-Step Guide to Custom PC Building]]></title>
<description><![CDATA[A custom PC build refers to the process of assembling a computer system from individual components according to your specific needs and preferences. Instead of buying a pre-built computer, building…
The post Building Your Own PC: A Step-by-Step Guide to Custom PC Building appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1886627/it+betriebssysteme/web+tipps/building+your+own+pc+a+step-by-step+guide+to+custom+pc+building/</link>
<pubDate>Wed, 24 May 2023 09:44:42 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>A custom PC build refers to the process of assembling a computer system from individual components according to your specific needs and preferences. Instead of buying a pre-built computer, building…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/building-your-own-pc-a-step-by-step-guide-to-custom-pc-building/">Building Your Own PC: A Step-by-Step Guide to Custom PC Building</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[CSHAWK Acquired Desklitter.com: A Desk Organizer Store]]></title>
<description><![CDATA[DeskLitter.com, the renowned online store catering to the needs of home workers, has recently been acquired by CyberspaceHawk.com, marking a significant milestone in the digital retail industry. The acquisition, finalized…
The post CSHAWK Acquired Desklitter.com: A Desk Organizer Store appeared f...]]></description>
<link>https://tsecurity.de/de/1886626/it+betriebssysteme/web+tipps/cshawk+acquired+desklittercom+a+desk+organizer+store/</link>
<pubDate>Wed, 24 May 2023 09:44:41 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>DeskLitter.com, the renowned online store catering to the needs of home workers, has recently been acquired by CyberspaceHawk.com, marking a significant milestone in the digital retail industry. The acquisition, finalized…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/cshawk-acquired-desklitter-com-a-desk-organizer-store/">CSHAWK Acquired Desklitter.com: A Desk Organizer Store</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Die Macht der KI: Wie dich ChatGPT als Developer unterstützen kann]]></title>
<description><![CDATA[ChatGPT ist momentan der heiße Scheiß unter Entwicklern! In diesem Artikel zeige ich dir, wie du als Entwickler von diesem KI-Tool profitieren kannst. Mit praktischen […]
The post Die Macht der KI: Wie dich ChatGPT als Developer unterstützen kann appeared first at webdeasy.de.]]></description>
<link>https://tsecurity.de/de/1885565/it+betriebssysteme/web+tipps/die+macht+der+ki+wie+dich+chatgpt+als+developer+unterstuetzen+kann/</link>
<pubDate>Sat, 29 Apr 2023 11:46:11 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>ChatGPT ist momentan der heiße Scheiß unter Entwicklern! In diesem Artikel zeige ich dir, wie du als Entwickler von diesem KI-Tool profitieren kannst. Mit praktischen […]</p>
<p>The post <a rel="nofollow" href="https://webdeasy.de/chatgpt-nutzen-als-developer/">Die Macht der KI: Wie dich ChatGPT als Developer unterstützen kann</a> appeared first at <a rel="nofollow" href="https://webdeasy.de/">webdeasy.de</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Why Torrent Is Not Downloading? Fix Torrent Not Downloading!]]></title>
<description><![CDATA[Torrent being very famous site where a user can download large size files quickly and efficiently. However, there are lot of speculations that are being made by the people that…
The post Why Torrent Is Not Downloading? Fix Torrent Not Downloading! appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1878293/it+betriebssysteme/web+tipps/why+torrent+is+not+downloading+fix+torrent+not+downloading/</link>
<pubDate>Mon, 24 Apr 2023 17:31:08 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Torrent being very famous site where a user can download large size files quickly and efficiently. However, there are lot of speculations that are being made by the people that…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/why-torrent-is-not-downloading-fix-torrent-not-downloading/">Why Torrent Is Not Downloading? Fix Torrent Not Downloading!</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Roblox VS Fortnite | Find Out Who Wins This Fight!]]></title>
<description><![CDATA[The popularity of Roblox is massively increasing. Along its rise it has also become the favorite platform for many of the gamers. Roblox is an interactive gaming platform. The platform…
The post Roblox VS Fortnite | Find Out Who Wins This Fight! appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1877141/it+betriebssysteme/web+tipps/roblox+vs+fortnite+find+out+who+wins+this+fight/</link>
<pubDate>Sun, 23 Apr 2023 19:46:07 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>The popularity of Roblox is massively increasing. Along its rise it has also become the favorite platform for many of the gamers. Roblox is an interactive gaming platform. The platform…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/roblox-vs-fortnite-find-out-who-wins-this-fight/">Roblox VS Fortnite | Find Out Who Wins This Fight!</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[What Roblox Game Has The Most Visits?]]></title>
<description><![CDATA[Roblox is a very popular platform among gamers. Thousands of games are present into the platform. Since the games present in Roblox is significantly high. Users really gets the privilege…
The post What Roblox Game Has The Most Visits? appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1874089/it+betriebssysteme/web+tipps/what+roblox+game+has+the+most+visits/</link>
<pubDate>Thu, 20 Apr 2023 20:31:18 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Roblox is a very popular platform among gamers. Thousands of games are present into the platform. Since the games present in Roblox is significantly high. Users really gets the privilege…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/what-roblox-game-has-the-most-visits/">What Roblox Game Has The Most Visits?</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Can Roblox IP Ban? Full Decoded Information!]]></title>
<description><![CDATA[Roblox is a very popular gaming platform and it is also one of the favorite games for many. The platform has millions of games each having different features. Thousands of…
The post Can Roblox IP Ban? Full Decoded Information! appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1863138/it+betriebssysteme/web+tipps/can+roblox+ip+ban+full+decoded+information/</link>
<pubDate>Wed, 12 Apr 2023 19:46:17 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Roblox is a very popular gaming platform and it is also one of the favorite games for many. The platform has millions of games each having different features. Thousands of…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/can-roblox-ip-ban-full-decoded-information/">Can Roblox IP Ban? Full Decoded Information!</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Roblox vs Minecraft : Which is Better And Why? [2023]]]></title>
<description><![CDATA[Roblox and Minecraft are two products that ae hugely adapted by millions of people. The question of which one out of the two being best is the never-ending question that…
The post Roblox vs Minecraft : Which is Better And Why? [2023] appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1863137/it+betriebssysteme/web+tipps/roblox+vs+minecraft+which+is+better+and+why+2023/</link>
<pubDate>Wed, 12 Apr 2023 19:46:14 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Roblox and Minecraft are two products that ae hugely adapted by millions of people. The question of which one out of the two being best is the never-ending question that…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/roblox-vs-minecraft-which-is-better-and-why-2023/">Roblox vs Minecraft : Which is Better And Why? [2023]</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[How Slow Roads intrigues gamers and developers alike, spotlighting the surprising capabilities of 3D in the browser]]></title>
<description><![CDATA[Slow Roads is a casual driving game with an emphasis on endlessly procedurally generated scenery, all
hosted in the browser as a WebGL application. For many, such an intensive
experience might seem out of place in the limited context of the browser—and indeed, redressing that attitude has been on...]]></description>
<link>https://tsecurity.de/de/1856286/it+betriebssysteme/web+tipps/how+slow+roads+intrigues+gamers+and+developers+alike+spotlighting+the+surprising+capabilities+of+3d+in+the+browser/</link>
<pubDate>Tue, 11 Apr 2023 18:33:43 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p><a href="https://slowroads.io/" rel="noopener">Slow Roads</a> is a casual driving game with an emphasis on endlessly procedurally generated scenery, all
hosted in the browser as a <a href="https://developer.mozilla.org/docs/Web/API/WebGL_API" rel="noopener">WebGL application</a>. For many, such an intensive
experience might seem out of place in the limited context of the browser—and indeed, redressing that attitude has been one of my
goals with this project. In this article I'll be breaking down some of the techniques I used to navigate the performance hurdle in
my mission to highlight the oft-overlooked potential of 3D in the web.</p>
<h2 id="3d-development-in-the-browser">3D development in the browser <a class="headline-link" href="https://web.dev/slow-roads/#3d-development-in-the-browser">#</a></h2>
<p>After releasing Slow Roads, I saw a recurring comment in the feedback: &quot;I didn't know this was possible in the browser&quot;. If
you share this sentiment, you're certainly not a minority; according to the <a href="https://2022.stateofjs.com/en-US/" rel="noopener">2022 State of JS</a>
survey, some 80% of developers have yet to experiment with WebGL. To me, it feels something of a shame that so much potential
might be missed, especially when it comes to browser-based gaming. With Slow Roads I hope to bring WebGL further into the limelight,
and perhaps reduce the number of developers who balk at the phrase &quot;high-performance JavaScript game engine&quot;.</p>
<p>WebGL may seem mysterious and complex for many, but in recent years its development ecosystems have greatly matured into highly
capable and convenient tools and libraries. It's now easier than ever for front-end developers to incorporate 3D UX into their
work, even without prior experience in computer graphics. <a href="https://threejs.org/" rel="noopener">Three.js</a>, the leading WebGL library, serves
as the foundation for many expansions, including <a href="https://docs.pmnd.rs/react-three-fiber/getting-started/introduction" rel="noopener">react-three-fiber</a> which brings 3D components into the React framework. There
are now also comprehensive web-based game editors such as <a href="https://www.babylonjs.com/" rel="noopener">Babylon.js</a> or <a href="https://playcanvas.com/" rel="noopener">PlayCanvas</a>
which offer a familiar interface and integrated toolchains.</p>
<p>Despite the remarkable utility of these libraries, however, ambitious projects are eventually bound by technical limitations. Skeptics
to the idea of browser-based gaming might highlight that JavaScript is single-threaded and resource-constrained. But navigating
these limitations unlocks the hidden value: no other platform offers the same instant accessibility and mass compatibility
enabled by the browser. Users on any browser-capable system can begin playing in one click, with no need to install applications
and no need to sign in to services. Not to mention that developers enjoy the elegant convenience of having robust front-end frameworks
available for building UI, or handling networking for multiplayer modes. These values, in my opinion, are what make the browser such an
excellent platform for both players and developers alike—and, as demonstrated by Slow Roads, the technical limitations might often be
reducible to a design problem.</p>
<h2 id="achieving-smooth-performance-in-slow-roads">Achieving smooth performance in Slow Roads <a class="headline-link" href="https://web.dev/slow-roads/#achieving-smooth-performance-in-slow-roads">#</a></h2>
<p>Since the core elements of Slow Roads involve high-speed motion and expensive scenery generation, the need for smooth performance
underlined my every design decision. My main strategy was to start with a pared-down gameplay design that allowed for contextual
short-cuts to be taken within the engine's architecture. On the downside this means trading off some nice-to-have features in the
pursuit of minimalism, but results in a bespoke, hyper-optimized system that plays nicely across different browsers and devices.</p>
<p>Here follows a breakdown of the key components that keep Slow Roads lean.</p>
<h3 id="shaping-the-environment-engine-around-the-gameplay">Shaping the environment engine around the gameplay <a class="headline-link" href="https://web.dev/slow-roads/#shaping-the-environment-engine-around-the-gameplay">#</a></h3>
<p>As the key component of the game, the environment generation engine is unavoidably expensive, justifiably taking the greatest
proportion of the budgets for memory and compute. The trick used here is in scheduling and distributing the heavy computation over
a period of time, so as not to interrupt the framerate with performance spikes.</p>
<aside class="aside flow bg-state-info-bg color-state-info-text"><div class=" flow"> At its core, a game engine is an infinite <code>while</code> loop which reads user input, updates the world state, and then renders the image for the frame. This loop runs at the refresh rate of the monitor (typically 60 Hz), so any computation happening within it needs to complete within the given frame time to avoid causing visible stutters. </div></aside>
<p>The environment is composed of tiles of geometry, differing in size and resolution (categorized as &quot;levels of detail&quot; or LoDs)
depending on how close they will appear to the camera. In typical games with a free-roaming camera, different LoDs must be constantly
loaded and unloaded to detail the player's surroundings wherever they may choose to go. This can be an expensive and wasteful operation,
especially when the environment itself is dynamically generated. Fortunately, this convention can be entirely subverted in Slow Roads
thanks to the contextual expectation that the user should stay on the road. Instead, high-detail geometry can be reserved for the narrow
corridor directly flanking the route.</p>
<figure>
  <img alt="A diagram showing how generating the road far in advance can allow for proactive scheduling and caching of the environment generation." decoding="async" height="720" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/EK3mXmwSxE422zjs9mMw.png?auto=format" srcset="https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/EK3mXmwSxE422zjs9mMw.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/EK3mXmwSxE422zjs9mMw.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/EK3mXmwSxE422zjs9mMw.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/EK3mXmwSxE422zjs9mMw.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/EK3mXmwSxE422zjs9mMw.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/EK3mXmwSxE422zjs9mMw.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/EK3mXmwSxE422zjs9mMw.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/EK3mXmwSxE422zjs9mMw.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/EK3mXmwSxE422zjs9mMw.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/EK3mXmwSxE422zjs9mMw.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/EK3mXmwSxE422zjs9mMw.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/EK3mXmwSxE422zjs9mMw.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/EK3mXmwSxE422zjs9mMw.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/EK3mXmwSxE422zjs9mMw.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/EK3mXmwSxE422zjs9mMw.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/EK3mXmwSxE422zjs9mMw.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/EK3mXmwSxE422zjs9mMw.png?auto=format&w=1600 1600w" width="1280" />
  <figcaption>
    A view of the environment geometry in Slow Roads rendered as a wireframe, indicating corridors of high-resolution geometry flanking the road. Distant portions of the environment, which should never be seen up close, are rendered at a much lower resolution.
  </figcaption>
</figure>
<p>The midline of the road itself is generated far ahead of the player's arrival, allowing for accurate prediction of exactly
when and where the environment detail will be needed. The result is a lean system that can proactively schedule expensive work,
generating just the minimum needed at each point in time, and with no wasted effort on details that won't be seen. This technique
is only possible because the road is a single, non-branching path—a good example of making gameplay trade-offs that accommodate
architectural short-cuts.</p>
<figure>
  <img alt="A diagram showing how generating the road far in advance can allow for proactive scheduling and caching of the environment generation." decoding="async" height="480" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/6rjJXHREoaUXIxhun35L.png?auto=format" srcset="https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/6rjJXHREoaUXIxhun35L.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/6rjJXHREoaUXIxhun35L.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/6rjJXHREoaUXIxhun35L.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/6rjJXHREoaUXIxhun35L.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/6rjJXHREoaUXIxhun35L.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/6rjJXHREoaUXIxhun35L.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/6rjJXHREoaUXIxhun35L.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/6rjJXHREoaUXIxhun35L.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/6rjJXHREoaUXIxhun35L.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/6rjJXHREoaUXIxhun35L.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/6rjJXHREoaUXIxhun35L.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/6rjJXHREoaUXIxhun35L.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/6rjJXHREoaUXIxhun35L.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/6rjJXHREoaUXIxhun35L.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/6rjJXHREoaUXIxhun35L.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/6rjJXHREoaUXIxhun35L.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/6rjJXHREoaUXIxhun35L.png?auto=format&w=1600 1600w" width="960" />
  <figcaption>
    By looking a certain distance along the road, environment chunks can be pre-empted and generated gradually just before they're needed. Additionally, any chunks that will be revisited in the near future can be identified and cached to avoid unnecessary regeneration.
  </figcaption>
</figure>
<h3 id="being-picky-with-the-laws-of-physics">Being picky with the laws of physics <a class="headline-link" href="https://web.dev/slow-roads/#being-picky-with-the-laws-of-physics">#</a></h3>
<p>Second to the computational demand of the environment engine is the physics simulation. Slow Roads uses a custom, minimal physics engine which takes every short-cut available.</p>
<aside class="aside flow bg-state-info-bg color-state-info-text"><div class=" flow"> Physics engines are hard, but thankfully many excellent libraries exist to streamline the process. Custom implementations are necessary in extreme cases, but libraries like <a href="https://schteppe.github.io/cannon.js/">cannon.js</a> are increasingly covering more bases. </div></aside>
<p>The major saving here is to avoid simulating too many objects in the first place—leaning into the minimal, zen context by
discounting things like dynamic collisions and destructible objects. The assumption that the vehicle will stay on the road
means that collisions with off-road objects can reasonably be ignored. Additionally, the encoding of the road as a sparse
midline enables elegant tricks for fast collision detection with the road surface and guard rails, all based on a distance
check to the road's center. Off-road driving then becomes more expensive, but this is another example of a fair trade-off
suited to the context of the gameplay.</p>
<h3 id="managing-the-memory-footprint">Managing the memory footprint <a class="headline-link" href="https://web.dev/slow-roads/#managing-the-memory-footprint">#</a></h3>
<p>As another browser-restrained resource, it's important to manage memory with care—despite the fact JavaScript is
garbage-collected. It can be easy to overlook, but declaring even small amounts of new memory within a game loop can snowball
into significant issues when running at 60Hz. Besides eating up the user's resources in a context where they're likely multitasking,
large garbage collections can take several frames to complete, causing noticeable stutters. To avoid this, loop memory can be
pre-allocated in class variables at initialisation and recycled in each frame.</p>
<figure>
  <img alt="A before-and-after view of the memory profile during optimisation of the Slow Roads codebase, indicating significant savings and a reduction in garbage collection rate." decoding="async" height="480" loading="lazy" sizes="(min-width: 560px) 560px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/EDXmi4BDLYiLZuVET870.png?auto=format" srcset="https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/EDXmi4BDLYiLZuVET870.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/EDXmi4BDLYiLZuVET870.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/EDXmi4BDLYiLZuVET870.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/EDXmi4BDLYiLZuVET870.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/EDXmi4BDLYiLZuVET870.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/EDXmi4BDLYiLZuVET870.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/EDXmi4BDLYiLZuVET870.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/EDXmi4BDLYiLZuVET870.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/EDXmi4BDLYiLZuVET870.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/EDXmi4BDLYiLZuVET870.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/EDXmi4BDLYiLZuVET870.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/EDXmi4BDLYiLZuVET870.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/EDXmi4BDLYiLZuVET870.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/EDXmi4BDLYiLZuVET870.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/EDXmi4BDLYiLZuVET870.png?auto=format&w=1120 1120w" width="560" />
  <figcaption>
    While the overall memory utilization is barely changed, pre-allocating and recycling loop memory can greatly reduce the impact of expensive garbage collections.
  </figcaption>
</figure>
<p>It's also highly important that heavier data structures, such as geometries and their associated data buffers, are managed economically. In an infinitely-generated game like Slow Roads, most of the geometry exists on a sort of treadmill - once an old piece falls behind into the distance, its data structures can be stored and recycled again for an upcoming piece of the world, a design pattern known as object pooling.</p>
<p>These practices help to prioritize lean execution, with the sacrifice of some code simplicity. In high-performance contexts it's
important to be mindful of how convenience features sometimes borrow from the client for the benefit of the developer. For example, methods
like <code>Object.keys()</code> or <code>Array.map()</code> are incredibly handy, but it's easy to overlook that each creates a new array for their return
value. Understanding the inner workings of such black-boxes can help to tighten up your code and avoid sneaky performance hits.</p>
<h3 id="reducing-load-time-with-procedurally-generated-assets">Reducing load time with procedurally-generated assets <a class="headline-link" href="https://web.dev/slow-roads/#reducing-load-time-with-procedurally-generated-assets">#</a></h3>
<p>While runtime performance should be the primary concern for game developers, the usual axioms concerning initial web page load time still
hold true. Users may be more forgiving when knowingly accessing heavy content, but long load times can still be detrimental to the experience,
if not user retention. Games often require large assets in the form of textures, sounds, and 3D models, and at a minimum these should be carefully
compressed wherever detail can be spared.</p>
<aside class="aside flow bg-tertiary-box-bg color-tertiary-box-text"><p class="cluster "><span class="aside__icon box-block "><svg width="24" height="24" viewBox="0 0 24 24" role="img" aria-label="Lightbulb" fill="currentColor" xmlns="http://www.w3.org/2000/svg">   <path d="M9 21c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-1H9v1zm3-19C8.14 2 5 5.14 5 9c0 2.38 1.19 4.47 3 5.74V17c0 .55.45 1 1 1h6c.55 0 1-.45 1-1v-2.26c1.81-1.27 3-3.36 3-5.74 0-3.86-3.14-7-7-7zm2.85 11.1l-.85.6V16h-4v-2.3l-.85-.6A4.997 4.997 0 017 9c0-2.76 2.24-5 5-5s5 2.24 5 5c0 1.63-.8 3.16-2.15 4.1z"></path> </svg></span><strong>Important</strong></p><div class=" flow"> Be sure to use the appropriate formats for your assets—converting all of the images to <a href="https://web.dev/learn/images/webp/">WebP</a> format halved the Slow Roads bundle size with barely a perceptible difference in quality. </div></aside>
<p>Alternatively, procedurally generating assets on the client can avoid lengthy transfers in the first place. This is a huge benefit for users on slow connections,
and gives the developer more direct control over how their game is constituted—not just for the initial loading step, but also when it comes to adapting levels
of details for different quality settings.</p>
<img alt="A comparison illustrating how the quality of procedurally-generated geometry in Slow Roads can be dynamically adapted to the user&#x27;s performance needs." decoding="async" height="640" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/LSTBxy582GfK2KDfbXuv.png?auto=format" srcset="https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/LSTBxy582GfK2KDfbXuv.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/LSTBxy582GfK2KDfbXuv.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/LSTBxy582GfK2KDfbXuv.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/LSTBxy582GfK2KDfbXuv.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/LSTBxy582GfK2KDfbXuv.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/LSTBxy582GfK2KDfbXuv.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/LSTBxy582GfK2KDfbXuv.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/LSTBxy582GfK2KDfbXuv.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/LSTBxy582GfK2KDfbXuv.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/LSTBxy582GfK2KDfbXuv.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/LSTBxy582GfK2KDfbXuv.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/LSTBxy582GfK2KDfbXuv.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/LSTBxy582GfK2KDfbXuv.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/LSTBxy582GfK2KDfbXuv.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/LSTBxy582GfK2KDfbXuv.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/LSTBxy582GfK2KDfbXuv.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/LSTBxy582GfK2KDfbXuv.png?auto=format&w=1600 1600w" width="800" />
<p>Most of the geometry in Slow Roads is procedurally generated and simplistic, with custom shaders combining multiple textures to bring the detail.
The drawback is that these textures can be heavy assets, though there are further opportunities for savings here, with methods such as stochastic
texturing able to achieve greater detail from small source textures. And at an extreme level, it's also possible to generate textures entirely on the client with tools such as <a href="https://texgenjs.org/" rel="noopener">texgen.js</a>. The same is even true for audio, with the Web Audio API allowing for <a href="https://developer.mozilla.org/docs/Web/API/Web_Audio_API/Advanced_techniques" rel="noopener">sound generation</a> with audio nodes.</p>
<p>With the benefit of procedural assets, generating the initial environment takes just 3.2 seconds on average. To best take advantage of
the small up-front download size, a simple splash screen greets new visitors and postpones the expensive scene initialisation until
after an affirmative button press. This also acts as a convenient buffer for bounced sessions, minimizing wasted transfer of dynamically-loaded
assets.</p>
<img alt="A histogram of load times showing a strong peak in the first three seconds accounting for over 60% of users, followed by a rapid decline. The histogram shows that over 97% of users see load times of less than 10 seconds." decoding="async" height="576" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/hxiIMl31gXaXpqlAEvNu.png?auto=format" srcset="https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/hxiIMl31gXaXpqlAEvNu.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/hxiIMl31gXaXpqlAEvNu.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/hxiIMl31gXaXpqlAEvNu.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/hxiIMl31gXaXpqlAEvNu.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/hxiIMl31gXaXpqlAEvNu.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/hxiIMl31gXaXpqlAEvNu.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/hxiIMl31gXaXpqlAEvNu.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/hxiIMl31gXaXpqlAEvNu.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/hxiIMl31gXaXpqlAEvNu.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/hxiIMl31gXaXpqlAEvNu.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/hxiIMl31gXaXpqlAEvNu.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/hxiIMl31gXaXpqlAEvNu.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/hxiIMl31gXaXpqlAEvNu.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/hxiIMl31gXaXpqlAEvNu.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/hxiIMl31gXaXpqlAEvNu.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/hxiIMl31gXaXpqlAEvNu.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/hxiIMl31gXaXpqlAEvNu.png?auto=format&w=1600 1600w" width="1080" />
<h3 id="taking-an-agile-approach-to-late-optimization">Taking an agile approach to late optimization <a class="headline-link" href="https://web.dev/slow-roads/#taking-an-agile-approach-to-late-optimization">#</a></h3>
<p>I've always considered the codebase for Slow Roads to be experimental, and as such have taken a fiercely agile approach to
development. When working with a complex and rapidly-evolving system architecture, it can be difficult to predict where the
important bottlenecks may occur. The focus should be on implementing the desired features quickly, rather than cleanly, and
then working backwards to optimize systems where it really counts. The performance profiler in Chrome DevTools is invaluable
for this step, and has helped me to diagnose some major issues with earlier versions of the game. Your time as a developer is
valuable, so be sure you aren't spending time deliberating over problems that may prove insignificant or redundant.</p>
<h3 id="monitoring-the-user-experience">Monitoring the user experience <a class="headline-link" href="https://web.dev/slow-roads/#monitoring-the-user-experience">#</a></h3>
<p>While implementing all of these tricks, it's important to be sure the game performs as expected in the wild. Accommodating
a range of hardware capabilities is a staple aspect of any game development, but web games can target a much broader spectrum
comprising both top-end desktops and decade-old mobile devices at once. The simplest way to approach this is by offering settings
for adapting the most likely bottlenecks in your codebase—for both GPU- and CPU-intensive tasks—as revealed by your profiler.</p>
<p>Profiling on your own machine can only cover so much, however, so it's valuable to close the feedback loop with your users in
some way. For Slow Roads I run simple analytics which report on performance along with contextual factors such as screen resolution.
These analytics are sent to a basic Node backend using socket.io, along with any written feedback the user submits via the in-game
form. In the early days, these analytics caught a lot of important issues that could be mitigated with simple changes to the UX,
such as highlighting the settings menu when a consistently low FPS is detected, or warning that a user may need to enable hardware
acceleration if the performance is particularly poor.</p>
<h2 id="the-slow-roads-ahead">The slow roads ahead <a class="headline-link" href="https://web.dev/slow-roads/#the-slow-roads-ahead">#</a></h2>
<p>Even after taking all of these measures, there remains a significant portion of the player base that needs to play on lower
settings—primarily those using lightweight devices which lack a GPU. While the range of quality settings available leads to a
fairly even performance distribution, only 52% of players achieve above 55 FPS.</p>
<figure>
  <img alt="A matrix defined by view distance setting against detail setting, showing the average frames-per-second achieved at different pairings. The distribution is fairly evenly spread between 45 and 60, with 60 being the target for good performance. Users at low settings tend to see a lower FPS than those at high settings, highlighting the differences in client hardware capability." decoding="async" height="420" loading="lazy" sizes="(min-width: 640px) 640px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/eZFv6ulS99NQdwyjAYzi.png?auto=format" srcset="https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/eZFv6ulS99NQdwyjAYzi.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/eZFv6ulS99NQdwyjAYzi.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/eZFv6ulS99NQdwyjAYzi.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/eZFv6ulS99NQdwyjAYzi.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/eZFv6ulS99NQdwyjAYzi.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/eZFv6ulS99NQdwyjAYzi.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/eZFv6ulS99NQdwyjAYzi.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/eZFv6ulS99NQdwyjAYzi.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/eZFv6ulS99NQdwyjAYzi.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/eZFv6ulS99NQdwyjAYzi.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/eZFv6ulS99NQdwyjAYzi.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/eZFv6ulS99NQdwyjAYzi.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/eZFv6ulS99NQdwyjAYzi.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/eZFv6ulS99NQdwyjAYzi.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/eZFv6ulS99NQdwyjAYzi.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/cGQxYFGJrUUaUZyWhyt9yo5gHhs1/eZFv6ulS99NQdwyjAYzi.png?auto=format&w=1280 1280w" width="640" />
  <figcaption>
    Note that this data is somewhat skewed by users who run their browser with hardware acceleration disabled, often causing artificially low performance.
  </figcaption>
</figure>
<p>Fortunately, there are still many opportunities for making performance savings. Alongside adding further rendering tricks
to reduce GPU demand, I hope to experiment with web workers in parallelising the environment generation in the near term,
and may eventually see a need for incorporating WASM or <a href="https://developer.mozilla.org/docs/Web/API/WebGPU_API" rel="noopener">WebGPU</a> into the codebase. Any headroom I'm able to free up will allow
for richer and more diverse environments, which will be the enduring goal for the remainder of the project.</p>
<p>As hobby projects go, Slow Roads has been an overwhelmingly fulfilling way to demonstrate how surprisingly elaborate, performant,
and popular browser games can be. If I've been successful in piquing your interest in WebGL, know that technologically Slow
Roads is a fairly shallow example of its full capabilities. I strongly encourage readers to explore the <a href="https://threejs.org/" rel="noopener">Three.js showcase</a>,
and those interested in web game development in particular would be welcome to the community at <a href="https://www.webgamedev.com/" rel="noopener">webgamedev.com</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Progressive Web Apps: So erstellst du deine eigene PWA]]></title>
<description><![CDATA[Eine Progressive Web App (PWA) ist eine Form von mobilen Anwendungen, die sich durch schnelle Ladezeiten, Offline-Funktionalität und eine optimierte Benutzererfahrung auszeichnen. Als eine Art […]
The post Progressive Web Apps: So erstellst du deine eigene PWA appeared first at webdeasy.de.]]></description>
<link>https://tsecurity.de/de/1854905/it+betriebssysteme/web+tipps/progressive+web+apps+so+erstellst+du+deine+eigene+pwa/</link>
<pubDate>Sun, 09 Apr 2023 16:46:03 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Eine Progressive Web App (PWA) ist eine Form von mobilen Anwendungen, die sich durch schnelle Ladezeiten, Offline-Funktionalität und eine optimierte Benutzererfahrung auszeichnen. Als eine Art […]</p>
<p>The post <a rel="nofollow" href="https://webdeasy.de/progressive-web-app/">Progressive Web Apps: So erstellst du deine eigene PWA</a> appeared first at <a rel="nofollow" href="https://webdeasy.de/">webdeasy.de</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Are Roblox Private Servers Permanent? 3 Minute Guide!]]></title>
<description><![CDATA[Roblox Private Server being permanent is a query that many Roblox users might have. Unlike client servers that remain for an infinite time, private servers run only for a limited…
The post Are Roblox Private Servers Permanent? 3 Minute Guide! appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1846259/it+betriebssysteme/web+tipps/are+roblox+private+servers+permanent+3+minute+guide/</link>
<pubDate>Sun, 02 Apr 2023 17:01:22 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Roblox Private Server being permanent is a query that many Roblox users might have. Unlike client servers that remain for an infinite time, private servers run only for a limited…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/are-roblox-private-servers-permanent-3-minute-guide/">Are Roblox Private Servers Permanent? 3 Minute Guide!</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Why Roblox is Not Working? Reasons Explained!]]></title>
<description><![CDATA[Well, you might not be very familiar with Roblox interruptions. There has been instances where issues like Roblox not working have been noticed by some of the users. Roblox being…
The post Why Roblox is Not Working? Reasons Explained! appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1846258/it+betriebssysteme/web+tipps/why+roblox+is+not+working+reasons+explained/</link>
<pubDate>Sun, 02 Apr 2023 17:01:10 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Well, you might not be very familiar with Roblox interruptions. There has been instances where issues like Roblox not working have been noticed by some of the users. Roblox being…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/why-roblox-is-not-working-reasons-explained/">Why Roblox is Not Working? Reasons Explained!</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Will Roblox Shutdown In 2023? Details Revealed!]]></title>
<description><![CDATA[Roblox since its release from 2006 have come a long way. It is widely adopted and have millions of users presently. Due to this magnificently huge number of users in…
The post Will Roblox Shutdown In 2023? Details Revealed! appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1845497/it+betriebssysteme/web+tipps/will+roblox+shutdown+in+2023+details+revealed/</link>
<pubDate>Sat, 01 Apr 2023 19:31:22 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Roblox since its release from 2006 have come a long way. It is widely adopted and have millions of users presently. Due to this magnificently huge number of users in…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/will-roblox-shutdown-in-2023-details-revealed/">Will Roblox Shutdown In 2023? Details Revealed!</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[What Roblox Game, Baller is From? Full Info!]]></title>
<description><![CDATA[Roblox Baller is a boss character in online video game on Roblox called “Boss fighting Stages Rebirth”. In the game, player throws dodgeballs to attack the opponents. Roblox Baller became…
The post What Roblox Game, Baller is From? Full Info! appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1844366/it+betriebssysteme/web+tipps/what+roblox+game+baller+is+from+full+info/</link>
<pubDate>Fri, 31 Mar 2023 17:46:26 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Roblox Baller is a boss character in online video game on Roblox called “Boss fighting Stages Rebirth”. In the game, player throws dodgeballs to attack the opponents. Roblox Baller became…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/what-roblox-game-baller-is-from-full-info/">What Roblox Game, Baller is From? Full Info!</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Where Are APK Files Stored on Android? Updated OS Edition!]]></title>
<description><![CDATA[There are lot of users who might want to know the location of APK files stored on their android device. Since there are lot of APK files in a user’s…
The post Where Are APK Files Stored on Android? Updated OS Edition! appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1836075/it+betriebssysteme/web+tipps/where+are+apk+files+stored+on+android+updated+os+edition/</link>
<pubDate>Sat, 25 Mar 2023 18:46:50 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>There are lot of users who might want to know the location of APK files stored on their android device. Since there are lot of APK files in a user’s…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/where-are-apk-files-stored-on-android-updated-os-edition/">Where Are APK Files Stored on Android? Updated OS Edition!</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[How Roblox Was Made? 3 Minutes Story!]]></title>
<description><![CDATA[Roblox was created by Roblox corporation. The game was launched in 2006.  Its founders were David Baszuck and Erik Cassel. It is a gaming platform which has many cool features.…
The post How Roblox Was Made? 3 Minutes Story! appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1821463/it+betriebssysteme/web+tipps/how+roblox+was+made+3+minutes+story/</link>
<pubDate>Mon, 13 Mar 2023 19:31:03 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Roblox was created by Roblox corporation. The game was launched in 2006.  Its founders were David Baszuck and Erik Cassel. It is a gaming platform which has many cool features.…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/how-roblox-was-made-3-minutes-story/">How Roblox Was Made? 3 Minutes Story!</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Which Roblox Game Has Most Views? Full Analysis!]]></title>
<description><![CDATA[Roblox is a very popular platform among gamers. Thousands of games are present into the platform. Since, the games present in Roblox is significantly high. Therefore, Users really gets the…
The post Which Roblox Game Has Most Views? Full Analysis! appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1821464/it+betriebssysteme/web+tipps/which+roblox+game+has+most+views+full+analysis/</link>
<pubDate>Mon, 13 Mar 2023 19:31:03 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Roblox is a very popular platform among gamers. Thousands of games are present into the platform. Since, the games present in Roblox is significantly high. Therefore, Users really gets the…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/which-roblox-game-has-most-views-full-analysis/">Which Roblox Game Has Most Views? Full Analysis!</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Why FreeFire Is Not Downloading In My Mobile? Easy FIX!]]></title>
<description><![CDATA[Free fire is considered to be the best battle royale game presently available. The app consists of millions of users across the globe. Free fire can be played on multiple…
The post Why FreeFire Is Not Downloading In My Mobile? Easy FIX! appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1810108/it+betriebssysteme/web+tipps/why+freefire+is+not+downloading+in+my+mobile+easy+fix/</link>
<pubDate>Tue, 07 Mar 2023 06:23:36 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Free fire is considered to be the best battle royale game presently available. The app consists of millions of users across the globe. Free fire can be played on multiple…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/why-freefire-is-not-downloading-in-my-mobile-easy-fix/">Why FreeFire Is Not Downloading In My Mobile? Easy FIX!</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Can Roblox be Played on Xbox? Full Tutorial [Updated]]]></title>
<description><![CDATA[Roblox is an online gaming platform that lets users play games and create games that are to be played by another users. It certainly lets the users to use their…
The post Can Roblox be Played on Xbox? Full Tutorial [Updated] appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1810109/it+betriebssysteme/web+tipps/can+roblox+be+played+on+xbox+full+tutorial+updated/</link>
<pubDate>Tue, 07 Mar 2023 06:23:36 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Roblox is an online gaming platform that lets users play games and create games that are to be played by another users. It certainly lets the users to use their…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/can-roblox-be-played-on-xbox-full-tutorial-updated/">Can Roblox be Played on Xbox? Full Tutorial [Updated]</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Which FreeFire Server is Best? Latest Analysis]]></title>
<description><![CDATA[Free fire is a battle royale game. The number of users the game has is massive. Millions of people from every corner of the world gather daily to play Free…
The post Which FreeFire Server is Best? Latest Analysis appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1810110/it+betriebssysteme/web+tipps/which+freefire+server+is+best+latest+analysis/</link>
<pubDate>Tue, 07 Mar 2023 06:23:36 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Free fire is a battle royale game. The number of users the game has is massive. Millions of people from every corner of the world gather daily to play Free…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/which-freefire-server-is-best-latest-analysis/">Which FreeFire Server is Best? Latest Analysis</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Top 7 Fiction Books to Read on ZLibrary [2023]]]></title>
<description><![CDATA[Reading is an activity that doesn’t require much effort or special skills. Anyone can read. It’s a rewarding experience and offers several benefits, including stress reduction and vocabulary enhancement. If…
The post Top 7 Fiction Books to Read on ZLibrary [2023] appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1810111/it+betriebssysteme/web+tipps/top+7+fiction+books+to+read+on+zlibrary+2023/</link>
<pubDate>Tue, 07 Mar 2023 06:23:36 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Reading is an activity that doesn’t require much effort or special skills. Anyone can read. It’s a rewarding experience and offers several benefits, including stress reduction and vocabulary enhancement. If…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/top-7-fiction-books-to-read-on-zlibrary-2023/">Top 7 Fiction Books to Read on ZLibrary [2023]</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Top 5 Websites to Visit Online When You Are Bored ]]></title>
<description><![CDATA[When you have nothing better to do and don’t have the energy to go out with your friends, all you want to do is mindlessly scroll through the web. But…
The post Top 5 Websites to Visit Online When You Are Bored  appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1810112/it+betriebssysteme/web+tipps/top+5+websitestovisitonlinewhenyouarebored/</link>
<pubDate>Tue, 07 Mar 2023 06:23:36 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>When you have nothing better to do and don’t have the energy to go out with your friends, all you want to do is mindlessly scroll through the web. But…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/top-5-websites-to-visit-online-when-you-are-bored/">Top 5 Websites to Visit Online When You Are Bored </a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[What is Freefire Hack? Download Latest Mod Game Apk]]></title>
<description><![CDATA[Free fire is definitely one of the games that is played by millions. It is considered one of the best battle royale game presently.Gamers invest their time to level up…
The post What is Freefire Hack? Download Latest Mod Game Apk appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1806505/it+betriebssysteme/web+tipps/what+is+freefire+hack+download+latest+mod+game+apk/</link>
<pubDate>Tue, 21 Feb 2023 20:01:26 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Free fire is definitely one of the games that is played by millions. It is considered one of the best battle royale game presently.Gamers invest their time to level up…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/what-is-freefire-hack-download-latest-mod-game-apk/">What is Freefire Hack? Download Latest Mod Game Apk</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Where Freefire is Made? Origin of FreeFire + History]]></title>
<description><![CDATA[Free fire, a battle royale game that is enormously popular and is very addictive to many of its users. An assumed belief of whether or not it is a Chinese…
The post Where Freefire is Made? Origin of FreeFire + History appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1803624/it+betriebssysteme/web+tipps/where+freefire+is+made+origin+of+freefire+history/</link>
<pubDate>Sun, 19 Feb 2023 19:15:51 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Free fire, a battle royale game that is enormously popular and is very addictive to many of its users. An assumed belief of whether or not it is a Chinese…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/where-freefire-is-made-origin-of-freefire-history/">Where Freefire is Made? Origin of FreeFire + History</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Can FreeFire Max Be Downloaded? 3 Minutes Tutorial]]></title>
<description><![CDATA[Yes, Free Fire max can be downloaded. It is publicly made accessible to all. But before knowing the process of downloading, let us fist learn more about Free fire max.…
The post Can FreeFire Max Be Downloaded? 3 Minutes Tutorial appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1803625/it+betriebssysteme/web+tipps/can+freefire+max+be+downloaded+3+minutes+tutorial/</link>
<pubDate>Sun, 19 Feb 2023 19:15:51 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Yes, Free Fire max can be downloaded. It is publicly made accessible to all. But before knowing the process of downloading, let us fist learn more about Free fire max.…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/can-freefire-max-be-downloaded-3-minutes-tutorial/">Can FreeFire Max Be Downloaded? 3 Minutes Tutorial</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[50+ Working Free Hulu Accounts – Full Tutorial + UPDATED]]></title>
<description><![CDATA[If you are looking for similar products like Netflix or Amazon prime, then it might not be a bad idea to try out Hulu. It is one of the prime…
The post 50+ Working Free Hulu Accounts – Full Tutorial + UPDATED appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1802996/it+betriebssysteme/web+tipps/50+working+free+hulu+accounts+-+full+tutorial+updated/</link>
<pubDate>Sat, 18 Feb 2023 20:31:17 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>If you are looking for similar products like Netflix or Amazon prime, then it might not be a bad idea to try out Hulu. It is one of the prime…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/50-working-free-hulu-accounts-full-tutorial-updated/">50+ Working Free Hulu Accounts – Full Tutorial + UPDATED</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Will FreeFire Return in India? Detailed Analysis!]]></title>
<description><![CDATA[Return of Free Fire in India is what the players are expecting for a significant period till now. However, predicting whether free fire app will return to India or not…
The post Will FreeFire Return in India? Detailed Analysis! appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1802997/it+betriebssysteme/web+tipps/will+freefire+return+in+india+detailed+analysis/</link>
<pubDate>Sat, 18 Feb 2023 20:31:17 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Return of Free Fire in India is what the players are expecting for a significant period till now. However, predicting whether free fire app will return to India or not…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/will-freefire-return-in-india-detailed-analysis/">Will FreeFire Return in India? Detailed Analysis!</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Pokemon Go Like Games – Top 5 Similar Games Like Pokemon [Updated]]]></title>
<description><![CDATA[If you like playing Pokemon Go than you might not mind trying out the games that can be the best substitute for Pokemon Go. Here are top 5 similar games…
The post Pokemon Go Like Games – Top 5 Similar Games Like Pokemon [Updated] appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1799155/it+betriebssysteme/web+tipps/pokemon+go+like+games+-+top+5+similar+games+like+pokemon+updated/</link>
<pubDate>Wed, 15 Feb 2023 22:01:29 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>If you like playing Pokemon Go than you might not mind trying out the games that can be the best substitute for Pokemon Go. Here are top 5 similar games…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/pokemon-go-like-games-top-5-similar-games-like-pokemon-updated/">Pokemon Go Like Games – Top 5 Similar Games Like Pokemon [Updated]</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[How to Tame a Cat in Minecraft? Full Updated Tutorial!]]></title>
<description><![CDATA[If you want to have a friend in Minecraft that will follow you anywhere and obey your orders, then taming a stray cat might not be a bad option. Here…
The post How to Tame a Cat in Minecraft? Full Updated Tutorial! appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1799001/it+betriebssysteme/web+tipps/how+to+tame+a+cat+in+minecraft+full+updated+tutorial/</link>
<pubDate>Wed, 15 Feb 2023 19:46:23 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>If you want to have a friend in Minecraft that will follow you anywhere and obey your orders, then taming a stray cat might not be a bad option. Here…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/how-to-tame-a-cat-in-minecraft-full-updated-tutorial/">How to Tame a Cat in Minecraft? Full Updated Tutorial!</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[How to Make Lanterns in Minecraft? Full Tutorial]]></title>
<description><![CDATA[Minecraft being a very popular game is worth spending time on. Lanterns in Minecraft will obviously give certain provisions to the user to his advantage. Lantern becomes extremely important in…
The post How to Make Lanterns in Minecraft? Full Tutorial appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1797013/it+betriebssysteme/web+tipps/how+to+make+lanterns+in+minecraft+full+tutorial/</link>
<pubDate>Tue, 14 Feb 2023 17:46:25 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Minecraft being a very popular game is worth spending time on. Lanterns in Minecraft will obviously give certain provisions to the user to his advantage. Lantern becomes extremely important in…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/how-to-make-lanterns-in-minecraft-full-tutorial/">How to Make Lanterns in Minecraft? Full Tutorial</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[How to make lead in Minecraft – Updated FULL Tutorial]]></title>
<description><![CDATA[Minecraft being a very popular game is a very exciting and worth spending time on. Lead in Minecraft facilitates the player to explore new fun in game horizons. Here is…
The post How to make lead in Minecraft – Updated FULL Tutorial appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1795543/it+betriebssysteme/web+tipps/how+to+make+lead+in+minecraft+-+updated+full+tutorial/</link>
<pubDate>Mon, 13 Feb 2023 20:46:26 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Minecraft being a very popular game is a very exciting and worth spending time on. Lead in Minecraft facilitates the player to explore new fun in game horizons. Here is…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/how-to-make-lead-in-minecraft-updated-full-tutorial/">How to make lead in Minecraft – Updated FULL Tutorial</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Arceus X Mod – Download Best Roblox Mod Menu Hack]]></title>
<description><![CDATA[There are many different Roblox hacks present freely on the internet, multiple hacks are also created because each Roblox hack promises of offering solutions to different problems. Arceus X is…
The post Arceus X Mod – Download Best Roblox Mod Menu Hack appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1794972/it+betriebssysteme/web+tipps/arceus+x+mod+-+download+best+roblox+mod+menu+hack/</link>
<pubDate>Mon, 13 Feb 2023 19:01:14 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>There are many different Roblox hacks present freely on the internet, multiple hacks are also created because each Roblox hack promises of offering solutions to different problems. Arceus X is…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/arceus-x-mod-download-best-roblox-mod-menu-hack/">Arceus X Mod – Download Best Roblox Mod Menu Hack</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Mobdro APK Download – Latest App For Android [2023]]]></title>
<description><![CDATA[Mobdro is an online video streaming app built for android. It lets you stream videos for free. It is known for its different genres of content. Mobdro also has many…
The post Mobdro APK Download – Latest App For Android [2023] appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1792975/it+betriebssysteme/web+tipps/mobdro+apk+download+-+latest+app+for+android+2023/</link>
<pubDate>Sat, 11 Feb 2023 20:01:23 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Mobdro is an online video streaming app built for android. It lets you stream videos for free. It is known for its different genres of content. Mobdro also has many…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/mobdro-apk-download-latest-app-for-android-2023/">Mobdro APK Download – Latest App For Android [2023]</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Summoners War Mod Menu – Download Latest Hack Game]]></title>
<description><![CDATA[Summoners war mod menu is a role playing game. It is one of the top most popular game. Since, its launch its user base constantly is seeking to grow. Summoners…
The post Summoners War Mod Menu – Download Latest Hack Game appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1792976/it+betriebssysteme/web+tipps/summoners+war+mod+menu+-+download+latest+hack+game/</link>
<pubDate>Sat, 11 Feb 2023 20:01:23 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Summoners war mod menu is a role playing game. It is one of the top most popular game. Since, its launch its user base constantly is seeking to grow. Summoners…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/summoners-war-mod-menu-download-latest-hack-game/">Summoners War Mod Menu – Download Latest Hack Game</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Dragon City APK – Download Latest Gaming App]]></title>
<description><![CDATA[Dragon city is a free online multiplayer social simulation game. It is one of the many popular game playable in multiple platforms. Dragon City is one of the most engaging…
The post Dragon City APK – Download Latest Gaming App appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1792202/it+betriebssysteme/web+tipps/dragon+city+apk+-+download+latest+gaming+app/</link>
<pubDate>Fri, 10 Feb 2023 19:30:47 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Dragon city is a free online multiplayer social simulation game. It is one of the many popular game playable in multiple platforms. Dragon City is one of the most engaging…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/dragon-city-apk-download-latest-gaming-app/">Dragon City APK – Download Latest Gaming App</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Appmuck – Download Latest App for Android APK]]></title>
<description><![CDATA[Appmuck is a site people get in to search modified apps. It is a very well known source for downloading mod apps. The site consists of more than hundred mod…
The post Appmuck – Download Latest App for Android APK appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1792203/it+betriebssysteme/web+tipps/appmuck+-+download+latest+app+for+android+apk/</link>
<pubDate>Fri, 10 Feb 2023 19:30:47 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Appmuck is a site people get in to search modified apps. It is a very well known source for downloading mod apps. The site consists of more than hundred mod…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/appmuck-download-latest-app-for-android-apk/">Appmuck – Download Latest App for Android APK</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Kahoot Cheat – How to cheat on Kahoot? Full Tutorial!]]></title>
<description><![CDATA[Kahoot is a learning-based game paltform. It is one form of education but represented more interestingly. The features Kahoot offers really make it to stand out of many similar products.…
The post Kahoot Cheat – How to cheat on Kahoot? Full Tutorial! appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1790155/it+betriebssysteme/web+tipps/kahoot+cheat+-+how+to+cheat+on+kahoot+full+tutorial/</link>
<pubDate>Thu, 09 Feb 2023 16:01:30 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Kahoot is a learning-based game paltform. It is one form of education but represented more interestingly. The features Kahoot offers really make it to stand out of many similar products.…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/kahoot-cheat-how-to-cheat-on-kahoot-full-tutorial/">Kahoot Cheat – How to cheat on Kahoot? Full Tutorial!</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Clash Royale Hacked – Download Latest Game APK]]></title>
<description><![CDATA[Clash Royale is a multiplayer real-time, head-to-head battle game. It is one of the most popular games. It is needed to be played tactfully implementing various strategies. Since, with its…
The post Clash Royale Hacked – Download Latest Game APK appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1790156/it+betriebssysteme/web+tipps/clash+royale+hacked+-+download+latest+game+apk/</link>
<pubDate>Thu, 09 Feb 2023 16:01:30 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Clash Royale is a multiplayer real-time, head-to-head battle game. It is one of the most popular games. It is needed to be played tactfully implementing various strategies. Since, with its…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/clash-royale-hacked-download-latest-game-apk/">Clash Royale Hacked – Download Latest Game APK</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[1v1.lol Unblocked – Unblock Gaming Website [2023]]]></title>
<description><![CDATA[1v1.lol is a multiplayer third Person shooter game. It is the successor of the very popular Just Build lol. It is intended to hone your gaming skills for many battle…
The post 1v1.lol Unblocked – Unblock Gaming Website [2023] appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1789184/it+betriebssysteme/web+tipps/1v1lol+unblocked+-+unblock+gaming+website+2023/</link>
<pubDate>Wed, 08 Feb 2023 21:31:41 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>1v1.lol is a multiplayer third Person shooter game. It is the successor of the very popular Just Build lol. It is intended to hone your gaming skills for many battle…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/1v1-lol-unblocked-unblock-gaming-website-2023/">1v1.lol Unblocked – Unblock Gaming Website [2023]</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Free Fire Advance Server – Download Latest Apk]]></title>
<description><![CDATA[An app that will give you in-game rewards. An app that will give you hands on first impressions on new features. Well, that is what Free Fire Advance is created…
The post Free Fire Advance Server – Download Latest Apk appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1789109/it+betriebssysteme/web+tipps/free+fire+advance+server+-+download+latest+apk/</link>
<pubDate>Wed, 08 Feb 2023 19:46:38 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>An app that will give you in-game rewards. An app that will give you hands on first impressions on new features. Well, that is what Free Fire Advance is created…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/free-fire-advance-server-download-latest-apk/">Free Fire Advance Server – Download Latest Apk</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Emergence of Cloud Management Dominating It Conventional Infrastructure]]></title>
<description><![CDATA[The cloud is considered a cornerstone of the future technological landscape. Midway through the 2010s, the cloud became the de facto location for most if not all infrastructure, data center,…
The post Emergence of Cloud Management Dominating It Conventional Infrastructure appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1784610/it+betriebssysteme/web+tipps/emergence+of+cloud+management+dominating+it+conventional+infrastructure/</link>
<pubDate>Tue, 07 Feb 2023 21:55:16 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>The cloud is considered a cornerstone of the future technological landscape. Midway through the 2010s, the cloud became the de facto location for most if not all infrastructure, data center,…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/emergence-of-cloud-management-dominating-it-conventional-infrastructure/">Emergence of Cloud Management Dominating It Conventional Infrastructure</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[5 Advanced Tips and Tricks -Rainbow Six Siege]]></title>
<description><![CDATA[Rainbow Six Siege now rivals the acclaimed Call of Duty series as one of the most popular first-person shooters. Its popularity is well-deserved since it is the most tactical shooter…
The post 5 Advanced Tips and Tricks -Rainbow Six Siege appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1784611/it+betriebssysteme/web+tipps/5+advanced+tips+and+tricks+-rainbow+six+siege/</link>
<pubDate>Tue, 07 Feb 2023 21:55:16 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Rainbow Six Siege now rivals the acclaimed Call of Duty series as one of the most popular first-person shooters. Its popularity is well-deserved since it is the most tactical shooter…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/5-advanced-tips-and-tricks-rainbow-six-siege/">&lt;strong&gt;5 Advanced Tips and Tricks -Rainbow Six Siege&lt;/strong&gt;</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Top 10 Countries That Are the Largest Adopters of Crypto]]></title>
<description><![CDATA[2021 was a year where cryptocurrencies saw massive growth. This growth was followed by a drop, and the industry remains volatile. According to experts, the number of people who hold…
The post Top 10 Countries That Are the Largest Adopters of Crypto appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1737302/it+betriebssysteme/web+tipps/top+10+countries+that+are+the+largest+adopters+of+crypto/</link>
<pubDate>Sat, 17 Dec 2022 18:30:30 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>2021 was a year where cryptocurrencies saw massive growth. This growth was followed by a drop, and the industry remains volatile. According to experts, the number of people who hold…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/top-10-countries-that-are-the-largest-adopters-of-crypto/">&lt;strong&gt;Top 10 Countries That Are the Largest Adopters of Crypto&lt;/strong&gt;</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[How Data Is Integral To Any Business Today?]]></title>
<description><![CDATA[Data is integral to any business today. Whether it’s understanding customer behavior, analyzing trends, or building models, data is a valuable asset. As data and cloud become more and more…
The post How Data Is Integral To Any Business Today? appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1737253/it+betriebssysteme/web+tipps/how+data+is+integral+to+any+business+today/</link>
<pubDate>Sat, 17 Dec 2022 17:15:32 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Data is integral to any business today. Whether it’s understanding customer behavior, analyzing trends, or building models, data is a valuable asset. As data and cloud become more and more…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/how-data-is-integral-to-any-business-today/">How Data Is Integral To Any Business Today?</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[How Mercado Libre optimized for Web Vitals (TBT/FID)]]></title>
<description><![CDATA[Mercado Libre is the largest e-commerce and payments ecosystem in Latin America. It is present in 18
countries and is a market leader in Brazil, Mexico, and Argentina (based on unique visitors and
pageviews).
Web performance has been a focus for the company for a long time, but they recently form...]]></description>
<link>https://tsecurity.de/de/1725702/it+betriebssysteme/web+tipps/how+mercado+libre+optimized+for+web+vitals+tbtfid/</link>
<pubDate>Thu, 08 Dec 2022 19:45:06 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Mercado Libre is the largest e-commerce and payments ecosystem in Latin America. It is present in 18
countries and is a market leader in Brazil, Mexico, and Argentina (based on unique visitors and
pageviews).</p>
<p>Web performance has been a focus for the company for a long time, but they recently formed a team to
monitor performance and apply optimizations across different parts of the site.</p>
<p>This article summarizes the work done by <a href="https://twitter.com/pazguille" rel="noopener">Guille Paz</a>, <a href="https://www.linkedin.com/in/pcarminatti/" rel="noopener">Pablo
Carminatti</a>, and <a href="https://twitter.com/oburkhay" rel="noopener">Oleh
Burkhay</a> from Mercado Libre's frontend architecture team to optimize
one of the Core Web Vitals: <a href="https://web.dev/fid/">First Input Delay (FID)</a> and its lab proxy,
<a href="https://web.dev/tbt/">Total Blocking Time (TBT)</a>.</p>
<div class="stats">
  <div class="stats__item">
    <p class="stats__figure">90<sub>%</sub></p>
    <p>Reduction in Max Potential FID in Lighthouse</p>
  </div>
  <div class="stats__item">
    <p class="stats__figure">9<sub>%</sub></p>
    <p>More users perceiving FID as "Fast" in CrUX</p>
  </div>
</div>
<h2 id="long-tasks,-first-input-delay,-and-total-blocking-time">Long tasks, First Input Delay, and Total Blocking Time <a class="w-headline-link" href="https://web.dev/how-mercadolibre-optimized-web-vitals/#long-tasks,-first-input-delay,-and-total-blocking-time">#</a></h2>
<p>Running expensive JavaScript code can lead to <a href="https://web.dev/long-tasks-devtools/">long tasks</a>,
which are those that run for more than <strong>50ms</strong> in the browser's main thread.</p>
<p>FID (First Input Delay) measures the time from when a user first interacts with a page (e.g. when
they click on a link) to the time when the browser is actually able to begin processing event
handlers in response to that interaction. A site that executes expensive JavaScript code will likely
have several long tasks, which will end up negatively impacting FID.</p>
<p>To provide a good user experience, sites should strive to have a First Input Delay of less than 100
milliseconds:
<picture></picture></p>
  <source srcset="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/eXyvkqRHQZ5iG38Axh1Z.svg" media="(min-width: 640px)" />
  <img alt="Good fid values are 2.5 seconds, poor values are greater than 4.0 seconds and anything in between needs improvement" decoding="async" height="96" loading="lazy" src="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Se4TiXIdp8jtLJVScWed.svg" width="384" />

<p>While Mercado Libre's site was performing well in most sections, they found in the <a href="https://developer.chrome.com/docs/crux/" rel="noopener">Chrome User
Experience Report</a> that
product detail pages had a poor FID. Based on that information, they decided to focus their efforts
on improving the interactivity for product pages in the site.</p>
<figure>
  <img alt="Mobile and Desktop versions of a Mercado Libre product detail page." decoding="async" height="346" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format" srcset="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gg8ohXTbFgr6Msacklt0.png?auto=format&w=1600 1600w" width="800" />
   <figcaption>
      Mobile and Desktop versions of a Mercado Libre product detail page.
  </figcaption>
</figure>
<p>These pages allow the user to perform complex interactions, so the goal was interactivity
optimization, without interfering with valuable functionality.</p>
<h2 id="measure-interactivity-of-product-detail-pages">Measure interactivity of product detail pages <a class="w-headline-link" href="https://web.dev/how-mercadolibre-optimized-web-vitals/#measure-interactivity-of-product-detail-pages">#</a></h2>
<p>FID requires a real user and thus cannot be measured in the lab. However, the <a href="https://web.dev/tbt/">Total Blocking Time
(TBT)</a> metric is lab-measurable, correlates well with FID in the field, and
also captures issues that affect interactivity.</p>
<p>In the following trace, for example, while the <strong>total time</strong> spent running tasks on the main thread
is 560 ms, only 345 ms of that time is considered <strong>total blocking time</strong> (the sum of the portions
of each task that exceeds 50ms):</p>
<p><a href="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/us8USZRiCh9sg1X2zEpN.svg"><img alt="A tasks timeline on the main thread showing blocking time" decoding="async" height="156" loading="lazy" src="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/us8USZRiCh9sg1X2zEpN.svg" width="800" /></a></p>
<p>Mercado Libre took TBT as a proxy metric in the lab, in order to measure and improve the
interactivity of product detail pages in the real world.</p>
<p>Here's the general approach they took:</p>
<ul>
<li>Use <a href="https://www.webpagetest.org/" rel="noopener">WebPageTest</a> to determine exactly which scripts were keeping
the main thread busy on a real device.</li>
<li>Use <a href="https://developer.chrome.com/docs/lighthouse/overview/" rel="noopener">Lighthouse</a> to determine the impact of
the changes in <a href="https://developer.chrome.com/docs/lighthouse/performance/lighthouse-max-potential-fid/" rel="noopener">Max Potential First Input Delay (Max Potential
FID)</a>.</li>
</ul>
<aside class="aside flow bg-state-info-bg color-state-info-text"><div class=" flow"> During this project Mercado Libre used <a href="https://developer.chrome.com/docs/lighthouse/performance/lighthouse-max-potential-fid/">Max Potential FID</a> in Lighthouse because that was the tool's main metric for measuring interactivity at that time. Lighthouse now recommends using <a href="https://web.dev/tbt/">Total Blocking Time</a> instead. </div></aside>
<h2 id="use-webpagetest-to-visualize-long-tasks">Use WebPageTest to visualize long tasks <a class="w-headline-link" href="https://web.dev/how-mercadolibre-optimized-web-vitals/#use-webpagetest-to-visualize-long-tasks">#</a></h2>
<p>WebPageTest (WPT) is a web performance tool that allows you to run tests on real devices in
different locations around the world.</p>
<p>Mercado Libre used WPT to reproduce the experience of their users by choosing a device type and
location similar to real users. Specifically, they chose a <strong>Moto 4G device</strong> and <strong>Dulles,
Virginia</strong>, because they wanted to approximate the experience of Mercado Libre users in Mexico. By
observing the main thread view of WPT, Mercado Libre found that there were several consecutive long
tasks blocking the main thread for 2 seconds:</p>
<figure>
  <img alt="Main thread view of Mercado Libre&#x27;s product detail pages." decoding="async" height="188" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format" srcset="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/NbVmhDK9MLvyvEBbBYAZ.png?auto=format&w=1600 1600w" width="800" />
   <figcaption>
      Main thread view of Mercado Libre's product detail pages.
  </figcaption>
</figure>
<p>Analyzing the corresponding waterfall they found that a considerable part of those two seconds came
from their analytics module. The main bundle size of the application was large (950KB) and took a
long time to parse, compile, and execute.</p>
<figure>
  <img alt="Waterfall view of product detail pages." decoding="async" height="363" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format" srcset="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7QHKOutyGzfXN52hPOOz.png?auto=format&w=1600 1600w" width="800" />
   <figcaption>
      Waterfall view of Mercado Libre's product detail pages.
  </figcaption>
</figure>
<h2 id="use-lighthouse-to-determine-max-potential-fid">Use Lighthouse to determine Max Potential FID <a class="w-headline-link" href="https://web.dev/how-mercadolibre-optimized-web-vitals/#use-lighthouse-to-determine-max-potential-fid">#</a></h2>
<p>Lighthouse doesn't allow you to choose between different devices and locations, but it's a very
useful tool for diagnosing sites and obtaining performance recommendations.</p>
<p>When running Lighthouse on product detail pages, Mercado Libre found that the <strong>Max Potential FID</strong>
was the only metric marked in red, with a value of <strong>1710ms</strong>.</p>
<figure>
  <img alt="Lighthouse metrics in a PSI report for Mercado Libre&#x27;s product detail pages." decoding="async" height="235" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format" srcset="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/rufTQY4scq1V3ghVIQPy.png?auto=format&w=1600 1600w" width="800" />
</figure>
<p>Based on this, Mercado Libre set a goal to improve their Max Potential FID score in a laboratory
tool like Lighthouse and WebPageTest, under the assumption that these improvements would affect
their real users, and therefore, show up in real user monitoring tools like the Chrome User
Experience Report.</p>
<h2 id="optimize-long-tasks">Optimize long tasks <a class="w-headline-link" href="https://web.dev/how-mercadolibre-optimized-web-vitals/#optimize-long-tasks">#</a></h2>
<h3 id="first-iteration">First iteration <a class="w-headline-link" href="https://web.dev/how-mercadolibre-optimized-web-vitals/#first-iteration">#</a></h3>
<p>Based on the main thread trace, Mercado Libre set the goal of optimizing the two modules that were
running expensive code.</p>
<p>They started optimizing the performance of the internal tracking module. This module contained a
CPU-heavy task that wasn't critical for the module to work, and therefore could be safely removed.
This led to a 2% reduction in JavaScript for the whole site.</p>
<p>After that they started to work on <strong>improving the general bundle size</strong>:</p>
<p>Mercado Libre used
<a href="https://github.com/webpack-contrib/webpack-bundle-analyzer" rel="noopener">webpack-bundle-analyzer</a> to detect
opportunities for optimization:</p>
<ul>
<li>Initially they were requiring the full <a href="https://lodash.com/" rel="noopener">Lodash module</a>. This was replaced
with a <a href="https://lodash.com/per-method-packages" rel="noopener">per-method require</a> to load only a subset of
Lodash instead of the whole library, and used in conjunction with
<a href="https://github.com/lodash/lodash-webpack-plugin" rel="noopener">lodash-webpack-plugin</a> to shrink Lodash even
further.</li>
</ul>
<p>They also applied the following <a href="https://babeljs.io/" rel="noopener">Babel</a> optimizations:</p>
<ul>
<li>Using <a href="https://babeljs.io/docs/en/babel-plugin-transform-runtime" rel="noopener">@babel/plugin-transform-runtime</a>
to reuse Babel's helpers throughout the code, and reduce the size of the bundle considerably.</li>
<li>Using
<a href="https://github.com/jean-smaug/babel-plugin-search-and-replace#readme" rel="noopener">babel-plugin-search-and-replace</a>
to replace tokens at build time, in order to remove a large configuration file inside the main
bundle.</li>
<li>Adding
<a href="https://github.com/oliviertassinari/babel-plugin-transform-react-remove-prop-types#readme" rel="noopener">babel-plugin-transform-react-remove-prop-types</a>
to save some extra bytes by removing the prop types.</li>
</ul>
<p>As a result of these optimizations, the bundle size was reduced <strong>by approximately 16%</strong>.</p>
<h2 id="measure-impact">Measure impact <a class="w-headline-link" href="https://web.dev/how-mercadolibre-optimized-web-vitals/#measure-impact">#</a></h2>
<p>The changes lowered Mercado Libre's consecutive long tasks <strong>from two seconds to one second</strong>:</p>
<figure>
  <img alt="Main thread view of Mercado Libre&#x27;s product detail pages after first round of optimizations." decoding="async" height="315" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format" srcset="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/17At96aKcPrvNTWgb3FU.png?auto=format&w=1600 1600w" width="800" />
   <figcaption>
      In the top waterfall of WPT there’s a long red bar (in the <b>Page is Interactive</b> row) between seconds 3 and 5. In the bottom waterfall, the bar has been broken into smaller pieces, occupying the main thread for shorter periods of time.
  </figcaption>
</figure>
<p>Lighthouse showed a <strong>57% reduction</strong> in Max Potential First Input Delay:</p>
<figure>
  <img alt="Lighthouse metrics in a PSI report for Mercado Libre&#x27;s product detail pages after first round of optimizations." decoding="async" height="252" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format" srcset="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/Sxa1wKCXVfsHZNbfQ1ZZ.png?auto=format&w=1600 1600w" width="800" />
</figure>
<h2 id="second-iteration">Second iteration <a class="w-headline-link" href="https://web.dev/how-mercadolibre-optimized-web-vitals/#second-iteration">#</a></h2>
<p>The team continued digging into long tasks in order to find subsequent improvements.</p>
<figure>
  <img alt="Detailed view of main thread view of Mercado Libre&#x27;s product detail pages after first round of optimizations." decoding="async" height="259" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format" srcset="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/tlMIQRWDAeEY7UV4cFQo.png?auto=format&w=1600 1600w" width="800" />
   <figcaption>
      The Waterfall (not pictured) helped Mercado Libre identify which libraries were using the main thread heavily (<b>Browser Main Thread</b> row) and the <b>Page is Interactive</b> row clearly shows that this main thread activity is blocking interactivity.
  </figcaption>
</figure>
<p>Based on that information they decided to implement the following changes:</p>
<ul>
<li>Continue reducing the main bundle size to optimize compile and parse time (e.g. by removing
duplicate dependencies throughout the different modules).</li>
<li>Apply <a href="https://web.dev/reduce-javascript-payloads-with-code-splitting/">code splitting</a> at
component level, to divide JavaScript in smaller chunks and allow for smarter loading of the
different components.</li>
<li>Defer <a href="https://developers.google.com/web/updates/2019/02/rendering-on-the-web#rehydration" rel="noopener">component
hydration</a> to
allow for a smarter use of the main thread. This technique is commonly referred to as <a href="https://addyosmani.com/blog/rehydration/" rel="noopener">partial
hydration</a>.</li>
</ul>
<h2 id="measure-impact-2">Measure impact <a class="w-headline-link" href="https://web.dev/how-mercadolibre-optimized-web-vitals/#measure-impact-2">#</a></h2>
<p>The resulting WebPageTest trace showed even smaller chunks of JS execution:</p>
<figure>
  <img alt="Main thread view of Mercado Libre&#x27;s product detail pages after secoond round of optimizations." decoding="async" height="150" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format" srcset="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gAvo2VXimablQ8OhFDdn.png?auto=format&w=1600 1600w" width="800" />
</figure>
<p>And their Max Potential FID time in Lighthouse was reduced <strong>by an additional 60%</strong>:</p>
<figure>
  <img alt="Lighthouse metrics in a PSI report for Mercado Libre&#x27;s product detail pages after first round of optimizations." decoding="async" height="345" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format" srcset="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/7W672LOor2SgqZsmK3BL.png?auto=format&w=1600 1600w" width="800" />
</figure>
<h2 id="visualize-progress-for-real-users">Visualize progress for real users <a class="w-headline-link" href="https://web.dev/how-mercadolibre-optimized-web-vitals/#visualize-progress-for-real-users">#</a></h2>
<p>While laboratory testing tools like WebPageTest and Lighthouse are great for iterating on solutions
during development, the true goal is to improve the experience for real users.</p>
<p>The <a href="https://developer.chrome.com/docs/crux/" rel="noopener">Chrome User Experience
Report</a> provides user
experience metrics for how real-world Chrome users experience popular destinations on the web. The
data from the report can be obtained by <a href="https://web.dev/chrome-ux-report-bigquery/">running queries in
BigQuery</a>,
<a href="https://pagespeed.web.dev/" rel="noopener">PageSpeedInsights</a>, or the <a href="https://web.dev/chrome-ux-report-api/">CrUX
API</a>.</p>
<p>The <a href="https://datastudio.google.com/c/datasources/create?connectorId=AKfycbxk7u2UtsqzgaA7I0bvkaJbBPannEx0_zmeCsGh9bBZy7wFMLrQ8x24WxpBzk_ln2i7" rel="noopener">CrUX
dashboard</a>
is an easy way to visualize the progress of core metrics:</p>
<figure>
  <img alt="." decoding="async" height="163" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format" srcset="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/3bUj9l2ISMr3mojaUG4o.png?auto=format&w=1600 1600w" width="800" />
    <figcaption>
      Mercado Libre's FID progress between Jan 2020 and April 2020. Before the optimization project, 82% of the users were perceiving FID as fast (below 100ms). After, more than 91% of the users were perceiving the metric as fast.
    </figcaption>
</figure>
<h2 id="next-steps">Next steps <a class="w-headline-link" href="https://web.dev/how-mercadolibre-optimized-web-vitals/#next-steps">#</a></h2>
<p>Web performance is never a finished task, and Mercado Libre understands the value these
optimizations bring to their users. While they continue applying several optimizations across the
site, including <a href="https://web.dev/instant-navigation-experiences/#production-cases">prefetching</a> in
product listing pages, image optimizations, and others, they continue adding improvements to product
listing pages to reduce Total Blocking Time (TBT), and by proxy FID, even more. These optimizations
include:</p>
<ul>
<li>Iterating on the code splitting solution.</li>
<li>Improving the execution of third-party scripts.</li>
<li>Continuing improvements in asset bundling at the bundler level
(<a href="https://webpack.js.org/" rel="noopener">webpack</a>).</li>
</ul>
<p>Mercado Libre has a holistic view of performance, so while they continue optimizing interactivity in
the site, they have also started assessing opportunities for improvement on the other two current
<a href="https://web.dev/vitals/">Core Web Vitals</a>: <a href="https://web.dev/lcp/">LCP (Largest Contentful Paint)</a>
and <a href="https://web.dev/cls/">CLS (Cumulative Layout Shift)</a> even more.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Shopping for speed on eBay.com]]></title>
<description><![CDATA[Speed was a company-wide initiative for eBay in 2019, with many teams determined to make the
site and apps as fast as possible for users. In fact, for every 100 milliseconds improvement in
search page loading time, eBay saw a 0.5% increase in "Add to Cart" count.

  
    100ms
    Improvement in ...]]></description>
<link>https://tsecurity.de/de/1725703/it+betriebssysteme/web+tipps/shopping+for+speed+on+ebaycom/</link>
<pubDate>Thu, 08 Dec 2022 19:45:06 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Speed was a <a href="https://tech.ebayinc.com/engineering/speed-by-a-thousand-cuts/" rel="noopener">company-wide initiative</a> for eBay in 2019, with many teams determined to make the
site and apps as fast as possible for users. In fact, <strong>for every 100 milliseconds improvement in
search page loading time, eBay saw a 0.5% increase in &quot;Add to Cart&quot; count.</strong></p>
<div class="stats">
  <div class="stats__item">
    <p class="stats__figure">100<sub>ms</sub></p>
    <p>Improvement in load time</p>
  </div>
  <div class="stats__item">
    <p class="stats__figure">0.5<sub>%</sub></p>
    <p>Increase in "Add to Cart" count</p>
  </div>
</div>
<p>Through the adoption of <a href="https://web.dev/performance-budgets-101/">Performance Budgets</a> (derived
after doing a competitive study with the <a href="https://developer.chrome.com/docs/crux/" rel="noopener">Chrome User Experience
Report</a>) and a focus on key
<a href="https://web.dev/user-centric-performance-metrics/">user-centric performance metrics</a>, eBay was able to make
significant improvements to site speed.</p>
<figure>
  <img alt="The optimization efforst led to a 10% improvement on the homepage, a 13% improvement on the search page, and 3% improvement on item pages." decoding="async" height="186" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/JXQCBQRuezhMQhfQShXq.png?auto=format" srcset="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/JXQCBQRuezhMQhfQShXq.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/JXQCBQRuezhMQhfQShXq.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/JXQCBQRuezhMQhfQShXq.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/JXQCBQRuezhMQhfQShXq.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/JXQCBQRuezhMQhfQShXq.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/JXQCBQRuezhMQhfQShXq.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/JXQCBQRuezhMQhfQShXq.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/JXQCBQRuezhMQhfQShXq.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/JXQCBQRuezhMQhfQShXq.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/JXQCBQRuezhMQhfQShXq.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/JXQCBQRuezhMQhfQShXq.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/JXQCBQRuezhMQhfQShXq.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/JXQCBQRuezhMQhfQShXq.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/JXQCBQRuezhMQhfQShXq.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/JXQCBQRuezhMQhfQShXq.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/JXQCBQRuezhMQhfQShXq.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/JXQCBQRuezhMQhfQShXq.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    eBay's speed improvements.
  </figcaption>
</figure>
<p>…and their Chrome User Experience Report data highlights these improvements, too.</p>
<figure>
  <img alt="Screenshots of PageSpeed Insights view of Chrome User Experience Report data highlighting fast FCP of 70% and fast FID of 88% for eBay.com" decoding="async" height="237" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/admin/YeJPjxdDBrdbgLxcbl7E.png?auto=format" srcset="https://web-dev.imgix.net/image/admin/YeJPjxdDBrdbgLxcbl7E.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/admin/YeJPjxdDBrdbgLxcbl7E.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/admin/YeJPjxdDBrdbgLxcbl7E.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/admin/YeJPjxdDBrdbgLxcbl7E.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/admin/YeJPjxdDBrdbgLxcbl7E.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/admin/YeJPjxdDBrdbgLxcbl7E.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/admin/YeJPjxdDBrdbgLxcbl7E.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/admin/YeJPjxdDBrdbgLxcbl7E.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/admin/YeJPjxdDBrdbgLxcbl7E.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/admin/YeJPjxdDBrdbgLxcbl7E.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/admin/YeJPjxdDBrdbgLxcbl7E.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/admin/YeJPjxdDBrdbgLxcbl7E.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/admin/YeJPjxdDBrdbgLxcbl7E.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/admin/YeJPjxdDBrdbgLxcbl7E.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/admin/YeJPjxdDBrdbgLxcbl7E.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/admin/YeJPjxdDBrdbgLxcbl7E.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/admin/YeJPjxdDBrdbgLxcbl7E.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    Chrome User Experience Report data for <a href="https://web.dev/fcp/">First Contentful Paint</a> and <a href="https://web.dev/fid/">First Input Delay</a> for the eBay.com origin.
  </figcaption>
</figure>
<p>There's still more work ahead but here's eBay's learnings so far.</p>
<h2 id="web-performance-cuts">Web Performance &quot;cuts&quot; <a class="w-headline-link" href="https://web.dev/shopping-for-speed-on-ebay/#web-performance-cuts">#</a></h2>
<p>The improvements eBay made were possible due to the reduction or &quot;cuts&quot; (in the size and time) of
various entities that take part in a user's journey.  This post covers topics that are relevant to
the web developer community at large, rather than eBay-specific topics.</p>
<h2 id="reduce-payload-across-all-text-resources">Reduce payload across all text resources <a class="w-headline-link" href="https://web.dev/shopping-for-speed-on-ebay/#reduce-payload-across-all-text-resources">#</a></h2>
<p>One way to make sites fast is to simply load less code. eBay reduced their text payloads by trimming
all the <a href="https://web.dev/remove-unused-code/">unused and unnecessary bytes</a> of JavaScript, CSS,
HTML, and JSON responses served to users. Previously, with every new feature, eBay kept increasing
the payload of their responses, without cleaning up what was unused. This added up over time and
became a performance bottleneck. Teams usually procrastinated on this cleanup activity, but you'd
be surprised by how much eBay saved.</p>
<p>The &quot;cut&quot; here is the wasted bytes in the response payload.</p>
<h2 id="critical-path-optimization-for-above-the-fold-content">Critical path optimization for above-the-fold content <a class="w-headline-link" href="https://web.dev/shopping-for-speed-on-ebay/#critical-path-optimization-for-above-the-fold-content">#</a></h2>
<p>Not every pixel on the screen is equally important. The content <a href="https://www.optimizely.com/optimization-glossary/above-the-fold/" rel="noopener">above-the-fold</a> is <a href="https://web.dev/extract-critical-css/">more
critical</a> than something below-the-fold. iOS/Android/desktop and web apps
are aware of this, but what about services? eBay's service architecture has a layer called
<a href="https://tech.ebayinc.com/engineering/experience-services-ebays-solution-to-multi-screen-application-development/" rel="noopener">Experience
Services</a>,
which the frontends (platform-specific apps and web servers) talk to.
This layer is specifically designed to be view- or device-based, rather than entity-based like item,
user, or order. eBay then introduced the concept of the critical path for Experience Services.
When a request comes to these services, they work on getting the data for above-the-fold
content immediately, by calling other upstream services in parallel. Once data is ready, it is
instantly flushed.
The below-the-fold data is sent in a later chunk or lazy-loaded. The outcome: users get to see
above-the-fold content quicker.</p>
<p>The &quot;cut&quot; here is the time spent by services to display relevant
content.</p>
<h2 id="image-optimizations">Image optimizations <a class="w-headline-link" href="https://web.dev/shopping-for-speed-on-ebay/#image-optimizations">#</a></h2>
<p>Images are <a href="https://almanac.httparchive.org/en/2019/media" rel="noopener">one of the largest contributors to page
bloat</a>. Even
small optimizations go a long way. eBay did two optimizations for images.</p>
<p>First, eBay standardized on the <a href="https://web.dev/serve-images-webp/">WebP image format</a> for search
results across all platforms, including iOS, Android, and <a href="https://caniuse.com/#feat=webp" rel="noopener">supported browsers</a>. The search
results page is the most image-heavy page at eBay, and they were already using WebP, but not in a
consistent pattern.</p>
<figure>
  <img alt="Screenshots of the DevTools network panel filtered to show WebP image requests from eBay.com" decoding="async" height="506" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/admin/wxY64wQbCvgdEuI8DlUY.png?auto=format" srcset="https://web-dev.imgix.net/image/admin/wxY64wQbCvgdEuI8DlUY.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/admin/wxY64wQbCvgdEuI8DlUY.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/admin/wxY64wQbCvgdEuI8DlUY.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/admin/wxY64wQbCvgdEuI8DlUY.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/admin/wxY64wQbCvgdEuI8DlUY.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/admin/wxY64wQbCvgdEuI8DlUY.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/admin/wxY64wQbCvgdEuI8DlUY.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/admin/wxY64wQbCvgdEuI8DlUY.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/admin/wxY64wQbCvgdEuI8DlUY.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/admin/wxY64wQbCvgdEuI8DlUY.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/admin/wxY64wQbCvgdEuI8DlUY.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/admin/wxY64wQbCvgdEuI8DlUY.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/admin/wxY64wQbCvgdEuI8DlUY.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/admin/wxY64wQbCvgdEuI8DlUY.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/admin/wxY64wQbCvgdEuI8DlUY.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/admin/wxY64wQbCvgdEuI8DlUY.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/admin/wxY64wQbCvgdEuI8DlUY.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    WebP images being served to supported browsers on eBay.com.
  </figcaption>
</figure>
<p>Second, though eBay's listing images are heavily optimized (in both size and format), the same rigor
did not apply for curated images (for example, the top module on the
<a href="https://www.ebay.com/" rel="noopener">homepage</a>). eBay has a lot of hand-curated images, which are uploaded
through various tools. Previously the optimizations were up to the uploader, but now eBay enforces
the rules within the tools, so all images uploaded will be optimized appropriately.</p>
<p>The &quot;cut&quot; here is the wasted image bytes sent to users.</p>
<h2 id="predictive-prefetch-of-static-assets">Predictive prefetch of static assets <a class="w-headline-link" href="https://web.dev/shopping-for-speed-on-ebay/#predictive-prefetch-of-static-assets">#</a></h2>
<p>A user session on eBay is not just one page. It is a flow. For example, the flow can be a navigation from the homepage to a search page to an item page. So why don't pages in the flow help each other? That is the idea of <a href="https://web.dev/predictive-prefetching/">predictive prefetch</a>, where one page prefetches the static assets required for the next likely page.</p>
<p>With predictive prefetch, when a user navigates to the predicted page, the assets are already in the browser cache. This is done for CSS and JavaScript assets, where the URLs can be retrieved ahead of time. One thing to note here is that it helps only on first-time navigations. On subsequent navigations, the static assets will already be in the cache.</p>
<figure>
  <img alt="eBay is doing predictive prefetching of static assets. Home prefetches assets for Search, Search prefetches assets for Item, and so on. Machine-learning- and analytics-based prefetching is under consideration." decoding="async" height="448" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/dcipECBEv200bO8CWkrs.png?auto=format" srcset="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/dcipECBEv200bO8CWkrs.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/dcipECBEv200bO8CWkrs.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/dcipECBEv200bO8CWkrs.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/dcipECBEv200bO8CWkrs.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/dcipECBEv200bO8CWkrs.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/dcipECBEv200bO8CWkrs.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/dcipECBEv200bO8CWkrs.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/dcipECBEv200bO8CWkrs.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/dcipECBEv200bO8CWkrs.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/dcipECBEv200bO8CWkrs.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/dcipECBEv200bO8CWkrs.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/dcipECBEv200bO8CWkrs.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/dcipECBEv200bO8CWkrs.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/dcipECBEv200bO8CWkrs.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/dcipECBEv200bO8CWkrs.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/dcipECBEv200bO8CWkrs.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/dcipECBEv200bO8CWkrs.png?auto=format&w=1600 1600w" width="800" />
</figure>
<p>The &quot;cut&quot; here is the network time for CSS and JavaScript static assets on the first navigation.</p>
<h2 id="prefetching-top-search-results">Prefetching top search results <a class="w-headline-link" href="https://web.dev/shopping-for-speed-on-ebay/#prefetching-top-search-results">#</a></h2>
<p>When a user searches eBay, eBay's analytics data suggests that it is highly likely that the user
will navigate to an item in the top 10 of the search results. So eBay now prefetches the
items from search and keeps them ready for when the user navigates. The prefetching happens at two levels.</p>
<p>The first level happens server-side, where the item service caches the top 10 items in search results. When the user
goes to one of those items, eBay now saves server processing time. Server-side caching is leveraged by
platform-specific apps and is rolled out globally.</p>
<p>The other level happens in the browser cache, which is available
in Australia. Item prefetch was an advanced optimization due to the dynamic nature of items. There
are also many nuances to it: page impressions, capacity, auction items, and so on. You can learn more
about it in <a href="https://www.youtube.com/watch?v=ogEhUnQdQiU&amp;t=984s" rel="noopener">LinkedIn's Performance Engineering Meetup
presentation</a>, or stay tuned for a detailed blog
post on the topic from eBay's engineers.</p>
<figure>
  <img alt="eBay prefetches the top 5 items in search result pages for fast subsequent loads. This happens during idle time with requestIdleCallback(). This resulted in a 759ms faster median above-the-fold time, a custom metric that is similar to First Meaningful Paint. eBay saw a positive impact on conversions from prefetching." decoding="async" height="451" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/6wW7yHAD7vMBDUDCzm2B.png?auto=format" srcset="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/6wW7yHAD7vMBDUDCzm2B.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/6wW7yHAD7vMBDUDCzm2B.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/6wW7yHAD7vMBDUDCzm2B.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/6wW7yHAD7vMBDUDCzm2B.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/6wW7yHAD7vMBDUDCzm2B.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/6wW7yHAD7vMBDUDCzm2B.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/6wW7yHAD7vMBDUDCzm2B.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/6wW7yHAD7vMBDUDCzm2B.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/6wW7yHAD7vMBDUDCzm2B.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/6wW7yHAD7vMBDUDCzm2B.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/6wW7yHAD7vMBDUDCzm2B.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/6wW7yHAD7vMBDUDCzm2B.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/6wW7yHAD7vMBDUDCzm2B.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/6wW7yHAD7vMBDUDCzm2B.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/6wW7yHAD7vMBDUDCzm2B.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/6wW7yHAD7vMBDUDCzm2B.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/6wW7yHAD7vMBDUDCzm2B.png?auto=format&w=1600 1600w" width="800" />
</figure>
<p>The &quot;cut&quot; here can either be server processing time or network time,
depending on where the item is cached.</p>
<h2 id="eager-downloading-of-search-images">Eager downloading of search images <a class="w-headline-link" href="https://web.dev/shopping-for-speed-on-ebay/#eager-downloading-of-search-images">#</a></h2>
<p>In the search results page, when a query is issued at a high level, two things happen. One is the recall/ranking step, where the most relevant items matching the query are returned. The second step is augmenting the recalled items with additional user-context related information such as shipping costs.
eBay now immediately sends the first 10 item images to the browser in a chunk along with the header, so the downloads can start before the rest of the markup arrives. As a result, the images will now appear quicker. This change is rolled out globally for the web platform.</p>
<p>The &quot;cut&quot; here is the download start time for search result images.</p>
<h2 id="edge-caching-for-autosuggestion-data">Edge caching for autosuggestion data <a class="w-headline-link" href="https://web.dev/shopping-for-speed-on-ebay/#edge-caching-for-autosuggestion-data">#</a></h2>
<p>When users type in letters in the search box, suggestions pop-up. These suggestions do not change for letter combinations for at least a day. They are ideal candidates to be cached and served from a <a href="https://en.wikipedia.org/wiki/Content_delivery_network" rel="noopener">CDN</a> (for a max of 24 hours), instead of requests going all the way to a data center. International markets especially benefit from CDN caching.</p>
<figure>
  <img alt="A screenshot of eBay&#x27;s search box displaying autocomplete suggestions for a search query." decoding="async" height="417" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/5HVWuq5nIvQ6aCoaltIl.png?auto=format" srcset="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/5HVWuq5nIvQ6aCoaltIl.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/5HVWuq5nIvQ6aCoaltIl.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/5HVWuq5nIvQ6aCoaltIl.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/5HVWuq5nIvQ6aCoaltIl.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/5HVWuq5nIvQ6aCoaltIl.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/5HVWuq5nIvQ6aCoaltIl.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/5HVWuq5nIvQ6aCoaltIl.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/5HVWuq5nIvQ6aCoaltIl.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/5HVWuq5nIvQ6aCoaltIl.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/5HVWuq5nIvQ6aCoaltIl.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/5HVWuq5nIvQ6aCoaltIl.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/5HVWuq5nIvQ6aCoaltIl.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/5HVWuq5nIvQ6aCoaltIl.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/5HVWuq5nIvQ6aCoaltIl.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/5HVWuq5nIvQ6aCoaltIl.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/5HVWuq5nIvQ6aCoaltIl.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/5HVWuq5nIvQ6aCoaltIl.png?auto=format&w=1600 1600w" width="800" />
</figure>
<p>There was a catch, though. eBay had some elements of personalization in the suggestions pop-up,
which can't be cached efficiently. Fortunately, it was not an issue in the platform-specific apps, as the user
interface for personalization and suggestions could be separated. For the web, in international
markets, latency was more important than the small benefit of personalization. With that out of the
way, eBay now has autosuggestions served from a CDN cache globally for platform-specific apps and non-US
markets for eBay.com.</p>
<p>The &quot;cut&quot; here is the network latency and server processing time for
autosuggestions.</p>
<h2 id="edge-caching-for-unrecognized-homepage-users">Edge caching for unrecognized homepage users <a class="w-headline-link" href="https://web.dev/shopping-for-speed-on-ebay/#edge-caching-for-unrecognized-homepage-users">#</a></h2>
<p>For the web platform, the homepage content for unrecognized users is the same for a particular region. These are users who are either using eBay for the first time or starting a fresh session, hence no personalization. Though the homepage creatives keep changing frequently there is still room for caching.</p>
<p>eBay decided to cache the unrecognized user content (HTML) on their edge network (<a href="https://en.wikipedia.org/wiki/Point_of_presence" rel="noopener">PoPs</a>) for a short period. First-time users can now get homepage content served from a server near them, instead of from a faraway data center. eBay is still experimenting with this in international markets, where it will have a bigger impact.</p>
<p>The &quot;cut&quot; here is again both network latency and server processing time for unrecognized users.</p>
<h2 id="optimizations-for-other-platforms">Optimizations for other platforms <a class="w-headline-link" href="https://web.dev/shopping-for-speed-on-ebay/#optimizations-for-other-platforms">#</a></h2>
<h3 id="iosandroid-app-parsing-improvements">iOS/Android app parsing improvements <a class="w-headline-link" href="https://web.dev/shopping-for-speed-on-ebay/#iosandroid-app-parsing-improvements">#</a></h3>
<p>iOS/Android apps talk to backend services whose response format is typically JSON. These JSON payloads can be large. Instead of parsing the whole JSON to render something on the screen, eBay introduced an efficient parsing algorithm that optimizes for content that needs to be displayed immediately.</p>
<p>Users can now see the content quicker. In addition, for the Android app, eBay starts initializing the search view controllers as soon as the user starts typing in the search box (iOS already had this optimization). Previously this happened only after users pressed the search button. Now users can get to their search results faster. The &quot;cut&quot; here is the time spent by devices to display relevant content.</p>
<h3 id="android-app-startup-time-improvements">Android app startup time improvements <a class="w-headline-link" href="https://web.dev/shopping-for-speed-on-ebay/#android-app-startup-time-improvements">#</a></h3>
<p>This applies to <a href="https://developer.android.com/topic/performance/vitals/launch-time#cold" rel="noopener">cold start</a> time optimizations for Android apps. When an app is cold started, a lot of initialization happens both at the OS level and application level. Reducing the initialization time at the application level helps users see the home screen quicker. eBay did some profiling and noticed that not all initializations are required to display content and that some can be done lazily.</p>
<p>More importantly, eBay observed that there was a blocking third-party analytics call that delayed the rendering on the screen. Removing the blocking call and making it async further helped cold start times. The &quot;cut&quot; here is the unnecessary startup time for Android apps.</p>
<h2 id="conclusions">Conclusions <a class="w-headline-link" href="https://web.dev/shopping-for-speed-on-ebay/#conclusions">#</a></h2>
<p>All the performance &quot;cuts&quot; eBay made collectively contributed towards moving the needle, and it happened over a period of time. The releases were phased in throughout the year, with each release shaving off tens of milliseconds, ultimately reaching the point where eBay is now:</p>
<figure>
  <img alt="Screenshots of Chrome UX Report showing field data improvements for eBay.com." decoding="async" height="529" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/admin/GxKfB8GHUd9cQWLb0Pkj.png?auto=format" srcset="https://web-dev.imgix.net/image/admin/GxKfB8GHUd9cQWLb0Pkj.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/admin/GxKfB8GHUd9cQWLb0Pkj.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/admin/GxKfB8GHUd9cQWLb0Pkj.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/admin/GxKfB8GHUd9cQWLb0Pkj.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/admin/GxKfB8GHUd9cQWLb0Pkj.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/admin/GxKfB8GHUd9cQWLb0Pkj.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/admin/GxKfB8GHUd9cQWLb0Pkj.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/admin/GxKfB8GHUd9cQWLb0Pkj.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/admin/GxKfB8GHUd9cQWLb0Pkj.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/admin/GxKfB8GHUd9cQWLb0Pkj.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/admin/GxKfB8GHUd9cQWLb0Pkj.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/admin/GxKfB8GHUd9cQWLb0Pkj.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/admin/GxKfB8GHUd9cQWLb0Pkj.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/admin/GxKfB8GHUd9cQWLb0Pkj.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/admin/GxKfB8GHUd9cQWLb0Pkj.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/admin/GxKfB8GHUd9cQWLb0Pkj.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/admin/GxKfB8GHUd9cQWLb0Pkj.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    The impact of eBay's speed efforts on their field metrics over time, as illustrated by the <a href="https://g.co/chromeuxdash">Chrome UX Report Dashboard</a>.
  </figcaption>
</figure>
<p>Performance is a feature and a <a href="https://web.dev/value-of-speed/">competitive advantage</a>. Optimized experiences lead to higher user engagement, conversions, and ROI. In eBay's case, these optimizations varied from things that were low-effort to a few that were advanced.</p>
<p>Check out <a href="https://tech.ebayinc.com/engineering/speed-by-a-thousand-cuts/" rel="noopener">Speed by a thousand cuts</a> to learn more and be on the lookout for more detailed articles by eBay engineers on their performance work in the near future.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[How Truebil made the web its channel of growth]]></title>
<description><![CDATA[About #
Founded in 2015, Truebil is an Indian online marketplace that sells 100% certified used cars. With over 1.4 million monthly active users, it's a one-stop solution that includes title transfer, insurance, loans, and service warranties. Prospective customers can see individual product pages...]]></description>
<link>https://tsecurity.de/de/1725704/it+betriebssysteme/web+tipps/how+truebil+made+the+web+its+channel+of+growth/</link>
<pubDate>Thu, 08 Dec 2022 19:45:06 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h2 id="about">About <a class="w-headline-link" href="https://web.dev/truebil-lite/#about">#</a></h2>
<p>Founded in 2015, Truebil is an Indian online marketplace that sells 100% certified used cars. With over 1.4 million monthly active users, it's a one-stop solution that includes title transfer, insurance, loans, and service warranties. Prospective customers can see individual product pages with images and detailed inspection reports and get vehicle evaluations with the site's &quot;Compare&quot; and &quot;Truescore&quot; features. Truebil differentiates its product with rich features, including personalized recommendations based on machine learning, an add-to-favorites feature, a share-a-car feature, and more.</p>
<h2 id="challenge">Challenge <a class="w-headline-link" href="https://web.dev/truebil-lite/#challenge">#</a></h2>
<p>Truebil is a lean startup with low-frequency, high-value transactions, so it was critical to choose the right platform to prioritize and invest in.</p>
<p>Truebil identified mobile as their target platform, and they chose the web for their first app, <a href="https://m.truebil.com/" rel="noopener">Truebil Lite</a>, because of the web's easy discovery and low friction. Web technology provides lower development costs, less data and memory usage, and significantly lower customer acquisition costs than building an Android/iOS app. And by building a progressive web app (PWA), Truebil could get all the perks of the web <em>and</em> the benefits of iOS/Android.</p>
<h2 id="solution">Solution <a class="w-headline-link" href="https://web.dev/truebil-lite/#solution">#</a></h2>
<p>An in-house team took four months to develop Truebil Lite using React, Django, and Preact (for production migration). They set clear guiding principles for the web app based on user goals. The experience had to be:</p>
<ul>
<li><strong>Fast</strong> on first load and subsequent navigations,</li>
<li><strong>Reliable</strong>, independent of the user's network or device constraints, and</li>
<li><strong>Engaging</strong>, especially for small mobile screens, so users would want to return to it.</li>
</ul>
<h3 id="optimize-for-fast-first-load-and-navigations">Optimize for fast first load and navigations <a class="w-headline-link" href="https://web.dev/truebil-lite/#optimize-for-fast-first-load-and-navigations">#</a></h3>
<p>Using <a href="https://developer.chrome.com/docs/lighthouse/overview/" rel="noopener">Lighthouse</a> to guide performance optimizations, the team adopted a performance-first culture while implementing new features. Truebil was able to significantly improve user experience by prioritizing the <a href="https://web.dev/fcp/">First Contentful Paint</a> and <a href="https://web.dev/tti/">Time to Interactive (TTI)</a> metrics and optimizing for fast first loads, repeat visits, and smooth navigation. The team achieved those results by setting performance budgets and using a variety of techniques to achieve them.</p>
<h4 id="set-performance-budgets">Set performance budgets <a class="w-headline-link" href="https://web.dev/truebil-lite/#set-performance-budgets">#</a></h4>
<p>With a performance-first mindset, the Truebil team chose to architect their experience as a single page app with server-side rendering for first load and client-side rendering for subsequent loads. Keeping web apps with client side rendering performant can be difficult, so Truebil set very strict <a href="https://web.dev/fast#set-performance-budgets">performance budgets</a> to ensure they don't compromise on speed, especially as they add more features.</p>
<p>The team set strict milestone-based budgets for TTI with the goal of keeping it below five seconds. To meet that goal they manually ensured no build would exceed a 250 KB JavaScript bundle size, kept a constant check on image sizes, and continually tracked the app's Lighthouse performance score.</p>
<h4 id="optimize-javascript-bundles">Optimize JavaScript bundles <a class="w-headline-link" href="https://web.dev/truebil-lite/#optimize-javascript-bundles">#</a></h4>
<p>The team started with the basics by using the <a href="https://web.dev/apply-instant-loading-with-prpl">PRPL pattern</a> to precache and optimize JavaScript payloads and by moving to HTTP/2 to serve critical JavaScript bundles.</p>
<p>To lazy-load non-critical resources, they used their framework-level lazy-loading components to load below-the-fold fragments.</p>
<p>To remove any JavaScript bundle bottlenecks, the team <a href="https://web.dev/reduce-javascript-payloads-with-code-splitting">reduced payloads via code splitting</a>. They used component- and route-based chunking to reduce main bundle size and <strong>improve their loading time by 44%,</strong> with TTI falling from 6 seconds to about 5 seconds and <a href="https://developer.chrome.com/docs/lighthouse/performance/first-meaningful-paint/" rel="noopener">First Meaningful Paint (FMP)</a> from 4.1 seconds to 3.6 seconds.</p>
<figure>
  <img alt="Screenshots of Chrome DevTools showing Truebil Lite&#x27;s build size before and after code splitting." decoding="async" height="350" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format" srcset="https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/admin/BHIhtRrQcc2Ec22vLYtT.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>Impact of reducing chunk size.</figcaption>
</figure>
<h4 id="inline-critical-css">Inline critical CSS <a class="w-headline-link" href="https://web.dev/truebil-lite/#inline-critical-css">#</a></h4>
<p>To further improve FMP, the team used Lighthouse to find opportunities for and validate the impact of performance optimizations. Lighthouse indicated that reducing render blocking CSS would have the biggest effect, so Truebil inlined all critical CSS and <a href="https://web.dev/defer-non-critical-css">deferred non-critical CSS</a>. This technique <strong>reduced FMP by around 2 seconds</strong>.</p>
<figure>
  <img alt="Screenshots of Chrome DevTools showing Truebil Lite&#x27;s time to First Meaningful Paint before and after inlining CSS." decoding="async" height="496" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format" srcset="https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/admin/GnQDJz27SuLuLgdvM6Q3.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>Impact of inlining critical CSS.</figcaption>
</figure>
<h4 id="avoid-multiple,-costly-round-trips-to-any-origin">Avoid multiple, costly round trips to any origin <a class="w-headline-link" href="https://web.dev/truebil-lite/#avoid-multiple,-costly-round-trips-to-any-origin">#</a></h4>
<p>To mitigate overhead from DNS and TLS, Truebil used <a href="https://developer.chrome.com/docs/lighthouse/performance/uses-rel-preconnect/" rel="noopener"><code>&lt;link rel=&quot;preconnect&quot;&gt;</code></a> and <code>&lt;link rel=&quot;dns-prefetch&quot;&gt;</code>. This approach causes the browser to complete the TLS handshake as soon as possible on page load and pre-resolve cross-origin domain names, allowing for a secure, snappy user experience.</p>
<figure>
  <img alt="Screenshots of Chrome DevTools showing the effect of rel=preconnect." decoding="async" height="350" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format" srcset="https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/admin/e1taLW99INISJAsEP0xe.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>Impact of adding <code>&#60;link rel=preconnect&#62;</code>.</figcaption>
</figure>
<h4 id="dynamically-prefetch-the-next-page">Dynamically prefetch the next page <a class="w-headline-link" href="https://web.dev/truebil-lite/#dynamically-prefetch-the-next-page">#</a></h4>
<p>By analyzing their data, the team identified the most common user journeys that they could optimize for. In these cases, the app dynamically downloads the next page resource by using <code>&lt;link rel=prefetch&gt;</code> to ensure smooth navigation for users. While the team manually identifies the links to prefetch, they use webpack to bundle the JS for those links.</p>
<figure>
  <img alt="Screenshots of the Truebil Lit app and Chrome DevTools showing that network requests aren&#x27;t needed on common navigations because the assets have already been prefetched." decoding="async" height="1006" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format" srcset="https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/admin/fuxD2hQlNcTPKUHMQpN2.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>The effect of prefetching assets for common user journeys.</figcaption>
</figure>
<h4 id="optimize-images-and-fonts">Optimize images and fonts <a class="w-headline-link" href="https://web.dev/truebil-lite/#optimize-images-and-fonts">#</a></h4>
<p>Images are a critical part of Truebil's product experience and credibility, with each product listing including up to 40 pictures. To ensure that images do not block page load, the team chose to <a href="https://web.dev/image-cdns">serve all their resources from a CDN</a> and use <a href="https://imagemagick.org/index.php" rel="noopener">imagemagick</a> for image optimization. They also Gzipped all compressible resources, including images, JavaScript, and CSS, to further cut down load time.</p>
<p>To <a href="https://web.dev/avoid-invisible-text">avoid a flash of invisible text</a> while keeping load time as low as possible, Truebil set up their CSS to use system fonts as a fallback until external fonts have loaded.</p>
<h4 id="further-optimizations">Further optimizations <a class="w-headline-link" href="https://web.dev/truebil-lite/#further-optimizations">#</a></h4>
<p>When the app was ready, the team wanted to further reduce the vendor bundle size and JavaScript execution time, so they switched their React app to Preact in production. (Learn more in the <a href="https://web.dev/react">React</a> collection.) This approach helped them reduce the vendor bundle size from 82.3 KB to 51.2 KB.</p>
<h3 id="build-in-reliability">Build in reliability <a class="w-headline-link" href="https://web.dev/truebil-lite/#build-in-reliability">#</a></h3>
<p>With a focus on the Indian market, a vast majority of Truebil's users access their product on patchy networks that sometimes fall into bandwidths as low as 2G. So building a resilient experience was critical not only to improving performance under constrained network conditions but also to delivering a product that their users could rely on—one that <em>always</em> works.</p>
<h4 id="a-hybrid-caching-strategy-for-reliable-loading">A hybrid caching strategy for reliable loading <a class="w-headline-link" href="https://web.dev/truebil-lite/#a-hybrid-caching-strategy-for-reliable-loading">#</a></h4>
<p>The interactivity and rate of change for Truebil's content vary a lot. To ensure that <em>all</em> its content is both fresh and reliable, the Truebil team implemented <a href="https://web.dev/runtime-caching-with-workbox">API caching</a> using a combination of network-first, cache-first, and fastest-first strategies.</p>
<p>For static pages, such as the subscriptions page, Truebil uses a cache-first strategy to go to their subscription API cache first, falling back to the network.</p>
<p>For pages with dynamic content that rarely changes, such as their product listing or details pages, Truebil uses a network-first strategy so that the browser first checks the network for content before falling back to the API cache if the network is unavailable.</p>
<p>And for dynamic pages that change often, such as the home, filter, search, and city pages, Truebil uses a fastest-first strategy to choose between network or cache based on whichever comes first. To ensure that content is fresh, the cache is updated whenever the network response differs from what's in the cache.</p>
<h4 id="service-workers-for-a-full-offline-experience">Service workers for a full offline experience <a class="w-headline-link" href="https://web.dev/truebil-lite/#service-workers-for-a-full-offline-experience">#</a></h4>
<p>Even though a large part of Truebil's content is highly dynamic—cars can be added or bought at any time—the team wanted to ensure that their users had <em>some</em> content to engage with, even if they were going through patchy networks or were completely offline.</p>
<p>Using <a href="https://web.dev/service-workers-cache-storage/">service workers</a>, the team was able to cache both static data and the dynamic data that a user has already interacted with so that the user can view it offline. To make sure users know that content might change when they come back online, the team changed the UI to grayscale to indicate offline mode. Browsing product pages is a critical part of the Truebil user journey. Users who have visited the PWA at least once can browse listings and product pages that they have visited before but won't be able to see any updates to the listing or the product.</p>
<figure>
  <img alt="A screenshot of the Truebil Lite app in offline mode." decoding="async" height="384" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format" srcset="https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/admin/XMJug442wdtUbxe86r2h.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    Truebil Lite in offline mode.
  </figcaption>
</figure>
<h3 id="improve-engagement-to-keep-users-coming-back">Improve engagement to keep users coming back <a class="w-headline-link" href="https://web.dev/truebil-lite/#improve-engagement-to-keep-users-coming-back">#</a></h3>
<h4 id="an-engaging-first-experience">An engaging first experience <a class="w-headline-link" href="https://web.dev/truebil-lite/#an-engaging-first-experience">#</a></h4>
<p>Since most of their users come from paid channels, Truebil needed to supplement their fast loading web app with a product that surfaces highly relevant recommendations to increase conversions. While the team uses a recommendation system based on sophisticated filtering for existing users, their system doesn't work for users who log in for the first time.</p>
<p>To avoid giving their first-time users a cold start, the team integrated a recommendation system using their digital marketing efforts. They add product details such as car model, price, and body type into an ad's destination URL through a UTM parameter, which is read by their recommendation system and reflected in the products surfaced. In case the sysme reads no such details in the URL, it falls back to popular cars, which is a combination of popular models, popular budgets, and cars that have been popular in the last few weeks or days.</p>
<h4 id="an-installable-web-app">An installable web app <a class="w-headline-link" href="https://web.dev/truebil-lite/#an-installable-web-app">#</a></h4>
<p>Having built a fast, full-featured web app with a compelling user experience, Truebil wanted to ensure that their users would keep coming back. They realized that making the app installable would make repeat visits much more seamless.</p>
<p>The team implemented the <a href="https://developers.google.com/web/fundamentals/app-install-banners/" rel="noopener">Add to Home Screen</a> feature to make their product a full progressive web app (PWA). This approach allowed users to add Truebil Lite to the home screen and launch it in full-screen mode. And since they had already implemented an offline mode, the team was able to add the new feature easily.</p>
<p>To ensure that their users weren't spammed and to increase the probability that users would install the app, the team recently updated their strategy for <a href="https://developers.google.com/web/fundamentals/app-install-banners/promoting-install-mobile" rel="noopener">promoting PWA installation</a> so that  installation prompts appear when they'll actually be useful to different kinds of users. Truebil settled on a three-part strategy:</p>
<ul>
<li>Show prompts when the user has completed an action or is idle.</li>
<li>Show contextual prompts to mature users.</li>
<li>Show a banner when the user has spent a set amount of time on the site.</li>
</ul>
<h4 id="default-banners-on-process-completion-and-on-high-traffic-pages">Default banners on process completion and on high-traffic pages <a class="w-headline-link" href="https://web.dev/truebil-lite/#default-banners-on-process-completion-and-on-high-traffic-pages">#</a></h4>
<p>The team decided to show an installation banner when a user completes a task or is on high-traffic pages but idle (that is, not taking an action, such as scrolling or filling out a form). This approach allowed them to avoid interrupting the user's activity.</p>
<img alt="Screenshots of Truebil Lite&#x27;s installation banner." decoding="async" height="549" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format" srcset="https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/admin/geEMVQf4YjnkVr9HPRzt.png?auto=format&w=1600 1600w" width="800" />
<h4 id="contextual-prompts-for-mature-users">Contextual prompts for mature users <a class="w-headline-link" href="https://web.dev/truebil-lite/#contextual-prompts-for-mature-users">#</a></h4>
<p>For users who had interacted with the app for a while, the team used highly contextual custom messages to show the value of installing the app to the home screen:</p>
<img alt="Screenshots of Truebil Lite&#x27;s contextual installation prompts for mature users." decoding="async" height="514" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format" srcset="https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/admin/uPxqbyldE0kNurRPsk2S.png?auto=format&w=1600 1600w" width="800" />
<h4 id="a-custom-banner-for-time-based-prompts">A custom banner for time-based prompts <a class="w-headline-link" href="https://web.dev/truebil-lite/#a-custom-banner-for-time-based-prompts">#</a></h4>
<p>Finally, the team built in a non-intrusive banner with a notification-like design that's triggered at specific events, such as opening a listing page or after the user has spent a set amount of time spent in the app:</p>
<figure>
  <img alt="A screenshot of Truebil Lite&#x27;s time-based installation prompt banner." decoding="async" height="868" loading="lazy" sizes="(min-width: 452px) 452px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format" srcset="https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/admin/5UN2g9g7NWq85CMVoRYf.png?auto=format&w=904 904w" width="452" />
</figure>
<p>Because of these improvements, Truebil's conversion and engagement rates have grown significantly with <strong>26% longer user sessions</strong> and <strong>61% more conversions</strong>, which is significant for their business given the high transaction value of each conversion.</p>
<blockquote>
  <p>For a startup with limited resources, choosing the right platform can be critical to the success of the business. Moving to a PWA focused on speed, resilience, and engagement, enabled us to increase our revenue-to-marketing spend by <strong>80%</strong> thanks to increased conversions and the frictionless reach of the web.</p>
  <cite>Rakesh Raman, Co-Founder and Chief of Product & Data Science at Truebil</cite>
</blockquote>
<div class="stats">
  <div class="stats__item">
    <p class="stats__figure">44<sub>%</sub></p>
    <p>Improvement in loading time</p>
  </div>
  <div class="stats__item">
    <p class="stats__figure">26<sub>%</sub></p>
    <p>Longer user sessions</p>
  </div>
  <div class="stats__item">
    <p class="stats__figure">61<sub>%</sub></p>
    <p>Increase in conversions</p>
  </div>
  <div class="stats__item">
    <p class="stats__figure">80<sub>%</sub></p>
    <p>Increase in revenue-to-marketing spend</p>
  </div>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Building a Better Web - Part 1: A faster YouTube on web]]></title>
<description><![CDATA[The Chrome team often talks about "building a better web", but what does that
mean? Web experiences should be fast,
accessible, and use device
capabilities in the moment when users need it most.
Dogfooding is part of Google's culture, so the Chrome team has partnered with
YouTube to share lessons...]]></description>
<link>https://tsecurity.de/de/1725681/it+betriebssysteme/web+tipps/building+a+better+web+-+part+1+a+faster+youtube+on+web/</link>
<pubDate>Thu, 08 Dec 2022 19:45:05 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>The Chrome team often talks about &quot;building a <em>better</em> web&quot;, but what does that
mean? Web experiences should be <a href="https://web.dev/why-speed-matters/">fast</a>,
<a href="https://web.dev/accessibility/">accessible</a>, and use <a href="https://web.dev/reliable/">device
capabilities</a> in the moment when users need it most.
<a href="https://en.wikipedia.org/wiki/Eating_your_own_dog_food" rel="noopener">Dogfooding</a> is part of Google's culture, so the Chrome team has partnered with
YouTube to share lessons learned along the way in a new series called, &quot;Building
a better web&quot;. The first part of the series will dive into how YouTube built a
faster web experience.</p>
<figure>
<img alt="PageSpeed Insights showing the Chrome UX Report data for YouTube Mobile Web passing the Core Web Vitals." decoding="async" height="450" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/hIcVf8Pob6DaLrmNjdNX.png?auto=format" srcset="https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/hIcVf8Pob6DaLrmNjdNX.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/hIcVf8Pob6DaLrmNjdNX.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/hIcVf8Pob6DaLrmNjdNX.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/hIcVf8Pob6DaLrmNjdNX.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/hIcVf8Pob6DaLrmNjdNX.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/hIcVf8Pob6DaLrmNjdNX.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/hIcVf8Pob6DaLrmNjdNX.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/hIcVf8Pob6DaLrmNjdNX.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/hIcVf8Pob6DaLrmNjdNX.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/hIcVf8Pob6DaLrmNjdNX.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/hIcVf8Pob6DaLrmNjdNX.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/hIcVf8Pob6DaLrmNjdNX.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/hIcVf8Pob6DaLrmNjdNX.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/hIcVf8Pob6DaLrmNjdNX.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/hIcVf8Pob6DaLrmNjdNX.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/hIcVf8Pob6DaLrmNjdNX.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/hIcVf8Pob6DaLrmNjdNX.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    The YouTube for mobile web Watch page passing the <a href="https://web.dev/vitals">Core Web Vitals</a> thresholds.
  </figcaption>
</figure>
<h2 id="building-a-faster-web">Building a faster web <a class="w-headline-link" href="https://web.dev/better-youtube-web-part1/#building-a-faster-web">#</a></h2>
<p>At YouTube, <em>performance</em> relates to how fast videos and other content—such as
recommendations and comments—load on web pages. Performance is also measured by how quickly YouTube
responds to user interactions such as search, player control, likes, and shares.</p>
<p>Growing developing markets, such as Brazil, India, and Indonesia are important
for YouTube mobile web. Because many users in these regions have slower devices
and limited network bandwidth, ensuring a fast and seamless experience is a
critical goal.</p>
<p>To provide an inclusive experience for all users, YouTube set out to improve
performance metrics such as <a href="https://web.dev/vitals">Core Web Vitals</a> through lazy-loading and code
modernization.</p>
<h3 id="improving-core-web-vitals">Improving Core Web Vitals <a class="w-headline-link" href="https://web.dev/better-youtube-web-part1/#improving-core-web-vitals">#</a></h3>
<p>To identify areas of improvement, the YouTube team used the <a href="https://developer.chrome.com/docs/crux/" rel="noopener">Chrome User Experience Report (CrUX)</a> to see how real users were experiencing video watch and search result pages on
mobile in <a href="https://web.dev/lab-and-field-data-differences/#field-data">the
field</a>. They
realized their Core Web Vitals metrics had a lot of room for improvement, with
their <a href="https://web.dev/lcp/">Largest Contentful Paint (LCP)</a> metric clocking in
at 4-6 seconds in some cases. This was substantially higher than their target of
2.5 seconds.</p>
<img alt="Charts of FCP and LCP showing YouTube Watch page pass rates as well as the YouTube origin." decoding="async" height="285" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/uy6hO7M60rRw3bTfXTCH.png?auto=format" srcset="https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/uy6hO7M60rRw3bTfXTCH.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/uy6hO7M60rRw3bTfXTCH.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/uy6hO7M60rRw3bTfXTCH.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/uy6hO7M60rRw3bTfXTCH.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/uy6hO7M60rRw3bTfXTCH.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/uy6hO7M60rRw3bTfXTCH.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/uy6hO7M60rRw3bTfXTCH.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/uy6hO7M60rRw3bTfXTCH.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/uy6hO7M60rRw3bTfXTCH.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/uy6hO7M60rRw3bTfXTCH.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/uy6hO7M60rRw3bTfXTCH.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/uy6hO7M60rRw3bTfXTCH.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/uy6hO7M60rRw3bTfXTCH.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/uy6hO7M60rRw3bTfXTCH.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/uy6hO7M60rRw3bTfXTCH.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/uy6hO7M60rRw3bTfXTCH.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/uy6hO7M60rRw3bTfXTCH.png?auto=format&w=1600 1600w" width="800" />
<p>To identify areas for improvement, they turned to
<a href="https://developer.chrome.com/docs/lighthouse/overview/" rel="noopener">Lighthouse</a> to audit
the YouTube watch pages, revealing a low Lighthouse
(<a href="https://web.dev/lab-and-field-data-differences/#lab-data">lab</a>) score with a
First Contentful Paint (FCP) of 3.5 seconds and a LCP of 8.5 seconds.</p>
<figure>
<img alt="Lighthouse Report for YouTube Mobile." decoding="async" height="518" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/PeCzGyBCTcY63B5Nft1a.jpg?auto=format" srcset="https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/PeCzGyBCTcY63B5Nft1a.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/PeCzGyBCTcY63B5Nft1a.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/PeCzGyBCTcY63B5Nft1a.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/PeCzGyBCTcY63B5Nft1a.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/PeCzGyBCTcY63B5Nft1a.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/PeCzGyBCTcY63B5Nft1a.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/PeCzGyBCTcY63B5Nft1a.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/PeCzGyBCTcY63B5Nft1a.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/PeCzGyBCTcY63B5Nft1a.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/PeCzGyBCTcY63B5Nft1a.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/PeCzGyBCTcY63B5Nft1a.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/PeCzGyBCTcY63B5Nft1a.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/PeCzGyBCTcY63B5Nft1a.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/PeCzGyBCTcY63B5Nft1a.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/PeCzGyBCTcY63B5Nft1a.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/PeCzGyBCTcY63B5Nft1a.jpg?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/PeCzGyBCTcY63B5Nft1a.jpg?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    Chrome sets a target of 1.8s for FCP and 2.5s for LCP as a gold standard. The FCP and LCP were clearly in the yellow and red at 3.5s and 8.5s, respectively.
  </figcaption>
</figure>
<p>To optimize FCP and LCP, the YouTube team dove into several experiments,
resulting in two big discoveries.</p>
<ol>
<li>
<p>The first discovery was that they could improve performance by moving the HTML for the Video Player above the script that makes the Video Player interactive. Lab tests indicated that this could improve both FCP and LCP from 4.4 seconds to 1.1 seconds.</p>
</li>
<li>
<p>The second discovery was that LCP only <a href="https://web.dev/lcp/#what-elements-are-considered">considers</a> <code>&lt;video&gt;</code> element poster images and not frames from the video stream itself. YouTube has traditionally optimized for the fastest time until the video starts playing, so to improve LCP the team started also optimizing how quickly they could deliver their poster image. They experimented with a few variations of poster images and picked the one that scored the best in user testing. As a result of this work, both FCP and LCP showed marked improvement, with field LCP improving from 4.6 seconds to 2.0 seconds.</p>
</li>
</ol>
<figure>
<img alt="Watch Page LCP Experiment for mobile web showing control, experiment A (image thumbnail) and experiment B (black thumbnail)" decoding="async" height="514" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/wJKAgsXRqrexp9yDJ4T1.jpg?auto=format" srcset="https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/wJKAgsXRqrexp9yDJ4T1.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/wJKAgsXRqrexp9yDJ4T1.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/wJKAgsXRqrexp9yDJ4T1.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/wJKAgsXRqrexp9yDJ4T1.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/wJKAgsXRqrexp9yDJ4T1.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/wJKAgsXRqrexp9yDJ4T1.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/wJKAgsXRqrexp9yDJ4T1.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/wJKAgsXRqrexp9yDJ4T1.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/wJKAgsXRqrexp9yDJ4T1.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/wJKAgsXRqrexp9yDJ4T1.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/wJKAgsXRqrexp9yDJ4T1.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/wJKAgsXRqrexp9yDJ4T1.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/wJKAgsXRqrexp9yDJ4T1.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/wJKAgsXRqrexp9yDJ4T1.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/wJKAgsXRqrexp9yDJ4T1.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/wJKAgsXRqrexp9yDJ4T1.jpg?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/wJKAgsXRqrexp9yDJ4T1.jpg?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    In the lab, we observed an improvement in FCP and LCP from 4.4s to 1.1s after this change landed. Experiment A: Using the actual video thumbnail works well on pages where the video starts out paused, but for auto-play video pages like the watch page it performed poorly in user studies. It also resulted in a drop in active users. Experiment B: Using a solid black poster image showed the best results in user studies. Users found the transition from solid black to the first frame of the video to be a less-jarring experience for autoplay videos. 
  </figcaption>
</figure>
<figure>
<img alt="The black thumbnail was deployed in production for all mobile web users July 2021 showing marked improvement in FCP and LCP, as seen in the above RUM analysis." decoding="async" height="408" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/wGjBH4sMWoZEbRon6gBS.png?auto=format" srcset="https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/wGjBH4sMWoZEbRon6gBS.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/wGjBH4sMWoZEbRon6gBS.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/wGjBH4sMWoZEbRon6gBS.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/wGjBH4sMWoZEbRon6gBS.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/wGjBH4sMWoZEbRon6gBS.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/wGjBH4sMWoZEbRon6gBS.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/wGjBH4sMWoZEbRon6gBS.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/wGjBH4sMWoZEbRon6gBS.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/wGjBH4sMWoZEbRon6gBS.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/wGjBH4sMWoZEbRon6gBS.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/wGjBH4sMWoZEbRon6gBS.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/wGjBH4sMWoZEbRon6gBS.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/wGjBH4sMWoZEbRon6gBS.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/wGjBH4sMWoZEbRon6gBS.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/wGjBH4sMWoZEbRon6gBS.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/wGjBH4sMWoZEbRon6gBS.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/wGjBH4sMWoZEbRon6gBS.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    Black thumbnail was deployed in production for all mobile web users July 2021 showing marked improvement in FCP and LCP, as seen in the above RUM analysis.
  </figcaption>
</figure>
<aside class="aside flow bg-state-info-bg color-state-info-text"><div class=" flow"> While bringing these optimizations to all platforms, YouTube also took advantage of the new <a href="https://web.dev/priority-hints/">Priority Hints</a> <code>fetchpriority</code> attribute, which we use with <code>&lt;link rel=preload&gt;</code> to prioritize discovering and loading the poster image early:  <pre class="language-html"><code class="language-html"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>link</span> <span class="token attr-name">as</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>image<span class="token punctuation">&quot;</span></span> <span class="token attr-name">rel</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>preload<span class="token punctuation">&quot;</span></span> <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>poster.jpg<span class="token punctuation">&quot;</span></span> <span class="token attr-name">fetchpriority</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>high<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span></code></pre> </div></aside>
<p>While these optimizations did improve LCP, the team felt that the current definition of the LCP metric wasn't fully capturing, from the user's perspective, when the &quot;main content&quot; of the page had loaded—which is the goal of LCP.</p>
<p>To address these concerns, members of the YouTube team partnered with members of the Chrome team to explore ways that the LCP metric could be improved to address their use case. After considering the feasibility and impact of a few options, the teams landed on a <a href="https://github.com/w3c/largest-contentful-paint/issues/85" rel="noopener">proposal</a> to consider the paint time of the first frame of a video element as an LCP candidate.</p>
<p>Once this change lands in Chrome, the YouTube team is excited to continue their work optimizing for LCP. And the updated version of the metric will mean these optimizations will have a more direct impact on real-user experiences.</p>
<h3 id="modularization-with-lazy-loading">Modularization with lazy loading <a class="w-headline-link" href="https://web.dev/better-youtube-web-part1/#modularization-with-lazy-loading">#</a></h3>
<p>YouTube pages contained many modules that were eagerly loaded. To optimize how
50+ components were rendered, the team built a component to JS module map that
would tell the client which modules to load. By marking components as lazy, the
JS modules would load later, reducing the initial load time of the page and the
amount of unused Javascript sent to the client.</p>
<p>However, after lazy loading was implemented, the team noticed a waterfall effect
that lazy loaded components and their dependencies would load at suboptimal
times.</p>
<p>To solve this problem, the team determined the minimal set of components needed
in a view and batched them in a single network request. The results were
improved page speed, reduced JavaScript parse time, and, ultimately, better
initial rendering times.</p>
<h3 id="state-management-across-components">State-management across components <a class="w-headline-link" href="https://web.dev/better-youtube-web-part1/#state-management-across-components">#</a></h3>
<p>YouTube was experiencing performance issues due to its player controls,
especially on older devices. Code analysis showed that the player, which allows
users to control features such as playback speed and progress, had become
over-componentized over time.</p>
<figure>
<img alt="YouTube player and controls visualized" decoding="async" height="300" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/qh9N7ZdkxylN1vYOOdUO.png?auto=format" srcset="https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/qh9N7ZdkxylN1vYOOdUO.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/qh9N7ZdkxylN1vYOOdUO.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/qh9N7ZdkxylN1vYOOdUO.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/qh9N7ZdkxylN1vYOOdUO.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/qh9N7ZdkxylN1vYOOdUO.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/qh9N7ZdkxylN1vYOOdUO.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/qh9N7ZdkxylN1vYOOdUO.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/qh9N7ZdkxylN1vYOOdUO.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/qh9N7ZdkxylN1vYOOdUO.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/qh9N7ZdkxylN1vYOOdUO.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/qh9N7ZdkxylN1vYOOdUO.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/qh9N7ZdkxylN1vYOOdUO.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/qh9N7ZdkxylN1vYOOdUO.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/qh9N7ZdkxylN1vYOOdUO.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/qh9N7ZdkxylN1vYOOdUO.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/qh9N7ZdkxylN1vYOOdUO.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/qh9N7ZdkxylN1vYOOdUO.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    The YouTube video player allows users to control playback speed, follow progress, skip sections, and others. When a user taps on a particular control, the change in the state must be communicated to other controls e.g. a user tap on the progress bar must be shared to controls such as play-head, subtitles etc.
  </figcaption>
</figure>
<p>Each progress bar touch-move event triggered two
extra style recalculations and took 21.17 ms during performance test runs in the lab. As new controls were added over time, the pattern of decentralized control would often cause circular dependencies and memory leaks, negatively impacting watch page performance.</p>
<figure>
<img alt="21.17 ms event shown on the Performance timeline." decoding="async" height="202" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/vCTMilflEoDnkw1p8EuU.png?auto=format" srcset="https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/vCTMilflEoDnkw1p8EuU.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/vCTMilflEoDnkw1p8EuU.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/vCTMilflEoDnkw1p8EuU.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/vCTMilflEoDnkw1p8EuU.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/vCTMilflEoDnkw1p8EuU.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/vCTMilflEoDnkw1p8EuU.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/vCTMilflEoDnkw1p8EuU.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/vCTMilflEoDnkw1p8EuU.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/vCTMilflEoDnkw1p8EuU.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/vCTMilflEoDnkw1p8EuU.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/vCTMilflEoDnkw1p8EuU.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/vCTMilflEoDnkw1p8EuU.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/vCTMilflEoDnkw1p8EuU.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/vCTMilflEoDnkw1p8EuU.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/vCTMilflEoDnkw1p8EuU.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/vCTMilflEoDnkw1p8EuU.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/vCTMilflEoDnkw1p8EuU.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    Chrome DevTools with a 4 times CPU slow-down performance run. 
  </figcaption>
</figure>
<p>To fix the issues due to decentralized control, the team updated the player UI
to synchronize all updates, essentially refactoring the player to one top-level
component that would pass down data to its children. This ensured only one UI
update (render) cycle for any state change, eliminating chained updates. The new
player progress bar touch-move event has no style recalculations during its
JavaScript execution and now only requires 25% the time of the old player.</p>
<img alt="Reduced time in events shown on the performance timeline." decoding="async" height="90" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/E1EbOYuT2q7mDqfmR1zz.png?auto=format" srcset="https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/E1EbOYuT2q7mDqfmR1zz.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/E1EbOYuT2q7mDqfmR1zz.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/E1EbOYuT2q7mDqfmR1zz.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/E1EbOYuT2q7mDqfmR1zz.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/E1EbOYuT2q7mDqfmR1zz.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/E1EbOYuT2q7mDqfmR1zz.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/E1EbOYuT2q7mDqfmR1zz.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/E1EbOYuT2q7mDqfmR1zz.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/E1EbOYuT2q7mDqfmR1zz.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/E1EbOYuT2q7mDqfmR1zz.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/E1EbOYuT2q7mDqfmR1zz.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/E1EbOYuT2q7mDqfmR1zz.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/E1EbOYuT2q7mDqfmR1zz.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/E1EbOYuT2q7mDqfmR1zz.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/E1EbOYuT2q7mDqfmR1zz.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/E1EbOYuT2q7mDqfmR1zz.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/1L2RBhCLSnXjCnSlevaDjy3vba73/E1EbOYuT2q7mDqfmR1zz.png?auto=format&w=1600 1600w" width="800" />
<p>This code modernization also resulted in additional performance improvements
such as improved watch load times on old devices, fewer abandoned playbacks, and
a reduced number of non-fatal errors.</p>
<h2 id="conclusion">Conclusion <a class="w-headline-link" href="https://web.dev/better-youtube-web-part1/#conclusion">#</a></h2>
<p>As a result of YouTube's investment in performance, watch pages load much faster with 76% of YouTube's mobile website URLs now passing Core Web Vitals metric thresholds in the field. On desktop, lab LCP for the watch page was reduced from approximately 4.6 seconds to 1.6 seconds. Interaction and rendering performance of the site, especially on the YouTube video player, are seeing up to 75% less time spent in JavaScript execution than before.</p>
<aside class="aside flow bg-state-good-bg color-state-good-text"><p class="cluster "><span class="aside__icon box-block "><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" height="24" width="24" fill="currentColor" role="img" aria-label="Check">   <path d="M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z"></path> </svg></span><strong>Success</strong></p><div class=" flow"> 76% of YouTube's mobile web URLs now pass the Core Web Vitals metrics, with improvements to business metrics like watch time as a result. </div></aside>
<p>Improvements to the performance of YouTube web over the last year have also improved business metrics, including watch time and daily active users. Based on the success of these efforts, we plan to continue exploring even more ways to optimize in the future.</p>
<p>In part two of this series, &quot;Building an accessible web&quot;, you’ll read how YouTube made their website more accessible for screen-reader users.</p>
<p><em>With special thanks to Gilberto Cocchi, Lauren Usui, Benji Bear, Bo Aye, Bogdan Balas, Kenny Tran, Matthew Smith, Phil Harnish, Leena Sahoni, Jeremy Wagner, Philip Walton, Harleen Batra and both the YouTube and Chrome teams for their contributions to this work.</em></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[How Rakuten 24's investment in Core Web Vitals increased revenue per visitor by 53.37% and conversion rate by 33.13%]]></title>
<description><![CDATA[Rakuten 24 is an online store that collaborates with both major multinational and domestic consumer goods manufacturers to offer a great variety of daily necessities including healthcare, beverage, pet supplies, baby products, and more. This store is provided by Rakuten Group, Inc.—a global leade...]]></description>
<link>https://tsecurity.de/de/1725682/it+betriebssysteme/web+tipps/how+rakuten+24s+investment+in+core+web+vitals+increased+revenue+per+visitor+by+5337+and+conversion+rate+by+3313/</link>
<pubDate>Thu, 08 Dec 2022 19:45:05 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p><a href="https://24.rakuten.co.jp/" rel="noopener">Rakuten 24</a> is an online store that collaborates with both major multinational and domestic consumer goods manufacturers to offer a great variety of daily necessities including healthcare, beverage, pet supplies, baby products, and more. This store is provided by Rakuten Group, Inc.—a global leader in internet services, and is among the top performers on their digital marketplace platform in Japan.</p>
<p>Understanding the impact of web performance on user experience, the Rakuten 24 team has been continuously measuring, optimizing and monitoring Core Web Vitals and other metrics.</p>
<p>As a result, over 75% of their users are experiencing good Largest Contentful Paint (LCP), First Input Delay (FID) and First Contentful Paint (FCP). However, they are still working on Cumulative Layout Shift (CLS) improvements.</p>
<p>After analyzing homepage data, Rakuten 24 found that a good LCP score can lead to:</p>
<ul>
<li>An increase of up to 61.13% in conversion rate.</li>
<li>26.09% in revenue per visitor.</li>
<li>11.26% in average order value.</li>
<li>A good FID score can lead to an increase of up to 55.88% in conversion rate.</li>
</ul>
<p>To further correlate Core Web Vitals and business metrics, Rakuten 24 also ran an A/B test focused on optimizing Core Web Vitals and related metrics, and saw an improvement of:</p>
<ul>
<li>53.37% in revenue per visitor.</li>
<li>33.13% in conversion rate.</li>
<li>15.20% in average order value.</li>
<li>9.99% in average time spent.</li>
<li>A 35.12% reduction in exit rate.</li>
</ul>
<h2 id="highlight-the-opportunity">Highlight the opportunity <a class="w-headline-link" href="https://web.dev/rakuten/#highlight-the-opportunity">#</a></h2>
<p>Though optimizing web performance is a smart investment to improve user experience and business growth, Rakuten 24 team understands how difficult it can be to convince stakeholders to adopt Core Web Vitals and focus on web performance. They believe that showing stakeholders exactly what kind of Return on Investment (ROI) performance optimization can bring is the best way to get them on board.</p>
<p>Being a relatively new and independent service, Rakuten 24 used their advantage of flexibility to take up the challenge. They believe that the result of their case study would help them make more data-oriented decisions in the future, as well as help other developers measure the impact of their work and convince their stakeholders that improving performance is worth the investment. Find out how they did it in this post.</p>
<figure>
  <img alt="Example screenshots of Rakuten 24&#x27;s homepage, with mobile device frames around each screenshot." decoding="async" height="537" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ij6fET9W23vj1IOb3e6O.jpg?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ij6fET9W23vj1IOb3e6O.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ij6fET9W23vj1IOb3e6O.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ij6fET9W23vj1IOb3e6O.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ij6fET9W23vj1IOb3e6O.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ij6fET9W23vj1IOb3e6O.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ij6fET9W23vj1IOb3e6O.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ij6fET9W23vj1IOb3e6O.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ij6fET9W23vj1IOb3e6O.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ij6fET9W23vj1IOb3e6O.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ij6fET9W23vj1IOb3e6O.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ij6fET9W23vj1IOb3e6O.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ij6fET9W23vj1IOb3e6O.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ij6fET9W23vj1IOb3e6O.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ij6fET9W23vj1IOb3e6O.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ij6fET9W23vj1IOb3e6O.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ij6fET9W23vj1IOb3e6O.jpg?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ij6fET9W23vj1IOb3e6O.jpg?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    Some example screenshots of Rakuten 24's homepage.
  </figcaption>
</figure>
<h2 id="optimize-javascript-and-resources">Optimize JavaScript and resources <a class="w-headline-link" href="https://web.dev/rakuten/#optimize-javascript-and-resources">#</a></h2>
<ul>
<li>Eliminate render-blocking resources.</li>
<li>Split code and use <a href="https://v8.dev/features/dynamic-import" rel="noopener">dynamic <code>import()</code></a>.</li>
<li>Split all content into separate parts and lazy load below-the-fold HTML files.</li>
<li>Execute and load JavaScript on demand.</li>
<li>Identify slow JavaScript resources and optimize the loading process by using the async attribute on <code>&lt;script&gt;</code> tags and establishing early connections to important origins (Resource hints such as <code>dns-prefetch</code>, <code>preconnect</code>, and <code>preload</code>).</li>
<li><a href="https://web.dev/remove-unused-code/">Remove unused code</a>, and <a href="https://web.dev/reduce-network-payloads-using-text-compression/">minify and compress code</a>.</li>
<li><a href="https://web.dev/content-delivery-networks/">Use a CDN</a>.</li>
<li><a href="https://web.dev/learn/pwa/caching/">Control caching using Service Worker</a> with <a href="https://developer.chrome.com/docs/workbox/" rel="noopener">Workbox</a>.</li>
</ul>
<h2 id="optimize-images">Optimize images <a class="w-headline-link" href="https://web.dev/rakuten/#optimize-images">#</a></h2>
<ul>
<li><a href="https://web.dev/lazy-loading-images/">Lazy load below-the-fold images</a>.</li>
<li><a href="https://web.dev/image-cdns/">Optimize images with a CDN</a>, deliver properly sized images, compress images, and adopt the right image formats for the job (WebP, SVG, Web Fonts).</li>
</ul>
<h2 id="optimize-cls">Optimize CLS <a class="w-headline-link" href="https://web.dev/rakuten/#optimize-cls">#</a></h2>
<ul>
<li>Use CSS <a href="https://developer.mozilla.org/docs/Web/CSS/aspect-ratio" rel="noopener"><code>aspect-ratio</code></a> to reserve the required space for images while the images are loading.</li>
<li>Use CSS <a href="https://developer.mozilla.org/docs/Web/CSS/min-height" rel="noopener"><code>min-height</code></a> to minimize layout shifts while elements are lazy loaded.</li>
</ul>
<h2 id="performance-measuring">Performance measuring <a class="w-headline-link" href="https://web.dev/rakuten/#performance-measuring">#</a></h2>
<p>Besides using <a href="https://pagespeed.web.dev/" rel="noopener">PageSpeed Insights</a> to audit their website, the team wanted to find a better way to know what the users are actually experiencing in the field. Therefore, Rakuten 24 decided to use the <a href="https://github.com/GoogleChrome/web-vitals" rel="noopener">web-vitals JavaScript library</a> to measure Core Web Vitals and other metrics in the field and send the data to inhouse analytics tool.</p>
<figure>
  <img alt="Rakuten 24&#x27;s web vitals tracking integration flow. The first step is to integrate the web-vitals library by adding the script to the Rakuten 24 website. After that, web vitals can be measured from real user metrics, and the data is sent to Rakuten 24&#x27;s in-house data collection tool." decoding="async" height="495" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/o5Nd3IV6Yof3mfr3tVH3.jpg?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/o5Nd3IV6Yof3mfr3tVH3.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/o5Nd3IV6Yof3mfr3tVH3.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/o5Nd3IV6Yof3mfr3tVH3.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/o5Nd3IV6Yof3mfr3tVH3.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/o5Nd3IV6Yof3mfr3tVH3.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/o5Nd3IV6Yof3mfr3tVH3.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/o5Nd3IV6Yof3mfr3tVH3.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/o5Nd3IV6Yof3mfr3tVH3.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/o5Nd3IV6Yof3mfr3tVH3.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/o5Nd3IV6Yof3mfr3tVH3.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/o5Nd3IV6Yof3mfr3tVH3.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/o5Nd3IV6Yof3mfr3tVH3.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/o5Nd3IV6Yof3mfr3tVH3.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/o5Nd3IV6Yof3mfr3tVH3.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/o5Nd3IV6Yof3mfr3tVH3.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/o5Nd3IV6Yof3mfr3tVH3.jpg?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/o5Nd3IV6Yof3mfr3tVH3.jpg?auto=format&w=1600 1600w" width="800" />
</figure>
<h2 id="performance-analyzing">Performance analyzing <a class="w-headline-link" href="https://web.dev/rakuten/#performance-analyzing">#</a></h2>
<p>The team analyzed the collected field data to determine if there is any correlation between the Core Web Vitals and the key business metrics. They found out that the converted users tend to experience a better LCP than the users who didn’t convert.</p>
<figure>
  <img alt="A comparison of users who converted versus those who didn&#x27;t by LCP. The user group who converted more frequently experienced a lower LCP." decoding="async" height="391" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/xWYjqq9sEJ2yQlDxl6fY.jpg?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/xWYjqq9sEJ2yQlDxl6fY.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/xWYjqq9sEJ2yQlDxl6fY.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/xWYjqq9sEJ2yQlDxl6fY.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/xWYjqq9sEJ2yQlDxl6fY.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/xWYjqq9sEJ2yQlDxl6fY.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/xWYjqq9sEJ2yQlDxl6fY.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/xWYjqq9sEJ2yQlDxl6fY.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/xWYjqq9sEJ2yQlDxl6fY.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/xWYjqq9sEJ2yQlDxl6fY.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/xWYjqq9sEJ2yQlDxl6fY.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/xWYjqq9sEJ2yQlDxl6fY.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/xWYjqq9sEJ2yQlDxl6fY.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/xWYjqq9sEJ2yQlDxl6fY.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/xWYjqq9sEJ2yQlDxl6fY.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/xWYjqq9sEJ2yQlDxl6fY.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/xWYjqq9sEJ2yQlDxl6fY.jpg?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/xWYjqq9sEJ2yQlDxl6fY.jpg?auto=format&w=1600 1600w" width="800" />
</figure>
<p>The collected data also revealed that:</p>
<ul>
<li>A good LCP can lead to an increase of up to 61.13% in conversion rate, 26.09% in revenue per visitor, and 11.26% in average order value.</li>
<li>A good FID can lead to an increase of up to 55.88% in conversion rate compared to the overall average data.</li>
</ul>
<figure>
  <img alt="LCP bucketed by conversion rate and LCP time. Users who converted more frequently converted when LCP was lower, with 61.13% of users converting with an LCP of one second or lower." decoding="async" height="376" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/kW535AoWqoPqmUWARPZt.jpg?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/kW535AoWqoPqmUWARPZt.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/kW535AoWqoPqmUWARPZt.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/kW535AoWqoPqmUWARPZt.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/kW535AoWqoPqmUWARPZt.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/kW535AoWqoPqmUWARPZt.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/kW535AoWqoPqmUWARPZt.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/kW535AoWqoPqmUWARPZt.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/kW535AoWqoPqmUWARPZt.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/kW535AoWqoPqmUWARPZt.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/kW535AoWqoPqmUWARPZt.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/kW535AoWqoPqmUWARPZt.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/kW535AoWqoPqmUWARPZt.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/kW535AoWqoPqmUWARPZt.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/kW535AoWqoPqmUWARPZt.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/kW535AoWqoPqmUWARPZt.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/kW535AoWqoPqmUWARPZt.jpg?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/kW535AoWqoPqmUWARPZt.jpg?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    The impact of LCP on conversion rate.
  </figcaption>
</figure>
<figure>
  <img alt="LCP bucketed by revenue per visitor and LCP time. Users with lower LCP provided more revenue, with 26.09% more revenue provided per user when LCP was one second or lower." decoding="async" height="376" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/MBCTKocekiENQSQBS6wO.jpg?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/MBCTKocekiENQSQBS6wO.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/MBCTKocekiENQSQBS6wO.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/MBCTKocekiENQSQBS6wO.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/MBCTKocekiENQSQBS6wO.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/MBCTKocekiENQSQBS6wO.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/MBCTKocekiENQSQBS6wO.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/MBCTKocekiENQSQBS6wO.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/MBCTKocekiENQSQBS6wO.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/MBCTKocekiENQSQBS6wO.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/MBCTKocekiENQSQBS6wO.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/MBCTKocekiENQSQBS6wO.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/MBCTKocekiENQSQBS6wO.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/MBCTKocekiENQSQBS6wO.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/MBCTKocekiENQSQBS6wO.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/MBCTKocekiENQSQBS6wO.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/MBCTKocekiENQSQBS6wO.jpg?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/MBCTKocekiENQSQBS6wO.jpg?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    The impact of LCP on revenue per visitor.
  </figcaption>
</figure>
<figure>
  <img alt="LCP bucketed by average order value and LCP time. Users with lower LCP had a 11.26% higher average order value when LCP was one second or lower." decoding="async" height="376" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/mFfKxOV5snRw2e6lEqC5.jpg?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/mFfKxOV5snRw2e6lEqC5.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/mFfKxOV5snRw2e6lEqC5.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/mFfKxOV5snRw2e6lEqC5.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/mFfKxOV5snRw2e6lEqC5.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/mFfKxOV5snRw2e6lEqC5.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/mFfKxOV5snRw2e6lEqC5.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/mFfKxOV5snRw2e6lEqC5.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/mFfKxOV5snRw2e6lEqC5.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/mFfKxOV5snRw2e6lEqC5.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/mFfKxOV5snRw2e6lEqC5.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/mFfKxOV5snRw2e6lEqC5.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/mFfKxOV5snRw2e6lEqC5.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/mFfKxOV5snRw2e6lEqC5.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/mFfKxOV5snRw2e6lEqC5.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/mFfKxOV5snRw2e6lEqC5.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/mFfKxOV5snRw2e6lEqC5.jpg?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/mFfKxOV5snRw2e6lEqC5.jpg?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    The impact of LCP on average order value.
  </figcaption>
</figure>
<figure>
  <img alt="FID bucketed by conversion rate and FID time. Users who converted more frequently converted when FID was lower, with 55.88% of users converting with an FID of 50 milliseconds or lower." decoding="async" height="362" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/hzfFyMF9UM0PD0y1dq9V.jpg?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/hzfFyMF9UM0PD0y1dq9V.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/hzfFyMF9UM0PD0y1dq9V.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/hzfFyMF9UM0PD0y1dq9V.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/hzfFyMF9UM0PD0y1dq9V.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/hzfFyMF9UM0PD0y1dq9V.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/hzfFyMF9UM0PD0y1dq9V.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/hzfFyMF9UM0PD0y1dq9V.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/hzfFyMF9UM0PD0y1dq9V.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/hzfFyMF9UM0PD0y1dq9V.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/hzfFyMF9UM0PD0y1dq9V.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/hzfFyMF9UM0PD0y1dq9V.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/hzfFyMF9UM0PD0y1dq9V.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/hzfFyMF9UM0PD0y1dq9V.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/hzfFyMF9UM0PD0y1dq9V.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/hzfFyMF9UM0PD0y1dq9V.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/hzfFyMF9UM0PD0y1dq9V.jpg?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/hzfFyMF9UM0PD0y1dq9V.jpg?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    The impact of FID on conversion rate.
  </figcaption>
</figure>
<h2 id="performance-monitoring">Performance monitoring <a class="w-headline-link" href="https://web.dev/rakuten/#performance-monitoring">#</a></h2>
<p>The team built a performance monitoring dashboard using the data collected in the field and business intelligence tool. This is important for monitoring progress and preventing regressions.</p>
<figure>
  <img alt="A screenshot of Rakuten 24&#x27;s internal performance monitoring dashboard for each of the Core Web Vitals (LCP, CLS, and FID)." decoding="async" height="354" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/nd87NaZ2i9cG905ChUdU.jpg?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/nd87NaZ2i9cG905ChUdU.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/nd87NaZ2i9cG905ChUdU.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/nd87NaZ2i9cG905ChUdU.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/nd87NaZ2i9cG905ChUdU.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/nd87NaZ2i9cG905ChUdU.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/nd87NaZ2i9cG905ChUdU.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/nd87NaZ2i9cG905ChUdU.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/nd87NaZ2i9cG905ChUdU.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/nd87NaZ2i9cG905ChUdU.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/nd87NaZ2i9cG905ChUdU.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/nd87NaZ2i9cG905ChUdU.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/nd87NaZ2i9cG905ChUdU.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/nd87NaZ2i9cG905ChUdU.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/nd87NaZ2i9cG905ChUdU.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/nd87NaZ2i9cG905ChUdU.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/nd87NaZ2i9cG905ChUdU.jpg?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/nd87NaZ2i9cG905ChUdU.jpg?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    Performance monitoring dashboard.
  </figcaption>
</figure>
<h2 id="ab-test">A/B test <a class="w-headline-link" href="https://web.dev/rakuten/#ab-test">#</a></h2>
<p>Believing that A/B tests are a good way to measure the business impact of performance optimizations, the team optimized one of their landing pages for Core Web Vitals then compared the optimized version with the original page via A/B test for a month. They picked a landing page with significant traffic and conversion so that the test could achieve meaningful results. During the test duration, 50% of the traffic was sent to the optimized landing page (version A), and 50% was sent to the original page (version B). The only difference between version A and version B was that version A was optimized for Core Web Vitals and there were no other functional or visual differences.</p>
<figure>
  <img alt="A screenshot of a mobile A/B test for the Rakuten 24 website. Each version was visually and functionally the same, with version A optimized for better Core Web Vitals." decoding="async" height="1129" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/fc1R2EzGmE8WNd0C9CWu.jpg?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/fc1R2EzGmE8WNd0C9CWu.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/fc1R2EzGmE8WNd0C9CWu.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/fc1R2EzGmE8WNd0C9CWu.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/fc1R2EzGmE8WNd0C9CWu.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/fc1R2EzGmE8WNd0C9CWu.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/fc1R2EzGmE8WNd0C9CWu.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/fc1R2EzGmE8WNd0C9CWu.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/fc1R2EzGmE8WNd0C9CWu.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/fc1R2EzGmE8WNd0C9CWu.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/fc1R2EzGmE8WNd0C9CWu.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/fc1R2EzGmE8WNd0C9CWu.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/fc1R2EzGmE8WNd0C9CWu.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/fc1R2EzGmE8WNd0C9CWu.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/fc1R2EzGmE8WNd0C9CWu.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/fc1R2EzGmE8WNd0C9CWu.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/fc1R2EzGmE8WNd0C9CWu.jpg?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/fc1R2EzGmE8WNd0C9CWu.jpg?auto=format&w=1600 1600w" width="800" />
</figure>
<p>The optimized version A finished loading 0.4 seconds earlier in the mobile load test and shows no significant layout shift. In fact, the CLS of version A improved by <strong>92.72% compared to version B</strong>. Other Web Vitals scores also improved: <strong>FID improved by 7.95%</strong>, <strong>FCP improved by 8.45%</strong>, and <strong>TTFB improved by 18.03%</strong>.</p>
<figure>
  <img alt="A startup comparison of the Rakuten 24 homepage. Version A is optimized for better loading, loading within 1.6 seconds, compared to Version B, which loaded within 2 seconds." decoding="async" height="488" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ngLxHt0V3Ubss5gkT05t.jpg?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ngLxHt0V3Ubss5gkT05t.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ngLxHt0V3Ubss5gkT05t.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ngLxHt0V3Ubss5gkT05t.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ngLxHt0V3Ubss5gkT05t.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ngLxHt0V3Ubss5gkT05t.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ngLxHt0V3Ubss5gkT05t.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ngLxHt0V3Ubss5gkT05t.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ngLxHt0V3Ubss5gkT05t.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ngLxHt0V3Ubss5gkT05t.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ngLxHt0V3Ubss5gkT05t.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ngLxHt0V3Ubss5gkT05t.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ngLxHt0V3Ubss5gkT05t.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ngLxHt0V3Ubss5gkT05t.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ngLxHt0V3Ubss5gkT05t.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ngLxHt0V3Ubss5gkT05t.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ngLxHt0V3Ubss5gkT05t.jpg?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ngLxHt0V3Ubss5gkT05t.jpg?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    Mobile load test result of version A and version B.
  </figcaption>
</figure>
<p>Comparing the optimized version A to the unoptimized version B, Rakuten 24 found that version A brings about:</p>
<ul>
<li>53.37% increase in revenue per visitor.</li>
<li>33.13% increase in conversion rate.</li>
<li>15.20% increase in average order value.</li>
<li>9.99% increase in average time spent.</li>
<li>35.12% reduction in exit rate.</li>
</ul>
<figure>
  <img alt="A screenshot of Core Web Vitals improvements for the Rakuten 24 homepage. The stats are a 53.37% increase in revenue per visitor, 33.13% increase in conversion rate, 15.2% increase in average order value, 9.99% increase in average time spent on pages, and 35.12% reduction in exit rate." decoding="async" height="285" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/m9YXxAbL0Cc3qqblK4Wu.jpg?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/m9YXxAbL0Cc3qqblK4Wu.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/m9YXxAbL0Cc3qqblK4Wu.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/m9YXxAbL0Cc3qqblK4Wu.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/m9YXxAbL0Cc3qqblK4Wu.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/m9YXxAbL0Cc3qqblK4Wu.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/m9YXxAbL0Cc3qqblK4Wu.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/m9YXxAbL0Cc3qqblK4Wu.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/m9YXxAbL0Cc3qqblK4Wu.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/m9YXxAbL0Cc3qqblK4Wu.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/m9YXxAbL0Cc3qqblK4Wu.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/m9YXxAbL0Cc3qqblK4Wu.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/m9YXxAbL0Cc3qqblK4Wu.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/m9YXxAbL0Cc3qqblK4Wu.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/m9YXxAbL0Cc3qqblK4Wu.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/m9YXxAbL0Cc3qqblK4Wu.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/m9YXxAbL0Cc3qqblK4Wu.jpg?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/m9YXxAbL0Cc3qqblK4Wu.jpg?auto=format&w=1600 1600w" width="800" />
</figure>
<h2 id="conclusion">Conclusion <a class="w-headline-link" href="https://web.dev/rakuten/#conclusion">#</a></h2>
<p>Web performance optimization is challenging but rewarding. By taking a data-driven approach, Rakuten 24 has successfully delivered better user experience as well as measured positive impact on their business. Understanding that this is just a part of the journey not the destination, they will continue improving their website to provide online shoppers with more delightful experiences.</p>
<p>Optimization requires a joint effort and developers do not have to be alone on this journey. By sharing their struggles and achievements, Rakuten 24 hopes that more developers can use Core Web Vitals data to develop a mutual understanding with stakeholders then work together towards high-quality user experience and business growth.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[How GoDaddy's Websites + Marketing service improved customer Core Web Vitals by 75%]]></title>
<description><![CDATA[GoDaddy is the world's largest services platform for entrepreneurs around the globe. We're on a mission to empower our worldwide community of over 20 million customers—and entrepreneurs everywhere—by giving them all the help and tools they need to grow online.
In 2019 GoDaddy launched Websites + ...]]></description>
<link>https://tsecurity.de/de/1725683/it+betriebssysteme/web+tipps/how+godaddys+websites+marketing+service+improved+customer+core+web+vitals+by+75/</link>
<pubDate>Thu, 08 Dec 2022 19:45:05 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>GoDaddy is the world's largest services platform for entrepreneurs around the globe. We're on a mission to empower our worldwide community of over 20 million customers—and entrepreneurs everywhere—by giving them all the help and tools they need to grow online.</p>
<p>In 2019 GoDaddy launched Websites + Marketing with a commitment to deliver tools and services that are easy to use and help business owners achieve their goals. Websites + Marketing integrates website building with marketing and eCommerce tools and pairs them with best-in-class guidance to help customers achieve success with their new ventures.</p>
<p>Since the launch of Websites + Marketing, performance has been an important part of the product and something that has been monitored and worked on actively. In this article, we will review GoDaddy's journey from using lab performance testing to using real world data with Core Web Vitals, and the series of improvements made to the product to get a very high pass rate for our customer's sites.</p>
<h2 id="tracking-performance-with-lighthouse">Tracking performance with Lighthouse <a class="w-headline-link" href="https://web.dev/godaddy/#tracking-performance-with-lighthouse">#</a></h2>
<p>We have relied on Lighthouse data for performance tracking. Every time a website is published on the platform, we measure its performance using our internal tool named &quot;Lighthouse4u&quot;, which provides <a href="https://github.com/GoogleChrome/lighthouse" rel="noopener">Google Lighthouse</a> as a service <a href="https://github.com/godaddy/lighthouse4u" rel="noopener">https://github.com/godaddy/lighthouse4u</a>. This gave us a good indication of how sites were generally performing in a <a href="https://web.dev/lab-and-field-data-differences/#lab-data">lab setting</a>.</p>
<p>Because the millions of sites we host on our platform have a wide range of features and content, it was important to combine performance data with metadata about each site being tested (such as template used, type of widgets rendered, and so on). This allowed us to draw conclusions on what website features had lower performance, while also providing insight for where to look for improvements.</p>
<p>For example, this helped us identify that the &quot;popup modal&quot; was having a negative impact on page speed; sites with the feature performed 12 points lower than without. After making updates to the code to defer loading of JavaScript, we improved our Lighthouse score by 2 points. We were able to apply this learning to other features such as the &quot;cookie banner&quot; that renders soon after page load.</p>
<figure>
  <img alt="A chart depicting Lighthouse scores for sites with and without a pop-up modal. The sites without a pop-up modal are consistently faster." decoding="async" height="466" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pmoSmUIy1fYtxHOdBWvs.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pmoSmUIy1fYtxHOdBWvs.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pmoSmUIy1fYtxHOdBWvs.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pmoSmUIy1fYtxHOdBWvs.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pmoSmUIy1fYtxHOdBWvs.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pmoSmUIy1fYtxHOdBWvs.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pmoSmUIy1fYtxHOdBWvs.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pmoSmUIy1fYtxHOdBWvs.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pmoSmUIy1fYtxHOdBWvs.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pmoSmUIy1fYtxHOdBWvs.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pmoSmUIy1fYtxHOdBWvs.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pmoSmUIy1fYtxHOdBWvs.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pmoSmUIy1fYtxHOdBWvs.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pmoSmUIy1fYtxHOdBWvs.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pmoSmUIy1fYtxHOdBWvs.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pmoSmUIy1fYtxHOdBWvs.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pmoSmUIy1fYtxHOdBWvs.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pmoSmUIy1fYtxHOdBWvs.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>Chart showing performance score for sites with and without a "pop up modal"  (blue and green lines respectively) before and after performance improvement.</figcaption>
</figure>
<p>Along with looking at problematic sites based on features, we conducted an analysis of our JavaScript bundle and saw that a large portion of its size came from external dependencies (immutable.js and draft.js). We reduced the bundle size by restructuring consumers to lazy load dependencies on demand. This resulted in over a 50% drop in common JavaScript bundle size, which went from over 200 KB to around 90 KB (minified). The smaller bundle size allowed the browser to load external assets and execute critical scripts earlier in the initial site loading lifecycle, leading to gains in <a href="https://web.dev/lcp/">Largest Contentful Paint (LCP)</a> and <a href="https://web.dev/fid/">First Input Delay (FID)</a>.</p>
<figure>
  <img alt="A chart showing average Lighthouse scores over time. The average score improves after events such as reducing the JavaScript bundle, deferring JavaScript components, and image optimizations." decoding="async" height="831" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/HCEA1M9s2S3xOOZFFoCc.jpg?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/HCEA1M9s2S3xOOZFFoCc.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/HCEA1M9s2S3xOOZFFoCc.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/HCEA1M9s2S3xOOZFFoCc.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/HCEA1M9s2S3xOOZFFoCc.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/HCEA1M9s2S3xOOZFFoCc.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/HCEA1M9s2S3xOOZFFoCc.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/HCEA1M9s2S3xOOZFFoCc.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/HCEA1M9s2S3xOOZFFoCc.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/HCEA1M9s2S3xOOZFFoCc.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/HCEA1M9s2S3xOOZFFoCc.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/HCEA1M9s2S3xOOZFFoCc.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/HCEA1M9s2S3xOOZFFoCc.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/HCEA1M9s2S3xOOZFFoCc.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/HCEA1M9s2S3xOOZFFoCc.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/HCEA1M9s2S3xOOZFFoCc.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/HCEA1M9s2S3xOOZFFoCc.jpg?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/HCEA1M9s2S3xOOZFFoCc.jpg?auto=format&w=1600 1600w" width="800" />
  <figcaption>Average Lighthouse score for newly published sites over time. Major optimizations are overlaid on the graph to show impact.</figcaption>
</figure>
<p>Thanks to our continued efforts, the average customer site Lighthouse score moved from around 40 points in November 2020 to above 70 points in May 2021. However, not all our attempts worked and we were sometimes surprised when the results were not always consistent between what was tested in local test environments and the results we got in the field. Lab results had been really helpful, but it was time to focus on real user experiences observed in the field.</p>
<h2 id="tracking-real-user-data-with-core-web-vitals">Tracking real user data with Core Web Vitals <a class="w-headline-link" href="https://web.dev/godaddy/#tracking-real-user-data-with-core-web-vitals">#</a></h2>
<p>After adding the <a href="https://github.com/GoogleChrome/web-vitals" rel="noopener"><code>web-vitals</code> library</a> to our customer's sites, we were able to measure data on actual devices from real visitors, where hardware, network speed, user interaction (such as scrolling or clicking) are not at a consistent baseline as in a lab setting using Lighthouse. This was a big step in the right direction, as we now had data that was representative of what our website visitors were experiencing.</p>
<h3 id="focusing-on-our-weakest-link-cumulative-layout-shift-cls">Focusing on our weakest link: Cumulative Layout Shift (CLS) <a class="w-headline-link" href="https://web.dev/godaddy/#focusing-on-our-weakest-link-cumulative-layout-shift-cls">#</a></h3>
<p>Analyzing new data gave us a new perspective on what had to be done to improve website speed. Because of work done to improve the Lighthouse score, our 75th percentile LCP was 860 ms and our FID at the same threshold was below 10 ms, so we enjoyed a high pass rate for these metrics on our customer's sites: 78% and 98%, respectively. However, the <a href="https://web.dev/cls/">Cumulative Layout Shift (CLS)</a> numbers look <em>quite different</em> from what we were used to with Lighthouse. Our CLS at the 75th percentile was 0.17–above the 0.1 threshold to &quot;pass&quot;–and our pass rate was thus only 47% over all of our sites.</p>
<p>That metric dragged down our overall pass rate to 40%, so we decided to set an ambitious goal to move that number to above 60% by the end of August 2021. To do that, we would <strong>have to focus on CLS</strong>.</p>
<p>In real life, users interact with the page and scroll past the &quot;above the fold&quot; content, which is something Core Web Vitals captures better. Due to the variability in how users interact with the site while it initially loads, CLS differed from lab and field data.</p>
<h2 id="the-road-to-passing-all-core-web-vitals">The road to passing all Core Web Vitals <a class="w-headline-link" href="https://web.dev/godaddy/#the-road-to-passing-all-core-web-vitals">#</a></h2>
<p>Improving performance takes trial and error, and every attempt doesn't always work as expected. However, here are a few improvements that helped us achieve our goals.</p>
<p>Reserving space for loading images drastically improved our CLS score as it prevents the content below the images from shifting. We used the <a href="https://developer.mozilla.org/docs/Web/CSS/aspect-ratio" rel="noopener">CSS <code>aspect-ratio</code> property</a> to address this on browsers which support it. For those that do not, we loaded a transparent placeholder image that was cached and just a few bytes in size, thus loading almost instantaneously.</p>
<p>This generic image behavior allowed us to pre-calculate the final image height during server-side rendering, based on viewport width and image aspect ratio. This resulted in HTML markup with vertical space appropriately reserved for the final image. The improvement was particularly observable on mobile devices, since images are rendered to the full span of mobile viewports.</p>
<p>Certain components on our customers sites have dynamic content (for example, a list of external customer reviews) and could not be converted to pure CSS to leverage performance benefits of server side rendering. These are difficult areas to improve layout shifts because content (thus height) will vary. In those cases, we wrapped the component in a container with a <code>min-height</code> applied, predetermined based on observation of the average height for each of the specific components. The <code>min-height</code> is removed once the inner dynamic component is done rendering. While not perfect, this solution allowed us to reduce layout shift by a lot.</p>
<p>While focusing on CLS improvements, we continued to work on LCP. On many websites, images are the biggest culprit contributing to LCP and for us it was an obvious area of improvement. We had made improvements to lazy load images using <a href="https://developer.mozilla.org/docs/Web/API/IntersectionObserver" rel="noopener"><code>IntersectionObserver</code></a> but realized that image sizes were not set in the most optimal way for each breakpoint (mobile, tablet, desktop, large desktop), so we updated our image generation code to clamp and scale images per breakpoint and then again scale resolution based on pixel density. As an example, this reduced the size of a specific large image from 192 KB to 102 KB.</p>
<p>To quickly render websites on devices with poor network connections, we added code to dynamically scale down image quality based on connection speed. This can be done using the <code>downlink</code> property returned by <a href="https://developer.mozilla.org/docs/Web/API/Navigator/connection" rel="noopener"><code>navigator.connection</code></a>. We apply URL-based query parameters to reduce image quality through our asset API based on those network conditions.</p>
<p>A number of sections of our customer sites are dynamically loaded. Since we know what sections will be rendered on a given site when it's published, we used the <a href="https://www.w3.org/TR/resource-hints/#preconnect" rel="noopener"><code>rel=preconnect</code> resource hint</a> to initialize the connection and necessary handshakes ahead of time. We also use resource hints to load fonts and other important resources quickly.</p>
<p>When building their sites, customers add various sections which might have inline scripts to allow different functionalities. Having these scripts inline throughout the HTML page isn't always optimal for performance. We decided to externalize these scripts to allow the browser to load and parse script content asynchronously. Newly externalized scripts could also be shared across pages. This allowed for additional performance gains in the form of browser and CDN caching. We kept critical scripts in-line in order for the browser to parse and execute them faster.</p>
<h2 id="results">Results <a class="w-headline-link" href="https://web.dev/godaddy/#results">#</a></h2>
<p>Focusing our effort on CLS paid off, our Core Web Vitals pass rate went from around 40% to almost 70%: an improvement of 75%!</p>
<figure>
  <img alt="A chart depicting Core Web Vitals over time. All Core Web Vitals (except for FID) consistently improve over time." decoding="async" height="660" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6hnztHWgtUPHI6fwPqq6.jpg?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6hnztHWgtUPHI6fwPqq6.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6hnztHWgtUPHI6fwPqq6.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6hnztHWgtUPHI6fwPqq6.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6hnztHWgtUPHI6fwPqq6.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6hnztHWgtUPHI6fwPqq6.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6hnztHWgtUPHI6fwPqq6.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6hnztHWgtUPHI6fwPqq6.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6hnztHWgtUPHI6fwPqq6.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6hnztHWgtUPHI6fwPqq6.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6hnztHWgtUPHI6fwPqq6.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6hnztHWgtUPHI6fwPqq6.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6hnztHWgtUPHI6fwPqq6.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6hnztHWgtUPHI6fwPqq6.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6hnztHWgtUPHI6fwPqq6.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6hnztHWgtUPHI6fwPqq6.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6hnztHWgtUPHI6fwPqq6.jpg?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6hnztHWgtUPHI6fwPqq6.jpg?auto=format&w=1600 1600w" width="800" />
  <figcaption>Percentage of live Website+Marketing websites with "passing Core Web Vitals" over time (overall and sub-metric).</figcaption>
</figure>
<p>As users come back to our platform to make updates and republish their sites, they get the latest performance improvements and as a result the number of sites with &quot;passing Core Web Vitals&quot; has been steadily growing as shown on the chart below:</p>
<figure>
  <img alt="A chart depicting Good Core Web Vitals over time segmented into mobile and desktop segments. The trend improves over time." decoding="async" height="360" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/TYq98NlFCurWFDjfWpsN.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/TYq98NlFCurWFDjfWpsN.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/TYq98NlFCurWFDjfWpsN.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/TYq98NlFCurWFDjfWpsN.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/TYq98NlFCurWFDjfWpsN.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/TYq98NlFCurWFDjfWpsN.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/TYq98NlFCurWFDjfWpsN.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/TYq98NlFCurWFDjfWpsN.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/TYq98NlFCurWFDjfWpsN.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/TYq98NlFCurWFDjfWpsN.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/TYq98NlFCurWFDjfWpsN.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/TYq98NlFCurWFDjfWpsN.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/TYq98NlFCurWFDjfWpsN.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/TYq98NlFCurWFDjfWpsN.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/TYq98NlFCurWFDjfWpsN.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/TYq98NlFCurWFDjfWpsN.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/TYq98NlFCurWFDjfWpsN.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/TYq98NlFCurWFDjfWpsN.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>Chart representing GoDaddy Website Builder sites with "good Core Web Vitals". Source: <a href="https://datastudio.google.com/s/jo34JdqzrRU" rel="noopener">cwvtech.report</a></figcaption>
</figure>
<h2 id="conclusions">Conclusions <a class="w-headline-link" href="https://web.dev/godaddy/#conclusions">#</a></h2>
<p>Finding areas for performance improvements and successfully tracking progress is highly dependent on what tools are used for measurement. While Lighthouse was useful for measuring above-the-fold performance in a &quot;lab setting&quot;, it did not accurately capture performance issues that only occurred from user interactions (such as scrolling through the page).</p>
<p>Tracking real world Core Web Vitals with metadata allowed us to visualize, target, and measure the impact of our improvements. The journey to improve Core Web Vitals scores allowed the team to identify and replace non-performant patterns found throughout our codebase. Sometimes promising changes didn't have nearly the impact we expected, other times the opposite happened. It's not a pristine world out there, so you have to keep trying.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Luxury retailer Farfetch sees higher conversion rates for better Core Web Vitals]]></title>
<description><![CDATA[Inside many companies, website speed performance and Core Web Vitals are still mostly seen as the responsibility of the engineering teams. Site speed can become invisible to other areas of the business if the business and customer experience worth is not understood. This can cause performance to ...]]></description>
<link>https://tsecurity.de/de/1725684/it+betriebssysteme/web+tipps/luxury+retailer+farfetch+sees+higher+conversion+rates+for+better+core+web+vitals/</link>
<pubDate>Thu, 08 Dec 2022 19:45:05 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Inside many companies, website speed performance and Core Web Vitals are still mostly seen as the responsibility of the engineering teams. Site speed can become invisible to other areas of the business if the business and customer experience worth is not understood. This can cause performance to be overlooked when key decisions are made and roadmaps are defined.</p>
<p>To improve the performance culture across teams and drive significant improvements to their web experience, luxury e-commerce fashion retailer Farfetch launched a project to define and use true customer-centric performance metrics. They aimed to correlate these to business metrics as a way of illuminating how performance affects the company's KPIs.</p>
<p>Their ambitions didn't end there, though. Ultimately, the project's objective was cultural change at scale—breaking down silos within the organization and introducing a new business-oriented language to give everyone a shared way to talk about what used to be considered technical topics. Farfetch wanted to have website speed performance as a shared responsibility, facilitate informed decision making and establish it as a main pillar of what makes a good web experience.</p>
<figure>
  <img alt="A diagram contrasting speed as a developer&#x27;s responsibility versus speed as a shared responsibility. In the former case, each phase is siloed, whereas in the latter, each phase occurs within the same silo." decoding="async" height="477" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pRj3pK9qy1w3HRDNtcSE.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pRj3pK9qy1w3HRDNtcSE.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pRj3pK9qy1w3HRDNtcSE.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pRj3pK9qy1w3HRDNtcSE.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pRj3pK9qy1w3HRDNtcSE.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pRj3pK9qy1w3HRDNtcSE.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pRj3pK9qy1w3HRDNtcSE.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pRj3pK9qy1w3HRDNtcSE.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pRj3pK9qy1w3HRDNtcSE.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pRj3pK9qy1w3HRDNtcSE.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pRj3pK9qy1w3HRDNtcSE.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pRj3pK9qy1w3HRDNtcSE.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pRj3pK9qy1w3HRDNtcSE.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pRj3pK9qy1w3HRDNtcSE.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pRj3pK9qy1w3HRDNtcSE.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pRj3pK9qy1w3HRDNtcSE.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pRj3pK9qy1w3HRDNtcSE.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/pRj3pK9qy1w3HRDNtcSE.png?auto=format&w=1600 1600w" width="800" />
</figure>
<p>To kick off, Farfetch realized a single department couldn't achieve this as before and assembled a core team of experts from various areas in the company—engineering, infrastructure, architecture, and product—that put in place a step-by-step strategy to revamp how the company looked at this topic.</p>
<h2 id="step-1-defining,-measuring-and-monitoring-metrics">Step 1: Defining, measuring and monitoring metrics <a class="w-headline-link" href="https://web.dev/farfetch/#step-1-defining,-measuring-and-monitoring-metrics">#</a></h2>
<p>First of all, Farfetch needed to have the right monitoring tools in place to understand current state and deviations across journey touchpoints and applications.</p>
<p>They used both lab data and real user monitoring (field data) to track Core Web Vitals and additional <a href="https://web.dev/user-centric-performance-metrics/">user-centric performance metrics</a> to analyze the current state of speed performance. They used JavaScript and the <a href="https://github.com/GoogleChrome/web-vitals" rel="noopener"><code>web-vitals.js</code> library</a> to capture the data, which allowed the product analytics team to gain visibility of performance metrics alongside business metrics in the same session and thereby start examining how one affects the other.</p>
<p>The multidisciplinary group set out to understand which metrics mattered most for the business. To do so, they looked at the critical journey path of Farfetch users and tried to link that journey with performance markers. In addition to the Core Web Vitals metrics that Google has outlined, each representing a distinct facet of the user experience, they also used custom JavaScript to track <a href="https://web.dev/ttfb/">Time to First Byte (TTFB)</a>, <a href="https://web.dev/fcp/">First Contentful Paint (FCP)</a>, First Paint and <a href="https://web.dev/tti/">Time to Interactive (TTI)</a>.</p>
<p>The metrics are collected using several methods of the <a href="https://developer.mozilla.org/docs/Web/API/Performance" rel="noopener">Performance API</a>, <a href="https://developer.mozilla.org/docs/Web/API/Long_Tasks_API" rel="noopener">Long Tasks API</a> and Google's polyfills. More details can be found in <a href="https://www.farfetchtechblog.com/en/blog/post/one-less-second-for-the-page-one-giant-leap-for-the-business/" rel="noopener">this mid 2020 Farfetch Tech Blog post</a> by Manuel Garcia, Senior Principal Engineer for the Web.</p>
<p>On the data analytics side, Farfetch have their own multi-channel tracking solution used by front end applications called Omnitracking. It tracks the events generated by page views, user actions and system actions. The Omnitracking Data Model is Farfetch's solution for analytical, data exploration and reporting cases, made on the top of the events generated by trackers. The data model's objective is to help and support anyone who needs to understand:</p>
<ul>
<li>User behavior</li>
<li>User experience on Farfetch applications</li>
<li>Applications usage</li>
<li>Macro and micro conversions</li>
<li>Cross channel and funnel analysis</li>
</ul>
<p>The idea was then to add the performance data of each pageview on farfetch.com, captured by JavaScript, to this data layer. Following this model guaranteed a match between performance data and the main conversion funnel metrics for each session and the base for an analytical exploration on the topic.</p>
<p>Finally, Farfetch established time-based <a href="https://web.dev/performance-budgets-101/">performance budgets</a> for each metric across the main journey pages and a governance process to handle budget breaches. They've also started incorporating performance metrics on CI pipelines to understand budget deviations as soon as possible in the development flow.</p>
<h2 id="step-2-communicating-via-business-language">Step 2: Communicating via business language <a class="w-headline-link" href="https://web.dev/farfetch/#step-2-communicating-via-business-language">#</a></h2>
<p>With performance data now available in Farfetch's internal business intelligence datasets, the analytics team started exploring mathematical models and patterns in the data that could indicate a correlation between performance metrics and business KPIs (for example, conversion rate and percentage of single-page visits), allowing a new view of the financial impact of site speed and UX for the business. This enabled performance to be discussed in a common language with the business decision makers. The analysis included all Core Web Vitals and the other metrics Farfetch deemed valuable. It revealed truly impactful insights.</p>
<p>Having in mind that Google recommends <a href="https://web.dev/lcp/">Largest Contentful Paint (LCP)</a> to stay below 2.5 seconds to provide an optimal user experience, Farfetch studied this threshold carefully and found meaningful results.</p>
<p>Farfetch statistical correlation analysis showed that beyond that point, the conversion rate starts to drop, as well as the exit rate rises. This shows that users really start to feel the downside of a slow page load perception and conversion rate decreases on average -1.3% with each 100ms more of LCP.</p>
<figure>
  <img alt="A graph of LCP, where the Y-axis is conversion rate and percentage of page visits and the X-axis is LCP time. As LCP is faster, percentage of single page visits decreases, and conversion rate increases." decoding="async" height="386" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/bdmOd1MUc6Wt4EUFRzUG.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/bdmOd1MUc6Wt4EUFRzUG.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/bdmOd1MUc6Wt4EUFRzUG.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/bdmOd1MUc6Wt4EUFRzUG.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/bdmOd1MUc6Wt4EUFRzUG.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/bdmOd1MUc6Wt4EUFRzUG.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/bdmOd1MUc6Wt4EUFRzUG.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/bdmOd1MUc6Wt4EUFRzUG.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/bdmOd1MUc6Wt4EUFRzUG.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/bdmOd1MUc6Wt4EUFRzUG.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/bdmOd1MUc6Wt4EUFRzUG.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/bdmOd1MUc6Wt4EUFRzUG.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/bdmOd1MUc6Wt4EUFRzUG.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/bdmOd1MUc6Wt4EUFRzUG.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/bdmOd1MUc6Wt4EUFRzUG.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/bdmOd1MUc6Wt4EUFRzUG.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/bdmOd1MUc6Wt4EUFRzUG.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/bdmOd1MUc6Wt4EUFRzUG.png?auto=format&w=1600 1600w" width="800" />
</figure>
<p>Farfetch also verified an exit rate decrease of -3.1% for each 0.01 less on the <a href="https://web.dev/cls/">Cumulative Layout Shift (CLS)</a> score, reaffirming the impact of page stability to keep users on a website.</p>
<figure>
  <img alt="A graph of CLS, where the Y-axis is conversion rate and percentage of page visits, and the X-axis is the CLS score. The lowest CLS scores show the highest percentage of single page visits, whereas conversions raise at lower CLS scores." decoding="async" height="357" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ijjXV4FFD5lyBYVFEBH2.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ijjXV4FFD5lyBYVFEBH2.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ijjXV4FFD5lyBYVFEBH2.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ijjXV4FFD5lyBYVFEBH2.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ijjXV4FFD5lyBYVFEBH2.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ijjXV4FFD5lyBYVFEBH2.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ijjXV4FFD5lyBYVFEBH2.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ijjXV4FFD5lyBYVFEBH2.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ijjXV4FFD5lyBYVFEBH2.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ijjXV4FFD5lyBYVFEBH2.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ijjXV4FFD5lyBYVFEBH2.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ijjXV4FFD5lyBYVFEBH2.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ijjXV4FFD5lyBYVFEBH2.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ijjXV4FFD5lyBYVFEBH2.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ijjXV4FFD5lyBYVFEBH2.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ijjXV4FFD5lyBYVFEBH2.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ijjXV4FFD5lyBYVFEBH2.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ijjXV4FFD5lyBYVFEBH2.png?auto=format&w=1600 1600w" width="800" />
</figure>
<p>Regarding page interactivity and fluidity, although <a href="https://web.dev/fid/">First Input Delay (FID)</a> is tracked and analyzed continuously, Farfetch also measures TTI, which proved to be a considerably impactful metric for the Farfetch business conversion funnel.</p>
<p>For this, they injected <a href="https://github.com/GoogleChromeLabs/tti-polyfill" rel="noopener">Google's TTI polyfill</a> into the website to store this metric. Using the Long Tasks API to report long tasks (tasks taking longer than 50 milliseconds on the browser's main thread).</p>
<aside class="aside flow bg-state-bad-bg color-state-bad-text"><p class="cluster color-state-bad-text"><span class="aside__icon box-block "><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Error sign">   <path fill-rule="evenodd" clip-rule="evenodd" d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 15v-2h2v2h-2zm0-10v6h2V7h-2z"></path> </svg></span><strong>Caution</strong></p><div class=" flow"> It's no longer recommended to measure TTI in the field, as user interaction can affect your page's TTI in ways that lead to variance in your reports! </div></aside>
<p>The analytics team was then able to find that the conversion rate increased 2.8% for each second reduction on TTI, making a strong case for better code efficiency and unclogging the browser's main thread.</p>
<figure>
  <img alt="A graph of TTI, where the Y-axis is conversion rate and percentage of single page visits, and the X-axis is TTI time. As the TTI time goes up, conversion rate decreases and percentage of single page visits increases." decoding="async" height="381" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/p9tLq7SN6rGmJpvnoaoT.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/p9tLq7SN6rGmJpvnoaoT.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/p9tLq7SN6rGmJpvnoaoT.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/p9tLq7SN6rGmJpvnoaoT.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/p9tLq7SN6rGmJpvnoaoT.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/p9tLq7SN6rGmJpvnoaoT.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/p9tLq7SN6rGmJpvnoaoT.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/p9tLq7SN6rGmJpvnoaoT.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/p9tLq7SN6rGmJpvnoaoT.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/p9tLq7SN6rGmJpvnoaoT.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/p9tLq7SN6rGmJpvnoaoT.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/p9tLq7SN6rGmJpvnoaoT.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/p9tLq7SN6rGmJpvnoaoT.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/p9tLq7SN6rGmJpvnoaoT.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/p9tLq7SN6rGmJpvnoaoT.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/p9tLq7SN6rGmJpvnoaoT.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/p9tLq7SN6rGmJpvnoaoT.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/p9tLq7SN6rGmJpvnoaoT.png?auto=format&w=1600 1600w" width="800" />
</figure>
<p>In the end, this analysis was also able to show that some metrics didn't have a significant impact on business KPIs, or some would be more relevant at different stages of the user journey. This allowed for a complete understanding of the opportunities at hand on each point of the conversion funnel.</p>
<h2 id="step-3-embedding-cultural-change">Step 3: Embedding cultural change <a class="w-headline-link" href="https://web.dev/farfetch/#step-3-embedding-cultural-change">#</a></h2>
<p>Showcasing the insights above alongside qualitative user research on user perception of site speed was paramount to establish alignment with company goals, secure executive-level awareness and buy-in for performance based decision making across product roadmaps. It was now possible to prove how much performance was worth for Farfetch.</p>
<p>To streamline prioritization, Farfetch created a self-service tool they named the Site Speed Business Case Calculator, taking inspiration from <a href="https://www.thinkwithgoogle.com/feature/testmysite/" rel="noopener">Google's Speed Impact Calculator</a>. It allows any product manager to create a business case out of performance improvements by calculating the business impact on the fly. With a data model using the correlation between conversion rate and user experience metrics, it's flexible to adapt to different product scopes, devices and user journey touch points.</p>
<figure>
  <img alt="A screenshot of Farfetch&#x27;s Site Speed Business Case Calculator." decoding="async" height="779" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/OcYv93SYnIg1kfTihK6xqRDebvB2/23elcWwZJW50ZSB9s5CB.png?auto=format" srcset="https://web-dev.imgix.net/image/OcYv93SYnIg1kfTihK6xqRDebvB2/23elcWwZJW50ZSB9s5CB.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/OcYv93SYnIg1kfTihK6xqRDebvB2/23elcWwZJW50ZSB9s5CB.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/OcYv93SYnIg1kfTihK6xqRDebvB2/23elcWwZJW50ZSB9s5CB.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/OcYv93SYnIg1kfTihK6xqRDebvB2/23elcWwZJW50ZSB9s5CB.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/OcYv93SYnIg1kfTihK6xqRDebvB2/23elcWwZJW50ZSB9s5CB.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/OcYv93SYnIg1kfTihK6xqRDebvB2/23elcWwZJW50ZSB9s5CB.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/OcYv93SYnIg1kfTihK6xqRDebvB2/23elcWwZJW50ZSB9s5CB.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/OcYv93SYnIg1kfTihK6xqRDebvB2/23elcWwZJW50ZSB9s5CB.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/OcYv93SYnIg1kfTihK6xqRDebvB2/23elcWwZJW50ZSB9s5CB.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/OcYv93SYnIg1kfTihK6xqRDebvB2/23elcWwZJW50ZSB9s5CB.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/OcYv93SYnIg1kfTihK6xqRDebvB2/23elcWwZJW50ZSB9s5CB.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/OcYv93SYnIg1kfTihK6xqRDebvB2/23elcWwZJW50ZSB9s5CB.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/OcYv93SYnIg1kfTihK6xqRDebvB2/23elcWwZJW50ZSB9s5CB.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/OcYv93SYnIg1kfTihK6xqRDebvB2/23elcWwZJW50ZSB9s5CB.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/OcYv93SYnIg1kfTihK6xqRDebvB2/23elcWwZJW50ZSB9s5CB.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/OcYv93SYnIg1kfTihK6xqRDebvB2/23elcWwZJW50ZSB9s5CB.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/OcYv93SYnIg1kfTihK6xqRDebvB2/23elcWwZJW50ZSB9s5CB.png?auto=format&w=1600 1600w" width="800" />
</figure>
<p>Meanwhile, a set of self-service analytical dashboards have created business-wide visibility of real-time performance indicators and their impact on the business. Performance is now becoming fully embedded in product development, and product teams enjoy easy access to metrics, auditing tools, and performance budget monitoring. Furthermore, because of the data layer integration, performance metrics are also available on Farfetch A/B testing tooling, giving product managers yet another powerful vector of insights.</p>
<p>In recent months, the core team is also on track to establish this culture not only on front-end development teams but also within the platform domain, using similar methodologies to monitor and prove the impact of the main micro services and transactions.</p>
<p>There have been a number of <a href="https://www.youtube.com/watch?v=GD3tUD0Vm88" rel="noopener">Farfetch driven presentations</a> on this topic but also external mentions. For example, a mention on <a href="https://www.youtube.com/watch?v=nPmAE0YjGK0" rel="noopener">a 2021 Google I/O talk on the business impact of Core Web Vitals</a>. This also contributed to giving continuous relevance to the theme and solidified the team's strategy on culture.</p>
<h2 id="step-4-improving-metrics">Step 4: Improving metrics <a class="w-headline-link" href="https://web.dev/farfetch/#step-4-improving-metrics">#</a></h2>
<p>In the end, all of this work needed to contribute to Farfetch objectively improving their website speed metrics, and guaranteeing that their teams would follow best in class practices and pursue enhancement opportunities.</p>
<p>One of the main opportunities detected in 2021 was the need to improve LCP on the two main page types of Farfetch—product pages and product listing pages.</p>
<p>The teams addressed how they were loading the main content of those pages. Armed with a business case that showed the impact of chasing this opportunity, they were able to:</p>
<ul>
<li>Adapt the product image loading component from a JavaScript-based solution to a native implementation.</li>
<li>Define the priority of the images and divide them into critical and non-critical assets.</li>
<li>Load critical images early, with the source already inline in the HTML and using <code>&lt;link rel=&quot;preload&quot;&gt;</code> so they download as soon as possible.</li>
<li>Use the <code>&lt;img loading=&quot;lazy&quot;&gt;</code> attribute for non-critical images, with a polyfill using Intersection Observer on unsupported browsers, such as Safari.</li>
</ul>
<p>With this, they were able to move the needle and prove through A/B testing the hypothesis and business impact. On product pages for example, this effort shaved off more than 600ms, and the A/B test showed an uplift on conversion rate in the range of 1-5% with the company's defined confidence level.</p>
<p>Below are the improvements the team were able to make in terms of the percentage of pageviews that are considered &quot;good&quot;, &quot;needs improvement&quot; and &quot;poor&quot;, based on <a href="https://web.dev/lcp/#what-is-a-good-lcp-score">Google's definition for LCP score</a>.</p>
<figure>
  <img alt="A stacked bar graph of median LCP across Core Web Vitals thresholds for Farfetch listing pages. Pages at the &#x27;good&#x27; threshold increased from 37% to 53%." decoding="async" height="494" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/4qkZjdGJDHNlQbKJtmkJ.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/4qkZjdGJDHNlQbKJtmkJ.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/4qkZjdGJDHNlQbKJtmkJ.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/4qkZjdGJDHNlQbKJtmkJ.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/4qkZjdGJDHNlQbKJtmkJ.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/4qkZjdGJDHNlQbKJtmkJ.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/4qkZjdGJDHNlQbKJtmkJ.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/4qkZjdGJDHNlQbKJtmkJ.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/4qkZjdGJDHNlQbKJtmkJ.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/4qkZjdGJDHNlQbKJtmkJ.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/4qkZjdGJDHNlQbKJtmkJ.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/4qkZjdGJDHNlQbKJtmkJ.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/4qkZjdGJDHNlQbKJtmkJ.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/4qkZjdGJDHNlQbKJtmkJ.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/4qkZjdGJDHNlQbKJtmkJ.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/4qkZjdGJDHNlQbKJtmkJ.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/4qkZjdGJDHNlQbKJtmkJ.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/4qkZjdGJDHNlQbKJtmkJ.png?auto=format&w=1600 1600w" width="800" />
</figure>
<figure>
  <img alt="A stacked bar graph of median LCP across Core Web Vitals thresholds for Farfetch listing pages. Pages at the &#x27;good&#x27; threshold increased from 36% to 48%." decoding="async" height="494" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/hUjnQ4CNtyEhHBUFeuEa.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/hUjnQ4CNtyEhHBUFeuEa.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/hUjnQ4CNtyEhHBUFeuEa.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/hUjnQ4CNtyEhHBUFeuEa.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/hUjnQ4CNtyEhHBUFeuEa.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/hUjnQ4CNtyEhHBUFeuEa.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/hUjnQ4CNtyEhHBUFeuEa.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/hUjnQ4CNtyEhHBUFeuEa.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/hUjnQ4CNtyEhHBUFeuEa.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/hUjnQ4CNtyEhHBUFeuEa.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/hUjnQ4CNtyEhHBUFeuEa.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/hUjnQ4CNtyEhHBUFeuEa.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/hUjnQ4CNtyEhHBUFeuEa.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/hUjnQ4CNtyEhHBUFeuEa.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/hUjnQ4CNtyEhHBUFeuEa.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/hUjnQ4CNtyEhHBUFeuEa.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/hUjnQ4CNtyEhHBUFeuEa.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/hUjnQ4CNtyEhHBUFeuEa.png?auto=format&w=1600 1600w" width="800" />
</figure>
<h2 id="the-rewards-of-a-faster-site-and-better-working-practices">The rewards of a faster site and better working practices <a class="w-headline-link" href="https://web.dev/farfetch/#the-rewards-of-a-faster-site-and-better-working-practices">#</a></h2>
<p>Building a culture around performance and tools like the business case calculator allowed everyone to begin speaking a shared language that can be understood by product managers, stakeholders, and engineers alike. This has precipitated ongoing discussions around how to prioritize new initiatives and performance enhancements.</p>
<p>&quot;We wanted to break the cycle of performance being a tech-only concern, something owned only by the engineering team to deal with and fix,&quot; explains Farfetch's Web Channels Senior Principal Product Manager, Rui Santos. &quot;Connecting performance metrics with business metrics was surprisingly effective to pass the message across very, very quickly. Business drives the company, and connecting its success to speed metrics encouraged a broader set of stakeholders to understand and navigate the trade-off decisions.&quot;</p>
<p>In the luxury e-commerce segment, whether your site is fast or slow can dictate how consumers see your brand and your service quality as a whole. For users, quality equates to luxury—and this applies to every aspect of their experience, including how your website performs. With site speed producing a proven effect on conversion rate, performance now occupies a safe position in forward planning at Farfetch.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Yahoo! JAPAN はパスワードレス認証で問い合わせを 25% 削減、ログイン時間も 2.6 倍速に]]></title>
<description><![CDATA[Yahoo! JAPAN は日本にて検索やニュースといったメディアサービス、e コマース、メールサービスなど、100を超えるサービスを提供している企業です。これらのサービスで利用するためのユーザーアカウントも長年提供し続け、月間のログインユーザーは 5,000 万を超える規模となっています。しかし、このユーザーアカウントを提供する中で、ユーザーアカウントに対しての攻撃を継続的に受けており、また、アカウントを継続利用する上での課題についてユーザーから問い合わせも多く頂いていました。これらの課題の多くはパスワードという認証手段に依存するものでした。また、当時、技術的にもパスワード以外の認証手...]]></description>
<link>https://tsecurity.de/de/1725685/it+betriebssysteme/web+tipps/yahoo+japan+25+26/</link>
<pubDate>Thu, 08 Dec 2022 19:45:05 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Yahoo! JAPAN は日本にて検索やニュースといったメディアサービス、e コマース、メールサービスなど、100を超えるサービスを提供している企業です。これらのサービスで利用するためのユーザーアカウントも長年提供し続け、月間のログインユーザーは 5,000 万を超える規模となっています。しかし、このユーザーアカウントを提供する中で、ユーザーアカウントに対しての攻撃を継続的に受けており、また、アカウントを継続利用する上での課題についてユーザーから問い合わせも多く頂いていました。これらの課題の多くはパスワードという認証手段に依存するものでした。また、当時、技術的にもパスワード以外の認証手段を提供するための機能やデバイスの普及が始まりつつありました。こういった背景のもと、Yahoo! JAPAN はパスワードによる認証からパスワードレスな認証へ移行すると判断しました。</p>
<h2 id="なぜパスワードレスか">なぜパスワードレスか <a class="w-headline-link" href="https://web.dev/i18n/ja/yahoo-japan-identity-case-study/#%E3%81%AA%E3%81%9C%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%83%AC%E3%82%B9%E3%81%8B">#</a></h2>
<p>Yahoo! JAPAN では以前、一般的なWebサービスのようにログイン ID とパスワードによる認証を基本としていました。しかし、パスワードは不正アクセスの被害を受ける可能性が高く、また、パスワードにまつわる問い合わせも非常に多い状況でした。</p>
<p>パスワードに関連して様々な攻撃を観測しておりますが、パスワードリスト型攻撃やフィッシング詐欺などが中心となっています。上述したとおり、Yahoo! JAPAN が提供するサービスには e コマースなど金銭に関わるものがあるため不正アクセスの被害やアカウントを失った際のユーザーの被害が大きくなりがちです。</p>
<p>パスワードリスト型攻撃が多い背景としては、複数のアプリや Web サイトでのパスワード使いまわしが多い現状があります。以下の数字は Yahoo! JAPAN が行ったアンケートの結果です。おおよそ 60% 以上のユーザーが複数のサービスでパスワードを使いまわしていると回答しており、パスワードリスト型攻撃が有効な攻撃方法となっていると考えられます。</p>
<ul class="stats">
<div class="stats__item">
<p class="stats__figure">
50
<sub>%</sub>
</p>
<p>50% 以上が ID / パスワードを 6 個以上使用</p>
</div>
<div class="stats__item">
<p class="stats__figure">
60
<sub>%</sub>
</p>
<p>60% 以上が「複数のサービスでパスワードを使いまわしている」</p>
</div>
<div class="stats__item">
<p class="stats__figure">
70
<sub>%</sub>
</p>
<p>最も利用されているログイン方法は「パスワード」で約 76%</p>
</div>
</ul>
<p>パスワードに関する問い合わせとしては、パスワードを忘れてしまったという問い合わせが大半でした。パスワードに関連して、ログイン ID も忘れてしまったという問い合わせもあり、これらの問い合わせだけで、最も多い時期ではアカウントにまつわる問い合わせの 1/3 以上を占めている状況でした。</p>
<p>これらの状況を改善するべく、Yahoo! JAPAN はパスワードレスに移行すると判断しました。パスワードレスを進めることでセキュリティだけでなくユーザビリティについても改善できると考えています。</p>
<p>セキュリティ観点ではユーザーの認証手段からパスワードを無くすことで、特にリスト型攻撃への被害を減らすことが出来、ユーザビリティ観点ではパスワードという記憶による認証に頼らない認証手段を提供することで、パスワードを忘れてログインできない、という事態を無くすことが出来ます。</p>
<p>従来からいろいろなセキュリティ向上の取り組みを行っていましたが、単純にセキュリティが高いだけでは利用者に負担をかけるだけになってしまい、結果としてセキュリティの高い状態を実現できません。ユーザビリティを共に向上させられることや、セキュリティを高める必然性が伝わるようなコミュニケーションを心がける必要があると考えています。それが結果としてユーザビリティだけではなく、セキュリティを向上させることに
繋がります。</p>
<h2 id="yahoo-japan-のパスワードレスの取り組み">Yahoo! JAPAN のパスワードレスの取り組み <a class="w-headline-link" href="https://web.dev/i18n/ja/yahoo-japan-identity-case-study/#yahoo-japan-%E3%81%AE%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%83%AC%E3%82%B9%E3%81%AE%E5%8F%96%E3%82%8A%E7%B5%84%E3%81%BF">#</a></h2>
<p>Yahoo! JAPAN ではパスワードレスを進めるため、いろいろな取り組みをしています。大別すると、</p>
<ol>
<li>パスワードに代わる認証手段の提供</li>
<li>パスワードの無効化</li>
<li>パスワードレスなアカウント登録</li>
</ol>
<p>の3つがあります。</p>
<p>1、2 は既存の利用者に対して、3 は新規の利用者に対しての取り組みです。</p>
<h3 id="1-パスワードに代わる認証手段の提供">1. パスワードに代わる認証手段の提供 <a class="w-headline-link" href="https://web.dev/i18n/ja/yahoo-japan-identity-case-study/#1-%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%81%AB%E4%BB%A3%E3%82%8F%E3%82%8B%E8%AA%8D%E8%A8%BC%E6%89%8B%E6%AE%B5%E3%81%AE%E6%8F%90%E4%BE%9B">#</a></h3>
<p>パスワードを無効にするのであれば、パスワードに変わる認証手段を提供しなければいけません。</p>
<p>Yahoo! JAPAN では、パスワードの代替として主に下記のような手段を提供しています。</p>
<ol>
<li><a href="https://web.dev/sms-otp-form/">SMS 認証</a></li>
<li><a href="https://developers.google.com/identity/fido" rel="noopener">FIDO 認証</a></li>
</ol>
<p>加えて、メール認証やパスワード + SMS OTP、パスワード + メール OTP などの認証手段も提供しています。</p>
<h4 id="sms-認証">SMS 認証 <a class="w-headline-link" href="https://web.dev/i18n/ja/yahoo-japan-identity-case-study/#sms-%E8%AA%8D%E8%A8%BC">#</a></h4>
<p>SMS 認証は、ログインしようとしているユーザーが登録・確認済みの電話番号に SMS で 6 桁程度の認証用コードを送り、そのコードの入力によって認証する仕組みです。ユーザーは SMS が届くと、アプリを開いて認証用コードを記憶、もしくはコピーして入力する必要がありました。</p>
<figure class="screenshot">
<img alt="" decoding="async" height="437" loading="lazy" sizes="(min-width: 668px) 668px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/h08m9uzVJg9uNzM3LE5k.jpg?auto=format" srcset="https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/h08m9uzVJg9uNzM3LE5k.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/h08m9uzVJg9uNzM3LE5k.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/h08m9uzVJg9uNzM3LE5k.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/h08m9uzVJg9uNzM3LE5k.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/h08m9uzVJg9uNzM3LE5k.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/h08m9uzVJg9uNzM3LE5k.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/h08m9uzVJg9uNzM3LE5k.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/h08m9uzVJg9uNzM3LE5k.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/h08m9uzVJg9uNzM3LE5k.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/h08m9uzVJg9uNzM3LE5k.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/h08m9uzVJg9uNzM3LE5k.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/h08m9uzVJg9uNzM3LE5k.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/h08m9uzVJg9uNzM3LE5k.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/h08m9uzVJg9uNzM3LE5k.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/h08m9uzVJg9uNzM3LE5k.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/h08m9uzVJg9uNzM3LE5k.jpg?auto=format&w=1336 1336w" width="668" />
</figure>
<p>iOS では以前から SMS を OS が読み取り本文中の認証用コードをサジェストする機能がありましたが、最近では、<code>input</code> 要素の <code>autocomplete</code> 属性に <code>&quot;one-time-code&quot;</code>と指定することで、サジェストが利用できるようになりました。Android や Windows、Mac の Chrome でも、<a href="https://developer.mozilla.org/docs/Web/API/WebOTP_API" rel="noopener">WebOTP API</a> という仕組みを利用することによって同様の体験を提供可能になっています。</p>
<p>HTML</p>
<div><pre class="language-html"><code class="language-html"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>form</span><span class="token punctuation">></span></span><br />  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>input</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>text<span class="token punctuation">"</span></span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>code<span class="token punctuation">"</span></span> <span class="token attr-name">autocomplete</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>one-time-code<span class="token punctuation">"</span></span><span class="token punctuation">/></span></span><br />  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>button</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>submit<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>sign in<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>button</span><span class="token punctuation">></span></span><br /><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>form</span><span class="token punctuation">></span></span></code></pre>
</div><p>JavaScript</p>
<div><pre class="language-javascript"><code class="language-javascript"><span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token string">'OTPCredential'</span> <span class="token keyword">in</span> window<span class="token punctuation">)</span> <span class="token punctuation">{</span><br />  <span class="token keyword">const</span> input <span class="token operator">=</span> document<span class="token punctuation">.</span><span class="token function">getElementById</span><span class="token punctuation">(</span><span class="token string">'code'</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>input<span class="token punctuation">)</span> <span class="token keyword">return</span><span class="token punctuation">;</span><br />  <span class="token keyword">const</span> ac <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">AbortController</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token keyword">const</span> form <span class="token operator">=</span> input<span class="token punctuation">.</span><span class="token function">closest</span><span class="token punctuation">(</span><span class="token string">'form'</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token keyword">if</span> <span class="token punctuation">(</span>form<span class="token punctuation">)</span> <span class="token punctuation">{</span><br />    form<span class="token punctuation">.</span><span class="token function">addEventListener</span><span class="token punctuation">(</span><span class="token string">'submit'</span><span class="token punctuation">,</span> <span class="token parameter">e</span> <span class="token operator">=></span> <span class="token punctuation">{</span><br />      ac<span class="token punctuation">.</span><span class="token function">abort</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token punctuation">}</span><br />  navigator<span class="token punctuation">.</span>credentials<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token punctuation">{</span><br />    <span class="token literal-property property">otp</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">transport</span><span class="token operator">:</span><span class="token punctuation">[</span><span class="token string">'sms'</span><span class="token punctuation">]</span> <span class="token punctuation">}</span><span class="token punctuation">,</span><br />    <span class="token literal-property property">signal</span><span class="token operator">:</span> ac<span class="token punctuation">.</span>signal<br />  <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span><span class="token parameter">otp</span> <span class="token operator">=></span> <span class="token punctuation">{</span><br />    input<span class="token punctuation">.</span>value <span class="token operator">=</span> otp<span class="token punctuation">.</span>code<span class="token punctuation">;</span><br />  <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">catch</span><span class="token punctuation">(</span><span class="token parameter">err</span> <span class="token operator">=></span> <span class="token punctuation">{</span><br />    console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>err<span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br /><span class="token punctuation">}</span></code></pre>
</div><p>いずれのアプローチも、SMS 文中にドメインを記載することで、指定されたドメインでのみサジェストすることにより、フィッシングされにくい仕組みになっています。 WebOTP API および <code>autocomplete=&quot;one-time-code&quot;</code> についての詳細は<a href="https://web.dev/sms-otp-form/">こちらの記事</a>をご覧ください。</p>
<figure class="screenshot">
<img alt="" decoding="async" height="523" loading="lazy" sizes="(min-width: 387px) 387px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/Szaf3C0hfjLNkTWAVf9B.png?auto=format" srcset="https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/Szaf3C0hfjLNkTWAVf9B.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/Szaf3C0hfjLNkTWAVf9B.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/Szaf3C0hfjLNkTWAVf9B.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/Szaf3C0hfjLNkTWAVf9B.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/Szaf3C0hfjLNkTWAVf9B.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/Szaf3C0hfjLNkTWAVf9B.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/Szaf3C0hfjLNkTWAVf9B.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/Szaf3C0hfjLNkTWAVf9B.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/Szaf3C0hfjLNkTWAVf9B.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/Szaf3C0hfjLNkTWAVf9B.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/Szaf3C0hfjLNkTWAVf9B.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/Szaf3C0hfjLNkTWAVf9B.png?auto=format&w=774 774w" width="387" />
</figure>
<h4 id="fido-webauthn">FIDO / WebAuthn <a class="w-headline-link" href="https://web.dev/i18n/ja/yahoo-japan-identity-case-study/#fido-webauthn">#</a></h4>
<p>FIDO / WebAuthn はハードウェア認証器で公開鍵暗号ペアを生成し、所持証明する認証方式です。特にスマートフォンが認証器の場合は、指紋センサーや顔識別といった生体認証と組み合わせて、一段階二要素認証を行うことができます。この際、サーバーには署名と生体認証が成功したという情報のみが送られるため、生体情報が盗まれる危険性はありません。</p>
<p>下記の図は FIDO / WebAuthn を行うサーバ/クライアントの構成図です。Client にある Authenticator は生体認証などを用いてユーザーの認証を行い、その結果に対して公開鍵暗号方式による署名を行います。また、署名作成に用いる秘密鍵を <a href="https://en.wikipedia.org/wiki/Trusted_execution_environment" rel="noopener">TEE (Trusted Execution Environment)</a> などに安全に保管します。FIDO では FIDO を利用するサービス提供者などのことを RP と呼びますが、RP のアプリケーションは OS、Browser を通して Authenticator から取得した検証結果を Server に送信し、Server は検証結果の妥当性を検証することで認証を完了します。</p>
<figure>
   <img alt="" decoding="async" height="400" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/PkFYWnOZABjPu7Zc7rXN.png?auto=format" srcset="https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/PkFYWnOZABjPu7Zc7rXN.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/PkFYWnOZABjPu7Zc7rXN.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/PkFYWnOZABjPu7Zc7rXN.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/PkFYWnOZABjPu7Zc7rXN.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/PkFYWnOZABjPu7Zc7rXN.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/PkFYWnOZABjPu7Zc7rXN.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/PkFYWnOZABjPu7Zc7rXN.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/PkFYWnOZABjPu7Zc7rXN.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/PkFYWnOZABjPu7Zc7rXN.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/PkFYWnOZABjPu7Zc7rXN.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/PkFYWnOZABjPu7Zc7rXN.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/PkFYWnOZABjPu7Zc7rXN.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/PkFYWnOZABjPu7Zc7rXN.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/PkFYWnOZABjPu7Zc7rXN.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/PkFYWnOZABjPu7Zc7rXN.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/PkFYWnOZABjPu7Zc7rXN.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/PkFYWnOZABjPu7Zc7rXN.png?auto=format&w=1600 1600w" width="800" />
</figure>
<p>詳しくは<a href="https://fidoalliance.org/fido-authentication/" rel="noopener">こちらの記事</a>をご覧ください。</p>
<p>FIDO についてはデバイスの対応も進み、現在では下記のような対応状況となっています。</p>
<div class="table-wrapper scrollbar">
  <table>
    <thead>
       <tr>
   <td>
    <strong>OS</strong>
   </td>
   <td>
    <strong>FIDO サポート</strong>
   </td>
  </tr>
  </thead>
  <tbody>
  <tr>
   <td>
    Android
   </td>
   <td>
    アプリ、ブラウザ (Chrome)
   </td>
  </tr>
  <tr>
   <td>
    iOS
   </td>
   <td>
    アプリ (iOS14 以降)、ブラウザ (Safari 14 以降)
   </td>
  </tr>
  <tr>
   <td>
    Windows
   </td>
   <td>
    ブラウザ (Edge, Chrome, Firefox)
   </td>
  </tr>
  <tr>
   <td>
    Mac (Big Sur 以降)
   </td>
   <td>
    ブラウザ (Safari, Chrome)
   </td>
  </tr>
</tbody>
  </table>
</div>
<p>また、Yahoo! JAPAN ではこのうち、Android アプリ  / Web、iOS アプリ / Web、Windows (Edge、Chrome、Firefox)、Mac (Safari、Chrome)で FIDO に対応しています。コンシューマー向けのサービスとしてはおおよそのデバイスで FIDO は使える状況と言えますので、パスワードレスを進める上で FIDO はとても良い選択肢だと考えています。</p>
<p>Yahoo! JAPAN ではユーザーが他の手段で認証後、FIDO / WebAuthn を登録していなければ、登録を推奨します。こうすることで、ユーザーが同じデバイスでログインする必要がある場合、例えば SMS 認証を繰り返すことなく、指紋認証だけですぐに認証することができ、ユーザー体験が向上します。</p>
<figure class="alignright">
  <img alt="" class="screenshot" decoding="async" height="497" loading="lazy" sizes="(min-width: 520px) 520px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/iq0dODcbp3WcPUGTwHkl.png?auto=format" srcset="https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/iq0dODcbp3WcPUGTwHkl.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/iq0dODcbp3WcPUGTwHkl.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/iq0dODcbp3WcPUGTwHkl.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/iq0dODcbp3WcPUGTwHkl.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/iq0dODcbp3WcPUGTwHkl.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/iq0dODcbp3WcPUGTwHkl.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/iq0dODcbp3WcPUGTwHkl.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/iq0dODcbp3WcPUGTwHkl.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/iq0dODcbp3WcPUGTwHkl.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/iq0dODcbp3WcPUGTwHkl.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/iq0dODcbp3WcPUGTwHkl.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/iq0dODcbp3WcPUGTwHkl.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/iq0dODcbp3WcPUGTwHkl.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/iq0dODcbp3WcPUGTwHkl.png?auto=format&w=1040 1040w" width="520" />
  <figcaption>Yahoo! JAPAN で利用される FIDO</figcaption>
</figure>
<p>ただし、登録した生体認証は同じデバイスでしか利用できないため、ユーザーは新しいデバイスに移る度に別の手段で認証し、新しく生体認証を登録する必要があります。</p>
<p>パスワードレスの普及を段階的に進めるためには、その過程でパスワードから移行中のユーザーを含め、複数の認証手段をユーザーに提供する必要があります。複数の認証手段を提供すると、ユーザーによって認証手段の設定状態も違いますし、ブラウザによって使える認証手段も違います。さらには、前回の認証手段と同じ認証手段でのログインができるとユーザーにとっては良い体験となると思います。これらの要件を満たすため、前回認証に用いた認証手段が何であるか、Cookie などに情報を保持してクライアントに紐づけて管理したり、認証時に利用しているブラウザ / アプリを分析する必要があります。認証時はユーザーの設定状態、クライアントで前回行われた認証手段、最低限必要な認証のレベルなどから判断して適切な認証手段をユーザーに求めます。</p>
<h3 id="2-パスワードの無効化">2. パスワードの無効化 <a class="w-headline-link" href="https://web.dev/i18n/ja/yahoo-japan-identity-case-study/#2-%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%81%AE%E7%84%A1%E5%8A%B9%E5%8C%96">#</a></h3>
<p>Yahoo! JAPAN ではパスワードの代替となる認証手段をユーザーに設定してもらった上でパスワードを無効化し、パスワードを使えないようにしています。パスワードの代替となる認証手段を設定するだけではなく、パスワードを使えなくすること（もしくはパスワードだけでサインイン出来なくすること）によって初めてリスト型攻撃への防御となります。</p>
<p>ここで問題となるのが、如何にユーザーにパスワードを無効化してもらうかということです。ユーザーにパスワードを無効化してもらえるよう、下記のような取り組みを行っています。</p>
<ul>
<li>ユーザーがパスワードを再設定する場面でパスワードの代替となる認証手段を訴求</li>
<li>頻度高く認証を求める場面で使いやすい認証手段（FIDO など）の設定とともにパスワードの無効化を訴求</li>
<li>e コマースの決済のようなリスクの高いサービスを利用する前にパスワードの無効化を訴求</li>
</ul>
<p>特にパスワードを忘れた場合、いわゆるアカウントリカバリをユーザーは行いますが、この際に以前であればパスワードを再設定していましたが、パスワード以外の認証手段も登録できるようにしており、これを推奨しています。</p>
<h3 id="3-パスワードレスなアカウント登録">3. パスワードレスなアカウント登録 <a class="w-headline-link" href="https://web.dev/i18n/ja/yahoo-japan-identity-case-study/#3-%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%83%AC%E3%82%B9%E3%81%AA%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E7%99%BB%E9%8C%B2">#</a></h3>
<p>これが最もシンプルかつ効率的な対策です。アカウント作成時からパスワード不要のアカウントとして登録するのです。</p>
<p>Yahoo! JAPAN では SMS認 証をした上でまずSMSによるサインインが出来るアカウントとして登録をするようになっています。その後、任意で FIDOの 登録を出来るよう FIDO設定の訴求を行っています。FIDO はデバイスごとの設定であるためデバイスが利用できなくなってしまうとアカウントリカバリーが難しいため、まずは電話番号を登録し、その後に FIDO など他の認証手段の登録を求めています。</p>
<h3 id="パスワードレスについての主な課題">パスワードレスについての主な課題 <a class="w-headline-link" href="https://web.dev/i18n/ja/yahoo-japan-identity-case-study/#%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%83%AC%E3%82%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E3%81%AE%E4%B8%BB%E3%81%AA%E8%AA%B2%E9%A1%8C">#</a></h3>
<p>パスワードという認証手段は人間の記憶に頼ったもので、デバイスに依存しない認証手段です。一方、パスワードレスへの取り組みとしてここまでに紹介した認証手段はデバイスに依存します。そのため、複数デバイスの間で同じアカウントを使うケースや、デバイスを失ったケースにおいて課題を抱えています。</p>
<p>複数デバイスに関する課題の具体例を紹介します。複数デバイスに関する課題は主にユーザビリティに関わるもので、下記のようなものがあります。</p>
<ul>
<li>SMS 認証を利用する際、PCを利用しているときにスマートフォンに届く SMS を閲覧する必要があり、面倒である</li>
<li>FIDO で、特に Platform Authenticator と呼ばれる OS などに紐付いた Authenticator を使う場合、ユーザーが複数のデバイスを利用すると登録していないデバイスでは FIDO による認証が行えず、デバイスごとに登録する必要がある</li>
</ul>
<p>デバイスを失ったケースの課題の具体例としては下記のようなものがあります。</p>
<ul>
<li>電話番号の回線を契約解除すると登録された電話番号への SMS の送信ができなくなる</li>
<li>FIDO は秘密鍵をデバイスに保管する方式であり、当然デバイスを失うと発行した秘密鍵は利用できなくなる</li>
</ul>
<p>パスワードレスの推進においてこれらの課題は重要なトピックで、Yahoo! JAPAN でもいろいろな取組をしています。</p>
<p>シンプルかつ最も重要な解決手段として、複数の認証手段を登録してもらうというやり方があります。これはデバイスを紛失するなどといった事態に備えた取り組みであり、デバイスごとでの最適な認証手段の設定でもあります。FIDO の鍵はデバイスに依存するので、複数のデバイスで FIDO の秘密鍵を登録することも良いやり方です。</p>
<p>他にも、WebOTP API を使うことで SMS の届く Android から PC の Chrome に SMS 内にある確認コードを受け渡すこともできます。詳しくは<a href="https://developer.chrome.com/blog/cross-device-webotp/" rel="noopener">こちらの記事</a>をご覧ください。また、最近では Apple が <a href="https://developer.apple.com/documentation/authenticationservices/public-private_key_authentication/supporting_passkeys" rel="noopener">PassKeys</a> という機能を発表しています。この機能は iCloud KeyChain を用いることで、デバイスに保存された秘密鍵を同じApple ID で Sign In しているデバイス間で共有し、デバイスごとの登録を不要にするものです（その後 Google、Microsoft と<a href="https://fidoalliance.org/apple-google-and-microsoft-commit-to-expanded-support-for-fido-standard-to-accelerate-availability-of-passwordless-sign-ins-jp/?lang=ja" rel="noopener">同名のプロジェクトを共同で推進することを発表</a>）。なお、FIDO アライアンスもアカウントリカバリに関する課題を重要視しており<a href="https://fidoalliance.org/white-paper-multiple-authenticators-for-reducing-account-recovery-needs-for-fido-enabled-consumer-accounts/" rel="noopener">ホワイトペーパー</a>を発行しています。</p>
<p>これらの課題に対する取り組みはパスワードレスの拡大に伴って、更に重要なトピックとなっていくと考えています。</p>
<h3 id="パスワードレスの推進">パスワードレスの推進 <a class="w-headline-link" href="https://web.dev/i18n/ja/yahoo-japan-identity-case-study/#%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%83%AC%E3%82%B9%E3%81%AE%E6%8E%A8%E9%80%B2">#</a></h3>
<p>これらのパスワードレスへの取り組みを Yahoo! JAPAN は 2015 年頃より進めてきました。2015 年 5 月の FIDO サーバーの認定取得を始めとして、そこから SMS 認証の導入や、パスワード無効化機能の提供、各デバイスでの FIDO 対応などを順次進めて来ました。いまでは月間アクティブユーザーのうち、3,000 万を超えるユーザーがパスワードを無効化済みで、パスワード以外の認証手段を用いています。Yahoo! JAPAN での FIDO への対応は Android ブラウザ（Chrome）から始まり、いまでは FIDO の設定したユーザーは 1,000 万を超えています。</p>
<p>この取組の成果として、ログイン ID / パスワードを忘れたという問い合わせについて、最も多かった時期から比べて、全体に占める割合が25%も減少しましたし、不正アクセスについても、パスワードレスのアカウントが増えることにより減少することが確認できています。</p>
<p>特に FIDO は設定も簡単なため、その設定 CVR も高くなっています。実際に、Yahoo! JAPANでは前述の SMS 認証などより CVR が高いことがわかっています。また、FIDO については SMS認証に比べ認証時の成功率が高いこと、また認証にかかる時間についても平均速度が速く中央値も最も速いことがわかっています。なお、パスワードについては認証時間が短いグループもいることがわかっており、これはブラウザの <a href="https://web.dev/sign-in-form-best-practices/#current-password"><code>autocomplete=&quot;current-password&quot;</code></a> によるものではないかと考えています。</p>
<ul class="stats">
<div class="stats__item">
<p class="stats__figure">
25
<sub>%</sub>
</p>
<p>ログイン ID / パスワード忘れの問い合わせの削減</p>
</div>
<div class="stats__item">
<p class="stats__figure">
74
<sub>%</sub>
</p>
<p>FIDO での認証成功率</p>
</div>
<div class="stats__item">
<p class="stats__figure">
65
<sub>%</sub>
</p>
<p>SMS 認証での認証成功率</p>
</div>
</ul>
<figure class="screenshot">
<img alt="パスワード、SMS、FIDO それぞれによる認証時間を比較したグラフ" decoding="async" height="484" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/YLflGBAPWecgtKJLqCJHSzHqe2J2/FHX1juV7V9GUpQnhs1sL.png?auto=format" srcset="https://web-dev.imgix.net/image/YLflGBAPWecgtKJLqCJHSzHqe2J2/FHX1juV7V9GUpQnhs1sL.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/YLflGBAPWecgtKJLqCJHSzHqe2J2/FHX1juV7V9GUpQnhs1sL.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/YLflGBAPWecgtKJLqCJHSzHqe2J2/FHX1juV7V9GUpQnhs1sL.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/YLflGBAPWecgtKJLqCJHSzHqe2J2/FHX1juV7V9GUpQnhs1sL.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/YLflGBAPWecgtKJLqCJHSzHqe2J2/FHX1juV7V9GUpQnhs1sL.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/YLflGBAPWecgtKJLqCJHSzHqe2J2/FHX1juV7V9GUpQnhs1sL.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/YLflGBAPWecgtKJLqCJHSzHqe2J2/FHX1juV7V9GUpQnhs1sL.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/YLflGBAPWecgtKJLqCJHSzHqe2J2/FHX1juV7V9GUpQnhs1sL.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/YLflGBAPWecgtKJLqCJHSzHqe2J2/FHX1juV7V9GUpQnhs1sL.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/YLflGBAPWecgtKJLqCJHSzHqe2J2/FHX1juV7V9GUpQnhs1sL.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/YLflGBAPWecgtKJLqCJHSzHqe2J2/FHX1juV7V9GUpQnhs1sL.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/YLflGBAPWecgtKJLqCJHSzHqe2J2/FHX1juV7V9GUpQnhs1sL.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/YLflGBAPWecgtKJLqCJHSzHqe2J2/FHX1juV7V9GUpQnhs1sL.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/YLflGBAPWecgtKJLqCJHSzHqe2J2/FHX1juV7V9GUpQnhs1sL.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/YLflGBAPWecgtKJLqCJHSzHqe2J2/FHX1juV7V9GUpQnhs1sL.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/YLflGBAPWecgtKJLqCJHSzHqe2J2/FHX1juV7V9GUpQnhs1sL.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/YLflGBAPWecgtKJLqCJHSzHqe2J2/FHX1juV7V9GUpQnhs1sL.png?auto=format&w=1600 1600w" width="800" />
<figcaption>平均すると、パスワードでは 21 秒、SMS では 27 秒かかるが、FIDO では 8 秒で認証できる。</figcaption>
</figure>
<p>パスワードレスを進める上で一番難しいことは、認証手段の追加ではなく、その利用を如何に普及させるかというところです。パスワードレスによるサービス利用の体験が良く、またユーザーにとって合理的でなければなかなか移行は進みませんので、ユーザビリティを高めることで結果としてユーザーのセキュリティ向上を実現させる必要があり、これらはサービスによって独自の工夫が必要になると考えています。</p>
<h2 id="まとめ">まとめ <a class="w-headline-link" href="https://web.dev/i18n/ja/yahoo-japan-identity-case-study/#%E3%81%BE%E3%81%A8%E3%82%81">#</a></h2>
<p>今回は Yahoo! JAPAN のパスワードレスへの取り組みを紹介させていただきました。パスワードによる認証はセキュリティ面のリスクもあり、またユーザビリティの点でも課題を抱えています。その上、現在は、Web OTP API や FIDO など、パスワード以外での認証を支える技術も普及してきていますので、パスワードレスの取り組みを始めるべき時期と言えます。Yahoo! JAPAN では、このパスワードレスの取り組みにより、ユーザビリティ、セキュリティ双方の効果が確実に出ています。ただ、まだ多くのユーザーがパスワードを使用されておりますので、引き続きパスワードレスな認証手段の利用を拡大させていきます。また、パスワードレスな認証手段にプロダクトのユーザー体験を最適化するよう、プロダクトの改善も続けていきたいと考えています。</p>
<p><em>Photo by olieman.eth on <a href="https://unsplash.com/" rel="noopener">Unsplash</a></em></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Yahoo! JAPAN's password-free authentication reduced inquiries by 25%, sped up sign-in time by 2.6x]]></title>
<description><![CDATA[Yahoo! JAPAN is one of the largest media companies in Japan, providing
services such as search, news, e-commerce, and e-mail. Over 50 million users
log in to Yahoo! JAPAN services every month.
Over the years, there were many attacks on user accounts and issues that led
to lost account access. Mos...]]></description>
<link>https://tsecurity.de/de/1725686/it+betriebssysteme/web+tipps/yahoo+japans+password-free+authentication+reduced+inquiries+by+25+sped+up+sign-in+time+by+26x/</link>
<pubDate>Thu, 08 Dec 2022 19:45:05 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Yahoo! JAPAN is one of the largest media companies in Japan, providing
services such as search, news, e-commerce, and e-mail. Over 50 million users
log in to Yahoo! JAPAN services every month.</p>
<p>Over the years, there were many attacks on user accounts and issues that led
to lost account access. Most of these issues were related to password usage
for authentication.</p>
<p>With recent advances in authentication technology, Yahoo! JAPAN has decided to
move from password-based to passwordless authentication.</p>
<h2 id="why-passwordless">Why passwordless? <a class="w-headline-link" href="https://web.dev/yahoo-japan-identity-case-study/#why-passwordless">#</a></h2>
<p>As Yahoo! JAPAN offers e-commerce and other money-related services, there's a
risk of significant damage to users in the event of unauthorized access or
account loss.</p>
<p>The most common attacks related to passwords were password list attacks and
phishing scams. One of the reasons why password list attacks are common and
effective is many people's habit of using the same password for multiple
applications and websites.</p>
<p>The following figures are the results of a survey conducted by Yahoo! JAPAN.</p>
<ul class="stats">
<div class="stats__item">
<p class="stats__figure">
50
<sub>%</sub>
</p>
<p>use the same ID and password on six or more sites</p>
</div>
<div class="stats__item">
<p class="stats__figure">
60
<sub>%</sub>
</p>
<p>Use the same password across multiple sites</p>
</div>
<div class="stats__item">
<p class="stats__figure">
70
<sub>%</sub>
</p>
<p>use a password as the primary way to login</p>
</div>
</ul>
<p>Users often forget their passwords, which accounted for the majority of
password-related inquiries. There were also inquiries from users who had
forgotten their login IDs in addition to their passwords. At their peak, these
inquiries accounted for more than a third of all account-related inquiries.</p>
<p>By going passwordless, Yahoo! JAPAN aimed to improve not only security, but
also usability, without placing any extra burden on users.</p>
<p>From a security perspective, eliminating passwords from the user
authentication process reduces the damage from list-based attacks, and from a
usability perspective, providing an authentication method that does not rely
on remembering passwords prevents situations where a user is unable to login
because they forgot their password.</p>
<h2 id="yahoo-japans-passwordless-initiatives">Yahoo! JAPAN's passwordless initiatives <a class="w-headline-link" href="https://web.dev/yahoo-japan-identity-case-study/#yahoo-japans-passwordless-initiatives">#</a></h2>
<p>Yahoo! JAPAN is taking a number of steps to promote passwordless
authentication, which can be broadly divided into three categories:</p>
<ol>
<li>Provide an alternative means of authentication to passwords.</li>
<li>Password deactivation.</li>
<li>Passwordless account registration.</li>
</ol>
<p>The first two initiatives aimed at existing users, while passwordless
registration is aimed at new users.</p>
<h3 id="1-providing-an-alternative-means-of-authentication-to-passwords">1. Providing an alternative means of authentication to passwords <a class="w-headline-link" href="https://web.dev/yahoo-japan-identity-case-study/#1-providing-an-alternative-means-of-authentication-to-passwords">#</a></h3>
<p>Yahoo! JAPAN offers the following alternatives to passwords.</p>
<ol>
<li><a href="https://web.dev/sms-otp-form/">SMS authentication</a></li>
<li><a href="https://developers.google.com/identity/fido" rel="noopener">FIDO with WebAuthn</a></li>
</ol>
<p>In addition, we also offer authentication methods such as e-mail
authentication, password combined with SMS OTP (one time password), and
password combined with email OTP.</p>
<aside class="aside flow bg-tertiary-box-bg color-tertiary-box-text"><p class="cluster "><span class="aside__icon box-block "><svg width="24" height="24" viewBox="0 0 24 24" role="img" aria-label="Lightbulb" fill="currentColor" xmlns="http://www.w3.org/2000/svg">   <path d="M9 21c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-1H9v1zm3-19C8.14 2 5 5.14 5 9c0 2.38 1.19 4.47 3 5.74V17c0 .55.45 1 1 1h6c.55 0 1-.45 1-1v-2.26c1.81-1.27 3-3.36 3-5.74 0-3.86-3.14-7-7-7zm2.85 11.1l-.85.6V16h-4v-2.3l-.85-.6A4.997 4.997 0 017 9c0-2.76 2.24-5 5-5s5 2.24 5 5c0 1.63-.8 3.16-2.15 4.1z"></path> </svg></span><strong>Important</strong></p><div class=" flow"> Yahoo! JAPAN restricts their service to phone carriers operating inside Japan and prohibits VoIP SMS. </div></aside>
<h4 id="sms-authentication">SMS authentication <a class="w-headline-link" href="https://web.dev/yahoo-japan-identity-case-study/#sms-authentication">#</a></h4>
<p>SMS authentication is a system which allows a registered user to receive a
six-digit authentication code through SMS. Once the user receives the SMS,
they can enter the authentication code in the app or website.</p>
<figure class="screenshot">
<img alt="" decoding="async" height="437" loading="lazy" sizes="(min-width: 668px) 668px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/h08m9uzVJg9uNzM3LE5k.jpg?auto=format" srcset="https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/h08m9uzVJg9uNzM3LE5k.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/h08m9uzVJg9uNzM3LE5k.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/h08m9uzVJg9uNzM3LE5k.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/h08m9uzVJg9uNzM3LE5k.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/h08m9uzVJg9uNzM3LE5k.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/h08m9uzVJg9uNzM3LE5k.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/h08m9uzVJg9uNzM3LE5k.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/h08m9uzVJg9uNzM3LE5k.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/h08m9uzVJg9uNzM3LE5k.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/h08m9uzVJg9uNzM3LE5k.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/h08m9uzVJg9uNzM3LE5k.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/h08m9uzVJg9uNzM3LE5k.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/h08m9uzVJg9uNzM3LE5k.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/h08m9uzVJg9uNzM3LE5k.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/h08m9uzVJg9uNzM3LE5k.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/h08m9uzVJg9uNzM3LE5k.jpg?auto=format&w=1336 1336w" width="668" />
</figure>
<p>Apple has long allowed iOS to read SMS messages and suggest authentication
codes from the text body. Recently, it's become possible to use suggestions by
specifying &quot;one-time-code&quot; in the <code>autocomplete</code> attribute of the input
element. Chrome on Android, Windows, and Mac can provide the same experience
using the <a href="https://developer.mozilla.org/docs/Web/API/WebOTP_API" rel="noopener">WebOTP API</a>.</p>
<p>For example:</p>
<div><pre class="language-html"><code class="language-html"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>form</span><span class="token punctuation">></span></span><br />  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>input</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>text<span class="token punctuation">"</span></span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>code<span class="token punctuation">"</span></span> <span class="token attr-name">autocomplete</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>one-time-code<span class="token punctuation">"</span></span><span class="token punctuation">/></span></span><br />  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>button</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>submit<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>sign in<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>button</span><span class="token punctuation">></span></span><br /><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>form</span><span class="token punctuation">></span></span></code></pre>
</div><div><pre class="language-javascript"><code class="language-javascript"><span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token string">'OTPCredential'</span> <span class="token keyword">in</span> window<span class="token punctuation">)</span> <span class="token punctuation">{</span><br />  <span class="token keyword">const</span> input <span class="token operator">=</span> document<span class="token punctuation">.</span><span class="token function">getElementById</span><span class="token punctuation">(</span><span class="token string">'code'</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>input<span class="token punctuation">)</span> <span class="token keyword">return</span><span class="token punctuation">;</span><br />  <span class="token keyword">const</span> ac <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">AbortController</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token keyword">const</span> form <span class="token operator">=</span> input<span class="token punctuation">.</span><span class="token function">closest</span><span class="token punctuation">(</span><span class="token string">'form'</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token keyword">if</span> <span class="token punctuation">(</span>form<span class="token punctuation">)</span> <span class="token punctuation">{</span><br />    form<span class="token punctuation">.</span><span class="token function">addEventListener</span><span class="token punctuation">(</span><span class="token string">'submit'</span><span class="token punctuation">,</span> <span class="token parameter">e</span> <span class="token operator">=></span> <span class="token punctuation">{</span><br />      ac<span class="token punctuation">.</span><span class="token function">abort</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token punctuation">}</span><br />  navigator<span class="token punctuation">.</span>credentials<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token punctuation">{</span><br />    <span class="token literal-property property">otp</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">transport</span><span class="token operator">:</span><span class="token punctuation">[</span><span class="token string">'sms'</span><span class="token punctuation">]</span> <span class="token punctuation">}</span><span class="token punctuation">,</span><br />    <span class="token literal-property property">signal</span><span class="token operator">:</span> ac<span class="token punctuation">.</span>signal<br />  <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span><span class="token parameter">otp</span> <span class="token operator">=></span> <span class="token punctuation">{</span><br />    input<span class="token punctuation">.</span>value <span class="token operator">=</span> otp<span class="token punctuation">.</span>code<span class="token punctuation">;</span><br />  <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">catch</span><span class="token punctuation">(</span><span class="token parameter">err</span> <span class="token operator">=></span> <span class="token punctuation">{</span><br />    console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>err<span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br /><span class="token punctuation">}</span></code></pre>
</div><p>Both approaches are designed to prevent phishing by including the domain in
the SMS body and providing suggestions only for the specified domain.</p>
<p>For more information about the WebOTP API and <code>autocomplete=&quot;one-time-code&quot;</code>,
check out <a href="https://web.dev/sms-otp-form/">SMS OTP form best practices</a>.</p>
<figure class="screenshot">
<img alt="" decoding="async" height="523" loading="lazy" sizes="(min-width: 387px) 387px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/Szaf3C0hfjLNkTWAVf9B.png?auto=format" srcset="https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/Szaf3C0hfjLNkTWAVf9B.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/Szaf3C0hfjLNkTWAVf9B.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/Szaf3C0hfjLNkTWAVf9B.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/Szaf3C0hfjLNkTWAVf9B.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/Szaf3C0hfjLNkTWAVf9B.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/Szaf3C0hfjLNkTWAVf9B.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/Szaf3C0hfjLNkTWAVf9B.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/Szaf3C0hfjLNkTWAVf9B.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/Szaf3C0hfjLNkTWAVf9B.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/Szaf3C0hfjLNkTWAVf9B.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/Szaf3C0hfjLNkTWAVf9B.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/Szaf3C0hfjLNkTWAVf9B.png?auto=format&w=774 774w" width="387" />
</figure>
<h4 id="fido-with-webauthn">FIDO with WebAuthn <a class="w-headline-link" href="https://web.dev/yahoo-japan-identity-case-study/#fido-with-webauthn">#</a></h4>
<p>FIDO with WebAuthn uses a hardware authenticator to generate a public key
cipher pair and prove possession. When a smartphone is used as the
authenticator, it can be combined with biometric authentication (such as
fingerprint sensors or facial recognition) to perform one-step two-factor
authentication. In this case, only the signature and the success indication
from the biometric authentication are sent to the server, so there is no risk
of biometric data theft.</p>
<p>The following diagram shows the server-client configuration for FIDO. The
client authenticator authenticates the user with biometrics and signs the
result using public key cryptography. The private key used to create the
signature is securely stored in a <a href="https://en.wikipedia.org/wiki/Trusted_execution_environment" rel="noopener">TEE (Trusted Execution Environment)</a>
or similar location. A service provider that uses FIDO is called an RP
(relying party).</p>
<figure>
   <img alt="" decoding="async" height="400" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/PkFYWnOZABjPu7Zc7rXN.png?auto=format" srcset="https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/PkFYWnOZABjPu7Zc7rXN.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/PkFYWnOZABjPu7Zc7rXN.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/PkFYWnOZABjPu7Zc7rXN.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/PkFYWnOZABjPu7Zc7rXN.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/PkFYWnOZABjPu7Zc7rXN.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/PkFYWnOZABjPu7Zc7rXN.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/PkFYWnOZABjPu7Zc7rXN.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/PkFYWnOZABjPu7Zc7rXN.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/PkFYWnOZABjPu7Zc7rXN.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/PkFYWnOZABjPu7Zc7rXN.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/PkFYWnOZABjPu7Zc7rXN.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/PkFYWnOZABjPu7Zc7rXN.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/PkFYWnOZABjPu7Zc7rXN.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/PkFYWnOZABjPu7Zc7rXN.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/PkFYWnOZABjPu7Zc7rXN.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/PkFYWnOZABjPu7Zc7rXN.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/PkFYWnOZABjPu7Zc7rXN.png?auto=format&w=1600 1600w" width="800" />
<figcaption style="text-align:left">
<p>Once the user performs the authentication (commonly with a biometric scan or PIN), the authenticator uses a private key to send a signed verification signal to the browser. The browser then shares that signal with the RP's website.</p><p>The RP website then sends the signed verification signal to the RP's server, which verifies the signature against the public key to complete the authentication.</p>
</figcaption>
</figure>
<p>For more information, read
<a href="https://fidoalliance.org/fido-authentication/" rel="noopener">authentication guidelines from the FIDO Alliance</a>.</p>
<p>Yahoo! JAPAN supports FIDO on Android (mobile app and web), iOS (mobile app
and web), Windows (Edge, Chrome, Firefox), and macOS (Safari, Chrome). As a
consumer service, FIDO can be used on almost any device, which makes it a good
option for promoting passwordless authentication.</p>
<div class="table-wrapper scrollbar">
  <table>
    <thead>
       <tr>
   <td>
    <strong>Operating System</strong>
   </td>
   <td>
    <strong>Support for FIDO</strong>
   </td>
  </tr>
  </thead>
  <tbody>
  <tr>
   <td>
    Android
   </td>
   <td>
    Apps, Browser (Chrome)
   </td>
  </tr>
  <tr>
   <td>
    iOS
   </td>
   <td>
    Apps (iOS14 or later), Browser (Safari 14 or later)
   </td>
  </tr>
  <tr>
   <td>
    Windows
   </td>
   <td>
    Browser (Edge, Chrome, Firefox)
   </td>
  </tr>
  <tr>
   <td>
    Mac (Big Sur or later)
   </td>
   <td>
    Browser (Safari, Chrome)
   </td>
  </tr>
</tbody>
  </table>
</div>
<figure class="alignright">
  <img alt="" class="screenshot" decoding="async" height="497" loading="lazy" sizes="(min-width: 520px) 520px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/iq0dODcbp3WcPUGTwHkl.png?auto=format" srcset="https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/iq0dODcbp3WcPUGTwHkl.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/iq0dODcbp3WcPUGTwHkl.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/iq0dODcbp3WcPUGTwHkl.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/iq0dODcbp3WcPUGTwHkl.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/iq0dODcbp3WcPUGTwHkl.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/iq0dODcbp3WcPUGTwHkl.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/iq0dODcbp3WcPUGTwHkl.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/iq0dODcbp3WcPUGTwHkl.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/iq0dODcbp3WcPUGTwHkl.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/iq0dODcbp3WcPUGTwHkl.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/iq0dODcbp3WcPUGTwHkl.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/iq0dODcbp3WcPUGTwHkl.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/iq0dODcbp3WcPUGTwHkl.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/iq0dODcbp3WcPUGTwHkl.png?auto=format&w=1040 1040w" width="520" />
  <figcaption>Sample Yahoo! JAPAN prompt to authenticate with FIDO.</figcaption>
</figure>
<p>Yahoo! JAPAN recommends that users register for FIDO with WebAuthn, if they've
not already authenticated through other means. When a user needs to log in
with the same device, they can quickly authenticate using a biometric sensor.</p>
<p>Users must set up FIDO authentication with all devices they use to log in to
Yahoo! JAPAN.</p>
<p>To promote passwordless authentication and be considerate of users who are
transitioning away from passwords, we provide multiple means of
authentication. This means that different users can have different
authentication method settings, and the authentication methods they can use
may differ from browser to browser. We believe it's a better experience if
users log in using the same authentication method each time.</p>
<p>To meet these requirements, it's necessary to track previous authentication
methods and link this information to the client by storing it in the form of
cookies, etc. We can then analyze how different browsers and applications are
used for authentication. The user is asked to provide appropriate
authentication based on the user's settings, the previous authentication
methods used, and the minimum level of authentication required.</p>
<h3 id="2-password-deactivation">2. Password deactivation <a class="w-headline-link" href="https://web.dev/yahoo-japan-identity-case-study/#2-password-deactivation">#</a></h3>
<p>Yahoo! JAPAN asks users to set up an alternative authentication method and
then disable their password so that it cannot be used. In addition to setting
up alternative authentication, disabling password authentication (therefore
making it impossible to sign in with only a password) helps protect users from
list-based attacks.</p>
<p>We've taken the following steps to encourage users to disable their
passwords.</p>
<ul>
<li>Promoting alternative authentication methods when users reset their passwords.</li>
<li>Encouraging users to set up easy-to-use authentication methods (such as
FIDO) and disable passwords for situations that require frequent
authentication.</li>
<li>Urging users to disable their passwords before using high-risk services,
such as e-commerce payments.</li>
</ul>
<p>If a user forgets their password, they can run an account recovery. Previously
this involved a password reset. Now, users can choose to set up a different
authentication method, and we encourage them to do so.</p>
<h3 id="3-passwordless-account-registration">3. Passwordless account registration <a class="w-headline-link" href="https://web.dev/yahoo-japan-identity-case-study/#3-passwordless-account-registration">#</a></h3>
<p>New users can create password-free Yahoo! JAPAN accounts. Users are first
required to register with an SMS authentication. Once they've logged in, we
encourage the user to set up FIDO authentication.</p>
<p>Since FIDO is a per-device setting, it can be difficult to recover an account,
should the device become inoperable. Therefore, we require users to keep their
phone number registered, even after they've set up additional authentication.</p>
<h3 id="key-challenges-for-passwordless-authentication">Key challenges for passwordless authentication <a class="w-headline-link" href="https://web.dev/yahoo-japan-identity-case-study/#key-challenges-for-passwordless-authentication">#</a></h3>
<p>Passwords rely on human memory and are device-independent. On the other hand,
the authentication methods introduced thus far in our passwordless initiative
are device-dependent. This poses several challenges.</p>
<p>When multiple devices are used, there are some issues related to usability:</p>
<ul>
<li>When using SMS authentication to log in from a PC, users must check their
mobile phone for incoming SMS messages. This may be inconvenient, as it
requires the user's phone to be available and easy to access at any time.</li>
<li>With FIDO, especially with platform authenticators, a user with multiple
devices will be unable to authenticate on unregistered devices.
Registration must be completed for each device they intend to use.</li>
</ul>
<p>FIDO authentication is tied to specific devices, which requires they remain in
the user's possession and active.</p>
<ul>
<li>If the service contract is canceled, it will no longer be possible to send
SMS messages to the registered phone number.</li>
<li>FIDO stores private keys on a specific device. If the device is lost, those
keys are unusable.</li>
</ul>
<p>Yahoo! JAPAN is taking various steps to address these problems.</p>
<p>The most important solution is to encourage users to set up multiple
authentication methods. This provides alternative account access when devices
are lost. Since FIDO keys are device-dependent, it is also good practice to
register FIDO private keys on multiple devices.</p>
<p>Alternatively, users can use the <a href="https://web.dev/sms-otp-form/">WebOTP API to pass SMS verification
codes</a> from an Android phone to Chrome on a PC.</p>
<aside class="aside flow bg-state-info-bg color-state-info-text"><div class=" flow"> Apple recently announced the <a href="https://developer.apple.com/documentation/authenticationservices/public-private_key_authentication/supporting_passkeys">passkeys</a> feature. Apple uses iCloud Keychain to share the private key (stored on the device) among devices that are signed in with the same Apple ID, which eliminates the need for registration for each device.  The FIDO Alliance recognizes the importance of account recovery issues and has published a <a href="https://fidoalliance.org/white-paper-multiple-authenticators-for-reducing-account-recovery-needs-for-fido-enabled-consumer-accounts/">white paper</a>. </div></aside>
<p>We believe that addressing these issues will become even more important as
passwordless authentication spreads.</p>
<h3 id="promoting-passwordless-authentication">Promoting passwordless authentication <a class="w-headline-link" href="https://web.dev/yahoo-japan-identity-case-study/#promoting-passwordless-authentication">#</a></h3>
<p>Yahoo! JAPAN has been working on these passwordless initiatives since 2015.
This began with the acquisition of FIDO server certification in May 2015,
followed by the introduction of SMS authentication, a password deactivation
feature, and FIDO support for each device.</p>
<p>Today, more than 30 million monthly active users have already disabled their
passwords and are using non-password authentication methods. Yahoo! JAPAN's
support for FIDO started with Chrome on Android, and now more than 10 million
users have set up FIDO authentication.</p>
<p>As a result of Yahoo! JAPAN's initiatives, the percentage of inquiries
involving forgotten login IDs or passwords has decreased by 25% compared to the
period when the number of such inquiries was at its highest, and we have also
been able to confirm that unauthorized access has declined as a result of the
increase in the number of passwordless accounts.</p>
<p>Since FIDO is so easy to set up, it has a particularly high conversion rate.
In fact, Yahoo! JAPAN has found that FIDO has a higher CVR than SMS
authentication.</p>
<ul class="stats">
<div class="stats__item">
<p class="stats__figure">
25
<sub>%</sub>
</p>
<p>Decrease in requests for forgotten credentials</p>
</div>
<div class="stats__item">
<p class="stats__figure">
74
<sub>%</sub>
</p>
<p>Users succeed with FIDO authentication</p>
</div>
<div class="stats__item">
<p class="stats__figure">
65
<sub>%</sub>
</p>
<p>Succeed with SMS verification</p>
</div>
</ul>
<p>FIDO has a higher success rate than SMS authentication, and faster average and
median authentication times. As for passwords, some groups have short
authentication times, and we suspect that this is due to the browser's
<a href="https://web.dev/sign-in-form-best-practices/#current-password"><code>autocomplete=&quot;current-password&quot;</code></a>.</p>
<figure class="screenshot">
<img alt="Graph comparison of authentication time for passwords, SMS, and FIDO." decoding="async" height="478" loading="lazy" sizes="(min-width: 799px) 799px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/KhkGTZgYgmUM9pJGrg5h.png?auto=format" srcset="https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/KhkGTZgYgmUM9pJGrg5h.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/KhkGTZgYgmUM9pJGrg5h.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/KhkGTZgYgmUM9pJGrg5h.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/KhkGTZgYgmUM9pJGrg5h.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/KhkGTZgYgmUM9pJGrg5h.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/KhkGTZgYgmUM9pJGrg5h.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/KhkGTZgYgmUM9pJGrg5h.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/KhkGTZgYgmUM9pJGrg5h.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/KhkGTZgYgmUM9pJGrg5h.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/KhkGTZgYgmUM9pJGrg5h.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/KhkGTZgYgmUM9pJGrg5h.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/KhkGTZgYgmUM9pJGrg5h.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/KhkGTZgYgmUM9pJGrg5h.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/KhkGTZgYgmUM9pJGrg5h.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/KhkGTZgYgmUM9pJGrg5h.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/KhkGTZgYgmUM9pJGrg5h.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/KhkGTZgYgmUM9pJGrg5h.png?auto=format&w=1598 1598w" width="799" />
<figcaption>On average, FIDO takes 8 seconds to authenticate, while passwords take 21 seconds, and SMS verification takes 27.</figcaption>
</figure>
<p>The greatest difficulty for offering passwordless accounts is not the addition
of authentication methods, but <strong>popularizing the use of authenticators</strong>.
If the experience of using a passwordless service is not user-friendly, the
transition will not be easy.</p>
<p>We believe that to achieve improved security we must first improve usability,
which will require unique innovations for each service.</p>
<h2 id="conclusion">Conclusion <a class="w-headline-link" href="https://web.dev/yahoo-japan-identity-case-study/#conclusion">#</a></h2>
<p>Password authentication is risky in terms of security, and it also poses
challenges in terms of usability. Now that technologies supporting
non-password authentication, such as WebOTP API and FIDO, are more widely
available, it's time to start working toward passwordless authentication.</p>
<p>At Yahoo! JAPAN, taking this approach has had a definite effect on both
usability and security. However, many users are still using passwords, so we
will continue to encourage more users to switch to passwordless authentication
methods. We will also continue improving our products to optimize the user
experience for passwordless authentication methods.</p>
<p><em>Photo by olieman.eth on <a href="https://unsplash.com/" rel="noopener">Unsplash</a></em></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[How RebelMouse grew loyalty and engagement by optimizing Core Web Vitals]]></title>
<description><![CDATA[RebelMouse is a cloud-based CMS with the data-driven tools and creative strategy publishers need to provide the best experience possible for audiences, both new and old. We power high-traffic web properties for media companies like Upworthy, Narcity, Raw Story, Brit + Co, and The Independent, as ...]]></description>
<link>https://tsecurity.de/de/1725687/it+betriebssysteme/web+tipps/how+rebelmouse+grew+loyalty+and+engagement+by+optimizing+core+web+vitals/</link>
<pubDate>Thu, 08 Dec 2022 19:45:05 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p><a href="https://www.rebelmouse.com/?utm_medium=post&amp;utm_source=google&amp;utm_campaign=cwv%20co-marketing&amp;utm_content=home%20page" rel="noopener">RebelMouse is a cloud-based CMS</a> with the data-driven tools and creative strategy publishers need to provide the best experience possible for audiences, both new and old. We power high-traffic web properties for media companies like Upworthy, Narcity, Raw Story, Brit + Co, and The Independent, as well as high-value sites like Penske Trucks, Vault12, Gaingels, and many others.</p>
<p>Our platform reaches over 100 million people monthly in the U.S. alone. The company was founded on the belief that the open web needs to perform at the highest levels of consumer expectations to thrive, and the standards set by Google's Core Web Vitals align with this user-first vision.</p>
<p>For more than a decade, our global team has been engineering a CMS that creates positive and intuitive user experiences that translate into meaningful business. Core Web Vitals are a benchmark that ensure this symbiotic loop continues across every new site we power.</p>
<h2 id="why-prioritizing-performance-means-better-business">Why prioritizing performance means better business <a class="w-headline-link" href="https://web.dev/rebelmouse/#why-prioritizing-performance-means-better-business">#</a></h2>
<p>Many publishers doubt whether excellent scores on Core Web Vitals are worth the effort. They also worry that even a quality user experience won't deliver the boost in readership they need. Fortunately, our prioritization of performance at RebelMouse has given us the data to prove that Core Web Vitals are an excellent way to generate new traffic and build the user loyalty needed to have a successful business.</p>
<p>In order to illustrate this, we analyzed the audience behavior of a number of sites we power, both before and after we optimized for high performance scores on Core Web Vitals. In particular, we defined types of users to separate the audiences into the following key categories:</p>
<ul>
<li><strong>New Visitors:</strong> Users who visited a site for the first time.</li>
<li><strong>Returning Visitors:</strong> Users who had at least two sessions.</li>
<li><strong>Loyal Visitors:</strong> Users who had at least three sessions or more.</li>
<li><strong>Fans:</strong> Users who had at least four sessions or more.</li>
<li><strong>Superfans:</strong> Users who had at least five sessions or more.</li>
</ul>
<p><strong>References:</strong></p>
<ul>
<li><a href="https://www.hotjar.com/google-analytics/glossary/users" rel="noopener">https://www.hotjar.com/google-analytics/glossary/users</a></li>
<li><a href="https://databox.com/new-vs-returning-visitors" rel="noopener">https://databox.com/new-vs-returning-visitors</a></li>
</ul>
<p>The data from the field, gathered by Google Analytics, was overwhelmingly clear. When focusing on loyal visitors, fans, and superfans categories, we found that users are far more likely to stay longer, consume more content, and return more often on sites that receive excellent marks on their Core Web Vitals. Here's a look at some prominent examples:</p>
<div class="table-wrapper scrollbar">
  <table>
    <thead>
      <tr>
        <th aria-hidden=""></th>
        <th colspan="2">
          <strong>Loyal Visitors</strong><br />
          (3 or More Sessions/User)
        </th>
        <th colspan="2">
          <strong>Fans</strong><br />
          (4 or More Sessions/User)
        </th>
        <th colspan="2">
          <strong>Superfans</strong><br />
          (5 or More Sessions/User)
        </th>
      </tr>
      <tr>
        <th><strong>Website</strong></th>
        <th><strong>Pages/User</strong></th>
        <th><strong>Time/User</strong></th>
        <th><strong>Pages/User</strong></th>
        <th><strong>Time/User</strong></th>
        <th><strong>Pages/User</strong></th>
        <th><strong>Time/User</strong></th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>Brit + Co</td>
        <td>+1.9%</td>
        <td>+2.6%</td>
        <td>+6.6%</td>
        <td>+7.2%</td>
        <td>+6.3%</td>
        <td>+7.8%</td>
      </tr>
      <tr>
        <td>Hamu és Gyémánt</td>
        <td>+10.6%</td>
        <td>+48.2%</td>
        <td>+13.1%</td>
        <td>+47.2%</td>
        <td>+6.9%</td>
        <td>+35.3%</td>
      </tr>
      <tr>
        <td>Knocksense</td>
        <td>+37.5%</td>
        <td>+52.8%</td>
        <td>+46.9%</td>
        <td>+64.4%</td>
        <td>+47.0%</td>
        <td>+64.6%</td>
      </tr>
      <tr>
        <td>Upworthy</td>
        <td>+117.6%</td>
        <td>+50.0%</td>
        <td>+117.1%</td>
        <td>+50.8%</td>
        <td>+114.2%</td>
        <td>+49.2%</td>
      </tr>
    </tbody>
  </table>
</div>
<p>But content consumption and time spent per user weren't the only metrics to spike. The number of users visiting and pages accessed also increased among the same categories:</p>
<div class="table-wrapper scrollbar">
  <table>
    <thead>
      <tr>
        <th aria-hidden=""></th>
        <th colspan="2">
          <strong>Loyal Visitors</strong><br />
          (3 or More Sessions/User)
        </th>
        <th colspan="2">
          <strong>Fans</strong><br />
          (4 or More Sessions/User)
        </th>
        <th colspan="2">
          <strong>Superfans</strong><br />
          (5 or More Sessions/User)
        </th>
      </tr>
      <tr>
        <th><strong>Website</strong></th>
        <th><strong>Users</strong></th>
        <th><strong>Pageviews</strong></th>
        <th><strong>Users</strong></th>
        <th><strong>Pageviews</strong></th>
        <th><strong>Users</strong></th>
        <th><strong>Pageviews</strong></th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>AméricaEconomía</td>
        <td>+16.0%</td>
        <td>+10.4%</td>
        <td>+11.8%</td>
        <td>+6.8%</td>
        <td>+6.9%</td>
        <td>+4.6%</td>
      </tr>
      <tr>
        <td>EHN</td>
        <td>+24.2%</td>
        <td>+13.8%</td>
        <td>+24.9%</td>
        <td>+13.4%</td>
        <td>+24.0%</td>
        <td>+9.0%</td>
      </tr>
      <tr>
        <td>PAPER Magazine</td>
        <td>+24.7%</td>
        <td>+20.0%</td>
        <td>+39.7%</td>
        <td>+32.1%</td>
        <td>+55.7%</td>
        <td>+35.7%</td>
      </tr>
      <tr>
        <td>Second Nexus</td>
        <td>+16.8%</td>
        <td>+14.2%</td>
        <td>+15.0%</td>
        <td>+13.4%</td>
        <td>+15.7%</td>
        <td>+13.3%</td>
      </tr>
    </tbody>
  </table>
</div>
<h2 id="from-normal-to-high-performing-how-rebelmouse-transforms-websites">From normal to high-performing: How RebelMouse transforms websites <a class="w-headline-link" href="https://web.dev/rebelmouse/#from-normal-to-high-performing-how-rebelmouse-transforms-websites">#</a></h2>
<p>The good news is that performing well on Core Web Vitals is possible with thoughtful, strategic changes made to your site's codebase. Here are a few ways RebelMouse powers high-performing websites:</p>
<h3 id="progressive-web-app">Progressive web app <a class="w-headline-link" href="https://web.dev/rebelmouse/#progressive-web-app">#</a></h3>
<p>RebelMouse optimizes all third-party calls in a progressive web app that delivers the most important content first, and then sequences the rest of the calls as the reader needs to see them.</p>
<p>We have <a href="https://www.rebelmouse.com/new-javascript-element-in-layout-design-tool?utm_medium=post&amp;utm_source=google&amp;utm_campaign=cwv%20co-marketing&amp;utm_content=javascript%20element" rel="noopener">a method that loads JavaScript</a> immediately after the Largest Contentful Paint (LCP) event has completed. We give our users the option to load JavaScript through three different priority levels:</p>
<ul>
<li><strong>Optimized</strong> is best for users who want the latest cutting-edge approaches. We use it in our own development work. This priority level will pause JavaScript from firing until well after the page has fully loaded, which gives you the highest performance.</li>
<li><strong>Load Blocking</strong> is used for executing JavaScript right away, and will generally have a negative impact on your performance scores. This priority level will fire the JavaScript immediately after the page has completed loading. This has the potential to drop your performance scores by 10–40 points depending on the extra call.</li>
<li><strong>Post LCP</strong> is the best option to blend great performance scores with a very fast load. This priority level will cause JavaScript to load immediately after the Largest Contentful Paint event has completed. (This is recommended for ads only, where you have increased revenue in delivering ads to users who are only on the page for five seconds or so.)</li>
</ul>
<h3 id="optimize-social-embeds">Optimize social embeds <a class="w-headline-link" href="https://web.dev/rebelmouse/#optimize-social-embeds">#</a></h3>
<p>To protect Cumulative Layout Shift (CLS) and LCP scores, all social embeds need to be set to lazy load.</p>
<p>For CLS preservation, you have to dynamically find the size of the embed with server-side technology, and insert it into your own storage of the properties of that embed. Then, the embed needs to be delivered to your front end to prevent the layout from shifting upon load. For those with interest in deeper dives on this topic, we have posts specifically on <a href="https://www.rebelmouse.com/optimized-twitter-embeds?utm_medium=post&amp;utm_source=google&amp;utm_campaign=cwv%20co-marketing&amp;utm_content=optimized%20twitter%20embeds" rel="noopener">Twitter</a> and <a href="https://www.rebelmouse.com/how-to-embed-a-tiktok?utm_medium=post&amp;utm_source=google&amp;utm_campaign=cwv%20co-marketing&amp;utm_content=tiktok%20embed" rel="noopener">TikTok</a> examples with more details.</p>
<h3 id="ultra-light,-smart-html-and-css">Ultra-light, smart HTML and CSS <a class="w-headline-link" href="https://web.dev/rebelmouse/#ultra-light,-smart-html-and-css">#</a></h3>
<p>Site HTML and CSS has to be constructed in a way that allows for the delivery of above-the-fold images and text to preload before the rest of the page.</p>
<ul>
<li>Bad HTML constructs will force the browser to process many unnecessary site elements that are below the fold in order to render what is above the fold in the first viewport.</li>
<li>We have more in-depth articles on how we achieve this on RebelMouse here:
<ul>
<li>A breakdown on <a href="https://www.rebelmouse.com/pagespeed-score?utm_medium=post&amp;utm_source=google&amp;utm_campaign=cwv%20co-marketing&amp;utm_content=pagespeed%20score" rel="noopener">how to improve Core Web Vitals</a>.</li>
<li><a href="https://www.rebelmouse.com/how-to-improve-core-web-vitals?utm_medium=post&amp;utm_source=google&amp;utm_campaign=cwv%20co-marketing&amp;utm_content=how%20to%20improve%20core%20web%20vitals" rel="noopener">A full guide</a> on implementing fast page speeds while also including third-party scripts.</li>
<li>An in-depth guide on <a href="https://www.rebelmouse.com/core-web-vitals-2021?utm_medium=post&amp;utm_source=google&amp;utm_campaign=cwv%20co-marketing&amp;utm_content=core%20web%20vitals%202021" rel="noopener">optimizing for LCP</a>.</li>
</ul>
</li>
</ul>
<h2 id="publish-with-a-performance-first-mindset">Publish with a performance-first mindset <a class="w-headline-link" href="https://web.dev/rebelmouse/#publish-with-a-performance-first-mindset">#</a></h2>
<p>Since the rollout of Core Web Vitals, developers have felt the impact of how their publishing platforms stack up against <a href="https://web.dev/defining-core-web-vitals-thresholds/">Google's recommended thresholds</a>.</p>
<p><a href="https://httparchive.org/" rel="noopener">HTTP Archive</a>, an open-source project that identifies trends and records historical patterns across millions of URLs, has revealed how top content management systems perform against Google's page experience standards in its <a href="https://datastudio.google.com/u/0/reporting/55bc8fad-44c2-4280-aa0b-5f3f0cd3d2be/page/M6ZPC" rel="noopener">Core Web Vitals Technology Report</a>. RebelMouse has <a href="https://datastudio.google.com/u/0/reporting/55bc8fad-44c2-4280-aa0b-5f3f0cd3d2be/page/M6ZPC?params=%7B%22df44%22:%22include%25EE%2580%25800%25EE%2580%2580IN%25EE%2580%2580ALL%25EE%2580%2580WordPress%25EE%2580%2580Drupal%25EE%2580%2580Wix%25EE%2580%2580Squarespace%25EE%2580%2580Adobe%2520Experience%2520Manager%25EE%2580%2580Contentful%25EE%2580%2580Sitecore%25EE%2580%2580Arc%2520Publishing%25EE%2580%2580Chorus%25EE%2580%2580RebelMouse%22,%22df46%22:%22include%25EE%2580%25800%25EE%2580%2580IN%25EE%2580%2580mobile%22%7D" rel="noopener">consistently outperformed</a> major CMS platforms on Google's most critical metrics since its rollout and into 2022:</p>
<figure>
  <img alt="A comparison of origins having good Core Web Vitals across platforms. The platforms are RebelMouse, WordPress, Drupal, Wix, Squarespace, Adobe Experience Manager, Contentful, Sitecore, Arc Publishing, and Chorus. The time period is from January 1, 2021 to January 31, 2022 for mobile devices. The trend shows that RebelMouse outperforms all other CMS platforms on Core Web Vitals, and this trend increases over time." decoding="async" height="452" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/3eY8EMxr0uDCD25NvJj9.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/3eY8EMxr0uDCD25NvJj9.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/3eY8EMxr0uDCD25NvJj9.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/3eY8EMxr0uDCD25NvJj9.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/3eY8EMxr0uDCD25NvJj9.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/3eY8EMxr0uDCD25NvJj9.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/3eY8EMxr0uDCD25NvJj9.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/3eY8EMxr0uDCD25NvJj9.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/3eY8EMxr0uDCD25NvJj9.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/3eY8EMxr0uDCD25NvJj9.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/3eY8EMxr0uDCD25NvJj9.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/3eY8EMxr0uDCD25NvJj9.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/3eY8EMxr0uDCD25NvJj9.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/3eY8EMxr0uDCD25NvJj9.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/3eY8EMxr0uDCD25NvJj9.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/3eY8EMxr0uDCD25NvJj9.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/3eY8EMxr0uDCD25NvJj9.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/3eY8EMxr0uDCD25NvJj9.png?auto=format&w=1600 1600w" width="800" />
</figure>
<h2 id="performance-without-compromise">Performance without compromise <a class="w-headline-link" href="https://web.dev/rebelmouse/#performance-without-compromise">#</a></h2>
<p>Creating quality content is now only half the battle for publishers and brands alike. Quality content must be supported by modern technology that can keep up with the speed and standards of today's web. We're able to deliver Core Web Vitals that make the grade because site performance isn't just a goal, it's a company pillar that's woven into our culture. We use our intense focus on performance to help our clients make the most of the open web by growing traffic and building revenue without sacrificing user experience.</p>
<p>If you'd like to learn more about how we can help your site exceed the industry standard on Core Web Vitals, <a href="https://www.rebelmouse.com/st/Request_a_Demo?utm_medium=post&amp;utm_source=google&amp;utm_campaign=cwv%20co-marketing&amp;utm_content=request%20a%20demo" rel="noopener">click here to learn more about RebelMouse today</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[A modern web experience on Adobe Experience Manager with WorkBox]]></title>
<description><![CDATA[If you are a technical lead or digital marketing analyst interested in providing a modern Web experience to your Adobe Experience Manager (AEM) web application and have been looking for your options in doing so, then you have come to the right article. This will cover what Progressive Web Apps (P...]]></description>
<link>https://tsecurity.de/de/1725688/it+betriebssysteme/web+tipps/a+modern+web+experience+on+adobe+experience+manager+with+workbox/</link>
<pubDate>Thu, 08 Dec 2022 19:45:05 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>If you are a technical lead or digital marketing analyst interested in providing a modern Web experience to your Adobe Experience Manager (AEM) web application and have been looking for your options in doing so, then you have come to the right article. This will cover what Progressive Web Apps (PWA) are and what you need to create a PWA in AEM leveraging the WorkBox library through configuration, without coding.</p>
<h2 id="why-pwa">Why PWA? <a class="w-headline-link" href="https://web.dev/aem-with-workbox/#why-pwa">#</a></h2>
<p>Progressive Web Apps leverage what the modern web can do. They are installable on your device, load quickly, with subsequent visits loading instantly. They respond to input quickly. They work well on an unreliable connection or when offline. PWAs use modern APIs to provide an engaging app-like experience with an optional full screen UI, background updating, and offline access to data.</p>
<figure>
  <img alt="From web app to Progressive Web App." decoding="async" height="477" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/xkDFjbziiPKvr2TLiAXF.png?auto=format" srcset="https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/xkDFjbziiPKvr2TLiAXF.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/xkDFjbziiPKvr2TLiAXF.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/xkDFjbziiPKvr2TLiAXF.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/xkDFjbziiPKvr2TLiAXF.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/xkDFjbziiPKvr2TLiAXF.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/xkDFjbziiPKvr2TLiAXF.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/xkDFjbziiPKvr2TLiAXF.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/xkDFjbziiPKvr2TLiAXF.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/xkDFjbziiPKvr2TLiAXF.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/xkDFjbziiPKvr2TLiAXF.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/xkDFjbziiPKvr2TLiAXF.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/xkDFjbziiPKvr2TLiAXF.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/xkDFjbziiPKvr2TLiAXF.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/xkDFjbziiPKvr2TLiAXF.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/xkDFjbziiPKvr2TLiAXF.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/xkDFjbziiPKvr2TLiAXF.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/xkDFjbziiPKvr2TLiAXF.png?auto=format&w=1600 1600w" width="800" />
</figure>
<p>To enhance a web app into a Progressive Web App requires adding two artifacts:</p>
<ul>
<li>A <a href="https://web.dev/add-manifest/">web app manifest</a>: a JSON configuration file that defines the app's entry point URL, the icon used to represent the PWA and other configuration that describe how the application looks and behaves.</li>
<li>A <a href="https://web.dev/learn/pwa/">service worker</a>: a script that provides background services that enrich your PWA by defining resources your PWA uses and the strategies to access them.</li>
</ul>
<h2 id="what-is-a-service-worker">What is a service worker? <a class="w-headline-link" href="https://web.dev/aem-with-workbox/#what-is-a-service-worker">#</a></h2>
<p>At its core, a service worker is just a script that your browser runs independently as you interact with your web application. An active service worker provides services such as smart caching using the <a href="https://web.dev/cache-api-quick-guide/">Cache API</a>, keeping data up to date using the <a href="https://web.dev/periodic-background-sync/">Background Sync API</a>, and integrating with push notifications. A service worker with the right caching strategy provides stable and reliable user experiences for various scenarios, returning pre-cached resources instantly, storing data in cache, and updating resources when connected to the web.</p>
<figure>
  <img alt="A service worker lives on the client, but proxies the network." decoding="async" height="369" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/j97xB2WYaExyh8SbI3pw.png?auto=format" srcset="https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/j97xB2WYaExyh8SbI3pw.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/j97xB2WYaExyh8SbI3pw.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/j97xB2WYaExyh8SbI3pw.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/j97xB2WYaExyh8SbI3pw.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/j97xB2WYaExyh8SbI3pw.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/j97xB2WYaExyh8SbI3pw.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/j97xB2WYaExyh8SbI3pw.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/j97xB2WYaExyh8SbI3pw.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/j97xB2WYaExyh8SbI3pw.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/j97xB2WYaExyh8SbI3pw.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/j97xB2WYaExyh8SbI3pw.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/j97xB2WYaExyh8SbI3pw.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/j97xB2WYaExyh8SbI3pw.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/j97xB2WYaExyh8SbI3pw.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/j97xB2WYaExyh8SbI3pw.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/j97xB2WYaExyh8SbI3pw.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/j97xB2WYaExyh8SbI3pw.png?auto=format&w=1600 1600w" width="800" />
</figure>
<img alt="Workbox Logo" decoding="async" height="47" loading="lazy" sizes="(min-width: 200px) 200px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/4izQ6TMiE9PHdRTor7b2.png?auto=format" srcset="https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/4izQ6TMiE9PHdRTor7b2.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/4izQ6TMiE9PHdRTor7b2.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/4izQ6TMiE9PHdRTor7b2.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/4izQ6TMiE9PHdRTor7b2.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/4izQ6TMiE9PHdRTor7b2.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/4izQ6TMiE9PHdRTor7b2.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/4izQ6TMiE9PHdRTor7b2.png?auto=format&w=400 400w" style="max-width: 200px; margin: 0 auto;" width="200" />
<p>Service workers can be hard to write from scratch. Workbox was created to make it easier. Workbox is a set of libraries to help you write and manage <a href="https://developers.google.com/web/fundamentals/primers/service-workers" rel="noopener">service workers</a> and caching with the <a href="https://web.dev/cache-api-quick-guide/">Cache Storage API</a>. Service workers and the Cache Storage API, when used together, control how assets (HTML, CSS, JS, images, etc.) are requested from the network or cache, even allowing you to return cached content when offline. With Workbox, you can quickly set up and manage both, and more, with production-ready code.</p>
<h2 id="upgrading-an-aem-site-to-a-pwa">Upgrading an AEM site to a PWA <a class="w-headline-link" href="https://web.dev/aem-with-workbox/#upgrading-an-aem-site-to-a-pwa">#</a></h2>
<p><a href="https://business.adobe.com/products/experience-manager/sites/aem-sites" rel="noopener">Adobe Experience Manager</a> (AEM) is a comprehensive content management solution for building websites, mobile apps, forms, and digital signage. It makes it easy to manage your marketing content and assets.</p>
<p>While AEM provides a rich library for building web applications, until now it's been difficult to build a PWA by adding a service worker and a manifest.</p>
<p>Adobe Experience Manager Sites is the UI building tool that is part of Adobe Experience Manager. When used with Adobe Experience Manager as a cloud service, AEM Sites makes it easy to convert any existing AEM website or single page application into an installable offline-enabled Progressive Web App with just configuration and no coding. It uses Workbox to deliver the best practices for Progressive Web Apps and abstracts the complexities of writing boilerplate manifests and service workers.</p>
<p>AEM supports localization of content which means you can have different branding and even different offline content for different locales. To do this build different PWA configurations for each language master.</p>
<h3 id="getting-started-with-pwa-configuration-on-aem">Getting started with PWA configuration on AEM <a class="w-headline-link" href="https://web.dev/aem-with-workbox/#getting-started-with-pwa-configuration-on-aem">#</a></h3>
<p>Log into Adobe Experience Manager as a Cloud Service and select any Adobe Experience Manager Sites page or language master and click properties. You should see a tab called Progressive Web App. (Note: if you do not see this tab, please contact Adobe to enable this feature.) You can configure the installation and the look and feel of your Progressive Web Apps with just a few clicks.</p>
<p>If you've completed AEM Sites tutorials you have likely seen the WKND site before. This article uses the <a href="https://experienceleague.adobe.com/docs/experience-manager-learn/getting-started-wknd-tutorial-develop/overview.html" rel="noopener">WKND</a> demo as the starting point. When you are done you will have updated WKND from a web app to a PWA using WorkBox.</p>
<h3 id="configure-the-manifest">Configure the manifest <a class="w-headline-link" href="https://web.dev/aem-with-workbox/#configure-the-manifest">#</a></h3>
<p>The <a href="https://web.dev/add-manifest/">web app manifest</a> is a JSON file that contains properties that describe the look and behavior of a PWA. Adobe Experience Manager Sites provides a friendly user interface to configure the properties.</p>
<figure>
  <img alt="Configuring the manifest in the installable experience dialog box." decoding="async" height="634" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/mhq0Kyzn88zfryTFpQgU.png?auto=format" srcset="https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/mhq0Kyzn88zfryTFpQgU.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/mhq0Kyzn88zfryTFpQgU.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/mhq0Kyzn88zfryTFpQgU.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/mhq0Kyzn88zfryTFpQgU.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/mhq0Kyzn88zfryTFpQgU.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/mhq0Kyzn88zfryTFpQgU.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/mhq0Kyzn88zfryTFpQgU.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/mhq0Kyzn88zfryTFpQgU.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/mhq0Kyzn88zfryTFpQgU.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/mhq0Kyzn88zfryTFpQgU.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/mhq0Kyzn88zfryTFpQgU.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/mhq0Kyzn88zfryTFpQgU.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/mhq0Kyzn88zfryTFpQgU.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/mhq0Kyzn88zfryTFpQgU.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/mhq0Kyzn88zfryTFpQgU.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/mhq0Kyzn88zfryTFpQgU.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/mhq0Kyzn88zfryTFpQgU.png?auto=format&w=1600 1600w" width="800" />
</figure>
The start URL is the entry point of your PWA. When a user taps on the the PWA icon on their phone, they will be accessing the startup URL. The display mode configures whether the app is a windowed or fullscreen experience. You can also specify the screen orientation of the application. The theme color is the color of the window and toolbar while the background color is the color of the splash screen when the application is launched. The icon is the image that is shown on the devices home screen or application drawer when the application is installed on the device. The configuration shown in the image generates the manifest JSON shown below.
<div><pre class="language-json"><code class="language-json"><span class="token punctuation">{</span><br />  <span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"WKND Adventures and Travel"</span><span class="token punctuation">,</span><br />  <span class="token property">"short_name"</span><span class="token operator">:</span> <span class="token string">"WKND Adventures and Travel"</span><span class="token punctuation">,</span><br />  <span class="token property">"start_url"</span><span class="token operator">:</span> <span class="token string">"/content/wknd/us/en.html"</span><span class="token punctuation">,</span><br />  <span class="token property">"display"</span><span class="token operator">:</span> <span class="token string">"standalone"</span><span class="token punctuation">,</span><br />  <span class="token property">"theme_color"</span><span class="token operator">:</span> <span class="token string">"#FFDC00"</span><span class="token punctuation">,</span><br />  <span class="token property">"background_color"</span><span class="token operator">:</span> <span class="token string">"#FF851B"</span><span class="token punctuation">,</span><br />  <span class="token property">"orientation"</span><span class="token operator">:</span> <span class="token string">"any"</span><span class="token punctuation">,</span><br />  <span class="token property">"icons"</span><span class="token operator">:</span> <span class="token punctuation">[</span><br />    <span class="token punctuation">{</span><br />      <span class="token property">"src"</span><span class="token operator">:</span> <span class="token string">"/content/dam/wknd/pwa-logo.png"</span><span class="token punctuation">,</span><br />      <span class="token property">"type"</span><span class="token operator">:</span> <span class="token string">"image/png"</span><span class="token punctuation">,</span><br />      <span class="token property">"sizes"</span><span class="token operator">:</span> <span class="token string">"512x512"</span><span class="token punctuation">,</span><br />      <span class="token property">"purpose"</span><span class="token operator">:</span> <span class="token string">"any maskable"</span><br />    <span class="token punctuation">}</span><br />  <span class="token punctuation">]</span><br /><span class="token punctuation">}</span></code></pre>
</div><p>The start URL can be different from the default landing page for your domain. By changing the <code>start_url</code> parameter, you can send your users directly to the application experience rather than the default page a non-authenticated or new user would be presented. This provides PWA users with a smoother, more app-like experience.</p>
<p>AEM understands that different locales can have a different look and feel. You can configure different properties, colors, and icons for different locales or languages and then synchronize the configuration with the linked pages.</p>
<p>Once the PWA is accessed on the browser, you can right click and inspect to bring up DevTools and view the manifest under the Applications panel.</p>
<figure>
  <img alt="A PWA in the DevTools Application panel." decoding="async" height="966" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/xWxP7YILDgejrdtbq0hh.png?auto=format" srcset="https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/xWxP7YILDgejrdtbq0hh.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/xWxP7YILDgejrdtbq0hh.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/xWxP7YILDgejrdtbq0hh.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/xWxP7YILDgejrdtbq0hh.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/xWxP7YILDgejrdtbq0hh.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/xWxP7YILDgejrdtbq0hh.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/xWxP7YILDgejrdtbq0hh.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/xWxP7YILDgejrdtbq0hh.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/xWxP7YILDgejrdtbq0hh.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/xWxP7YILDgejrdtbq0hh.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/xWxP7YILDgejrdtbq0hh.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/xWxP7YILDgejrdtbq0hh.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/xWxP7YILDgejrdtbq0hh.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/xWxP7YILDgejrdtbq0hh.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/xWxP7YILDgejrdtbq0hh.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/xWxP7YILDgejrdtbq0hh.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/xWxP7YILDgejrdtbq0hh.png?auto=format&w=1600 1600w" width="800" />
</figure>
<h3 id="configure-the-service-worker">Configure the service worker <a class="w-headline-link" href="https://web.dev/aem-with-workbox/#configure-the-service-worker">#</a></h3>
<p>You can configure the content to cache and the caching strategy to use.</p>
<p>If you have been using service workers you may be familiar with <a href="https://developer.chrome.com/docs/workbox/modules/workbox-strategies/" rel="noopener">caching strategies</a>. Caching strategies specify which resources to cache and whether to look for those resources in the cache first, the network first, or in the cache with a network fallback. You can then choose the resources to pre-cache when the service worker is installed. AEM Application service workers implement a <a href="https://developer.chrome.com/docs/workbox/managing-fallback-responses/#warming-the-runtime-cache" rel="noopener">warm cache strategy</a> which means user's experience will not break even if you specify a missing or broken path.</p>
<figure>
  <img alt="Configuring the service worker using the Cache Management (Advanced) dialog box." decoding="async" height="753" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/GY9pDPqKTuux6jR26ZZZ.png?auto=format" srcset="https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/GY9pDPqKTuux6jR26ZZZ.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/GY9pDPqKTuux6jR26ZZZ.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/GY9pDPqKTuux6jR26ZZZ.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/GY9pDPqKTuux6jR26ZZZ.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/GY9pDPqKTuux6jR26ZZZ.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/GY9pDPqKTuux6jR26ZZZ.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/GY9pDPqKTuux6jR26ZZZ.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/GY9pDPqKTuux6jR26ZZZ.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/GY9pDPqKTuux6jR26ZZZ.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/GY9pDPqKTuux6jR26ZZZ.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/GY9pDPqKTuux6jR26ZZZ.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/GY9pDPqKTuux6jR26ZZZ.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/GY9pDPqKTuux6jR26ZZZ.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/GY9pDPqKTuux6jR26ZZZ.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/GY9pDPqKTuux6jR26ZZZ.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/GY9pDPqKTuux6jR26ZZZ.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/GY9pDPqKTuux6jR26ZZZ.png?auto=format&w=1600 1600w" width="800" />
</figure>
<p>In AEM, the term &quot;clientlibs&quot; refers to client-side Libraries: the combination of related JavaScript, CSS, and static resources that have been added to your project that are served to and utilized by the client web browser. You can easily set your client-side libraries to be used offline by specifying those libraries in the user interface.</p>
<figure>
  <img alt="The client side libraries dialog box." decoding="async" height="634" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/9jrYgsiQzPecwYPVdCEw.png?auto=format" srcset="https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/9jrYgsiQzPecwYPVdCEw.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/9jrYgsiQzPecwYPVdCEw.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/9jrYgsiQzPecwYPVdCEw.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/9jrYgsiQzPecwYPVdCEw.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/9jrYgsiQzPecwYPVdCEw.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/9jrYgsiQzPecwYPVdCEw.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/9jrYgsiQzPecwYPVdCEw.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/9jrYgsiQzPecwYPVdCEw.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/9jrYgsiQzPecwYPVdCEw.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/9jrYgsiQzPecwYPVdCEw.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/9jrYgsiQzPecwYPVdCEw.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/9jrYgsiQzPecwYPVdCEw.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/9jrYgsiQzPecwYPVdCEw.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/9jrYgsiQzPecwYPVdCEw.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/9jrYgsiQzPecwYPVdCEw.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/9jrYgsiQzPecwYPVdCEw.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/9jrYgsiQzPecwYPVdCEw.png?auto=format&w=1600 1600w" width="800" />
</figure>
<p>You can also include third-party resources such as fonts. This offline cache configuration provides configuration information to a service worker that is generated for your application that internally uses workbox. That is pretty much all there is to make your application installable. Once installed, the application icon will show up on your mobile device home screen just like a platform app. Clicking the icon will access the wknd site.</p>
<p>Please note that you can change your content or these settings at any time. When you publish your changes, the service worker will be updated at the client by the browser and a message will be presented to the user that a newer version of the PWA is available. The user can click the message to reload the application and get the latest updates. You can open the browser developer tools and applications panel to view the service worker details.</p>
<figure>
  <img alt="The DevTools service worker panel." decoding="async" height="575" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/4trs4SyeqTJN7HQQTXst.png?auto=format" srcset="https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/4trs4SyeqTJN7HQQTXst.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/4trs4SyeqTJN7HQQTXst.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/4trs4SyeqTJN7HQQTXst.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/4trs4SyeqTJN7HQQTXst.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/4trs4SyeqTJN7HQQTXst.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/4trs4SyeqTJN7HQQTXst.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/4trs4SyeqTJN7HQQTXst.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/4trs4SyeqTJN7HQQTXst.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/4trs4SyeqTJN7HQQTXst.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/4trs4SyeqTJN7HQQTXst.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/4trs4SyeqTJN7HQQTXst.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/4trs4SyeqTJN7HQQTXst.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/4trs4SyeqTJN7HQQTXst.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/4trs4SyeqTJN7HQQTXst.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/4trs4SyeqTJN7HQQTXst.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/4trs4SyeqTJN7HQQTXst.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/4trs4SyeqTJN7HQQTXst.png?auto=format&w=1600 1600w" width="800" />
</figure>
<p>You can expand cache storage to view the content that has been cached locally:</p>
<figure>
  <img alt="The cache storage view in DevTools." decoding="async" height="398" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/vNL5kbPDYti0GEkiJNBq.png?auto=format" srcset="https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/vNL5kbPDYti0GEkiJNBq.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/vNL5kbPDYti0GEkiJNBq.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/vNL5kbPDYti0GEkiJNBq.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/vNL5kbPDYti0GEkiJNBq.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/vNL5kbPDYti0GEkiJNBq.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/vNL5kbPDYti0GEkiJNBq.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/vNL5kbPDYti0GEkiJNBq.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/vNL5kbPDYti0GEkiJNBq.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/vNL5kbPDYti0GEkiJNBq.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/vNL5kbPDYti0GEkiJNBq.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/vNL5kbPDYti0GEkiJNBq.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/vNL5kbPDYti0GEkiJNBq.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/vNL5kbPDYti0GEkiJNBq.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/vNL5kbPDYti0GEkiJNBq.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/vNL5kbPDYti0GEkiJNBq.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/vNL5kbPDYti0GEkiJNBq.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/vNL5kbPDYti0GEkiJNBq.png?auto=format&w=1600 1600w" width="800" />
</figure>
<h3 id="the-results">The results <a class="w-headline-link" href="https://web.dev/aem-with-workbox/#the-results">#</a></h3>
<p>It's time to look at the results of your hard work. With just configuration and without coding you have just enhanced your AEM site to become a Progressive Web App.</p>
<img alt="An AEM site as a Progressive Web App." decoding="async" height="633" loading="lazy" sizes="(min-width: 385px) 385px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/kKx6HOoA6z4hXoy4WZn8.gif?auto=format" srcset="https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/kKx6HOoA6z4hXoy4WZn8.gif?auto=format&w=200 200w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/kKx6HOoA6z4hXoy4WZn8.gif?auto=format&w=228 228w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/kKx6HOoA6z4hXoy4WZn8.gif?auto=format&w=260 260w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/kKx6HOoA6z4hXoy4WZn8.gif?auto=format&w=296 296w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/kKx6HOoA6z4hXoy4WZn8.gif?auto=format&w=338 338w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/kKx6HOoA6z4hXoy4WZn8.gif?auto=format&w=385 385w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/kKx6HOoA6z4hXoy4WZn8.gif?auto=format&w=439 439w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/kKx6HOoA6z4hXoy4WZn8.gif?auto=format&w=500 500w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/kKx6HOoA6z4hXoy4WZn8.gif?auto=format&w=571 571w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/kKx6HOoA6z4hXoy4WZn8.gif?auto=format&w=650 650w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/kKx6HOoA6z4hXoy4WZn8.gif?auto=format&w=741 741w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/kKx6HOoA6z4hXoy4WZn8.gif?auto=format&w=770 770w" style="max-width: 385; margin: 0 auto;" width="385" />
<p>Chrome developer tools provide a lighthouse audit that lets you check how compliant your web application and configuration is with Progressive Web App standards.</p>
<figure>
  <img alt="A lighthouse audit." decoding="async" height="694" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/MGOAltGvFK3MCJLgFznv.png?auto=format" srcset="https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/MGOAltGvFK3MCJLgFznv.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/MGOAltGvFK3MCJLgFznv.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/MGOAltGvFK3MCJLgFznv.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/MGOAltGvFK3MCJLgFznv.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/MGOAltGvFK3MCJLgFznv.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/MGOAltGvFK3MCJLgFznv.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/MGOAltGvFK3MCJLgFznv.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/MGOAltGvFK3MCJLgFznv.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/MGOAltGvFK3MCJLgFznv.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/MGOAltGvFK3MCJLgFznv.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/MGOAltGvFK3MCJLgFznv.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/MGOAltGvFK3MCJLgFznv.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/MGOAltGvFK3MCJLgFznv.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/MGOAltGvFK3MCJLgFznv.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/MGOAltGvFK3MCJLgFznv.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/MGOAltGvFK3MCJLgFznv.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/sQ51XsLqKMgSQMCZjIN0B7hlBO02/MGOAltGvFK3MCJLgFznv.png?auto=format&w=1600 1600w" width="800" />
</figure>
<h2 id="conclusion">Conclusion <a class="w-headline-link" href="https://web.dev/aem-with-workbox/#conclusion">#</a></h2>
<p>Progressive Web Apps provide an app-like experience for your website, that uses the cross platform and open nature of the web at a lower cost of development and maintenance while providing control over distribution. This enhances engagement, retention, and most importantly, drives higher conversion rates. AEM in conjunction with Workbox makes it easy to enhance your existing site into a PWA with just configuration and no coding.</p>
<h2 id="references">References <a class="w-headline-link" href="https://web.dev/aem-with-workbox/#references">#</a></h2>
<ul>
<li><a href="https://experienceleague.adobe.com/docs/experience-manager-learn/getting-started-wknd-tutorial-develop/overview.html" rel="noopener">WKND Tutorial</a></li>
<li><a href="https://developers.google.com/web/fundamentals/primers/service-workers" rel="noopener">Service Workers</a></li>
<li><a href="https://web.dev/cache-api-quick-guide/">Cache API</a></li>
<li><a href="https://web.dev/add-manifest/">Web application manifest</a></li>
<li><a href="https://web.dev/maskable-icon/">Adaptive icon support in PWAs with maskable icons</a></li>
<li>Learn more about Adobe Experience Manager Sites: <a href="https://business.adobe.com/products/experience-manager/sites/aem-sites" rel="noopener">https://business.adobe.com/products/experience-manager/sites/aem-sites</a></li>
<li>Learn more about Workbox: <a href="https://developers.google.com/web/tools/workbox/guides/get-started" rel="noopener">https://developers.google.com/web/tools/workbox/guides/get-started</a></li>
<li>Workbox Caching strategies: <a href="https://developers.google.com/web/tools/workbox/modules/workbox-strategies" rel="noopener">https://developers.google.com/web/tools/workbox/modules/workbox-strategies</a></li>
<li>Learn more about <a href="https://web.dev/progressive-web-apps/">Progressive Web Apps</a></li>
</ul>]]></content:encoded>
</item>
<item>
<title><![CDATA[MishiPay's PWA increases transactions 10 times and saves 2.5 years of queuing]]></title>
<description><![CDATA[MishiPay empowers shoppers to scan and pay for their shopping with their smartphones, rather than
wasting time queuing at the checkout. With MishiPay's Scan & Go technology,
shoppers can use their own phone to scan the barcode on items and pay for them, then simply leave
the store. Studies reveal...]]></description>
<link>https://tsecurity.de/de/1725689/it+betriebssysteme/web+tipps/mishipays+pwa+increases+transactions+10+times+and+saves+25+years+of+queuing/</link>
<pubDate>Thu, 08 Dec 2022 19:45:05 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>MishiPay empowers shoppers to scan and pay for their shopping with their smartphones, rather than
wasting time queuing at the checkout. With MishiPay's <a href="https://mishipay.com/" rel="noopener">Scan &amp; Go</a> technology,
shoppers can use their own phone to scan the barcode on items and pay for them, then simply leave
the store. <a href="https://www.adyen.com/en_GB/landing/online/uk/2019/bnb/report" rel="noopener">Studies</a> reveal that
in-store queuing costs the global retail sector about $200 billion annually.</p>
<p>Our technology relies on device hardware capabilities such as GPS sensors and cameras that allow
users to locate MishiPay-enabled stores, scan item barcodes within the physical store, and then pay
using the digital payment method of their choice. The initial versions of our Scan &amp; Go technology
were platform-specific iOS and Android applications, and early adopters loved the technology. Read
on to learn how switching to a PWA increased transactions by 10 times and saved 2.5 years of
queuing!</p>
<ul class="stats">
  <div class="stats__item">
    <p class="stats__figure">
      10<sub>×</sub>
    </p>
    <p>Increased transactions</p>
  </div>
  <div class="stats__item">
    <p class="stats__figure">
      2.5 years
   </p>
    <p>Queuing saved</p>
  </div>
</ul>
<h2 id="challenge">Challenge <a class="w-headline-link" href="https://web.dev/mishipay/#challenge">#</a></h2>
<p>Users find our technology extremely helpful when waiting in a queue or check-out line, as it allows
them to skip the queue and have a smooth in-store experience. But the hassle of downloading an
Android or iOS application made users not choose our technology despite the value. It was a growing
challenge for MishiPay, and we needed to increase user adoption with a lower barrier of entry.</p>
<h2 id="solution">Solution <a class="w-headline-link" href="https://web.dev/mishipay/#solution">#</a></h2>
<p>Our efforts at building and launching the PWA helped us remove the installation hassle and
encouraged new users to try our technology inside a physical store, skip the queue, and have a
seamless shopping experience. Since the launch, we have seen a massive spike in user adoption with
our PWA compared to our platform-specific applications.</p>
<figure>
  <video autoplay="" loop="" muted="" playsinline="">      <source src="https://storage.googleapis.com/web-dev-uploads/video/8WbTDNrhLsU0El80frMBGE4eMCD3/jtJZ418n11SOtHLTsOht.mp4" type="video/mp4" />    </video>
  <figcaption>
    Side-by-side comparison of directly launching the PWA (left, faster) vs. installing and launching the Android app (right, slower).
  </figcaption>
</figure>
<figure>
  <img alt="Transactions by platform. ¡OS: 16397 (3.98%). Android: 13769 (3.34%). Web: 382184 (92.68%)." decoding="async" height="415" loading="lazy" sizes="(min-width: 300px) 300px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/I5FMltbcuDHqgqEQMyqA.png?auto=format" srcset="https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/I5FMltbcuDHqgqEQMyqA.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/I5FMltbcuDHqgqEQMyqA.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/I5FMltbcuDHqgqEQMyqA.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/I5FMltbcuDHqgqEQMyqA.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/I5FMltbcuDHqgqEQMyqA.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/I5FMltbcuDHqgqEQMyqA.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/I5FMltbcuDHqgqEQMyqA.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/I5FMltbcuDHqgqEQMyqA.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/I5FMltbcuDHqgqEQMyqA.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/I5FMltbcuDHqgqEQMyqA.png?auto=format&w=600 600w" width="300" />
  <figcaption>
    The majority of all transactions happen on the web.
  </figcaption>
</figure>
<h2 id="technical-deep-dive">Technical deep-dive <a class="w-headline-link" href="https://web.dev/mishipay/#technical-deep-dive">#</a></h2>
<h3 id="locating-mishipay-enabled-stores">Locating MishiPay enabled stores <a class="w-headline-link" href="https://web.dev/mishipay/#locating-mishipay-enabled-stores">#</a></h3>
<p>To enable this feature, we rely on the
<a href="https://developer.mozilla.org/docs/Web/API/Geolocation/getCurrentPosition" rel="noopener"><code>getCurrentPosition()</code></a>
API along with an IP-based fallback solution.</p>
<div><pre class="language-js"><code class="language-js"><span class="token keyword">const</span> geoOptions <span class="token operator">=</span> <span class="token punctuation">{</span><br />  <span class="token literal-property property">timeout</span><span class="token operator">:</span> <span class="token number">10</span> <span class="token operator">*</span> <span class="token number">1000</span><span class="token punctuation">,</span><br />  <span class="token literal-property property">enableHighAccuracy</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span><br />  <span class="token literal-property property">maximumAge</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span><br /><span class="token punctuation">}</span><span class="token punctuation">;</span><br /><br />window<span class="token punctuation">.</span>navigator<span class="token punctuation">.</span>geolocation<span class="token punctuation">.</span><span class="token function">getCurrentPosition</span><span class="token punctuation">(</span><br />  <span class="token punctuation">(</span><span class="token parameter">position</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span><br />    <span class="token keyword">const</span> cords <span class="token operator">=</span> position<span class="token punctuation">.</span>coords<span class="token punctuation">;</span><br />    console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">Latitude :  </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>cords<span class="token punctuation">.</span>latitude<span class="token interpolation-punctuation punctuation">}</span></span><span class="token template-punctuation string">`</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />    console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">Longitude :  </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>cords<span class="token punctuation">.</span>longitude<span class="token interpolation-punctuation punctuation">}</span></span><span class="token template-punctuation string">`</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token punctuation">}</span><span class="token punctuation">,</span><br />  <span class="token punctuation">(</span><span class="token parameter">error</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span><br />    console<span class="token punctuation">.</span><span class="token function">debug</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">Error: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>error<span class="token punctuation">.</span>code<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">:</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>error<span class="token punctuation">.</span>message<span class="token interpolation-punctuation punctuation">}</span></span><span class="token template-punctuation string">`</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />    <span class="token comment">/**<br />     * Invoke the IP based location services<br />     * to fetch the latitude and longitude of the user.<br />     */</span><br />  <span class="token punctuation">}</span><span class="token punctuation">,</span><br />  geoOptions<span class="token punctuation">,</span><br /><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
</div><p>This approach worked well in the earlier versions of the app, but was later proven to be a huge pain
point for MishiPay's users for the following reasons:</p>
<ul>
<li>Location inaccuracies in the IP-based fallback solutions.</li>
<li>A growing listing of MishiPay-enabled stores per region requires users to scroll a list and
identify the correct store.</li>
<li>Users accidentally occasionally choose the wrong store, causing the purchases to be recorded
incorrectly.</li>
</ul>
<p>To address these issues, we embedded unique geolocated QR codes on the in-store displays for each
store. It paved the way for a faster onboarding experience. Users simply scan the geolocated QR
codes printed on marketing material present in the stores to access the Scan &amp; Go web application.
This way, they can avoid typing in the web address <code>mishipay.shop</code> to access the service.</p>
<figure>
  <video autoplay="" height="600" loop="" muted="" playsinline="" width="1296">      <source src="https://storage.googleapis.com/web-dev-uploads/video/8WbTDNrhLsU0El80frMBGE4eMCD3/NqyMBZGYzGSNqLE7soXR.mp4" type="video/mp4" />    </video>
  <figcaption>
    In-store scanning experience using the PWA.
  </figcaption>
</figure>
<h3 id="scanning-products">Scanning products <a class="w-headline-link" href="https://web.dev/mishipay/#scanning-products">#</a></h3>
<p>A core feature in the MishiPay app is the barcode scanning as this empowers our users to scan their
own purchases and see the running total even before they would otherwise have reached a cash
register.</p>
<p>To build a scanning experience on the web, we have identified three core layers.</p>
<img alt="Diagram showing the three main thread layers: video stream, processing layer, and decoder layer." decoding="async" height="358" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/jRJeqbGW7yqU8VpdbjBO.png?auto=format" srcset="https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/jRJeqbGW7yqU8VpdbjBO.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/jRJeqbGW7yqU8VpdbjBO.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/jRJeqbGW7yqU8VpdbjBO.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/jRJeqbGW7yqU8VpdbjBO.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/jRJeqbGW7yqU8VpdbjBO.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/jRJeqbGW7yqU8VpdbjBO.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/jRJeqbGW7yqU8VpdbjBO.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/jRJeqbGW7yqU8VpdbjBO.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/jRJeqbGW7yqU8VpdbjBO.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/jRJeqbGW7yqU8VpdbjBO.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/jRJeqbGW7yqU8VpdbjBO.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/jRJeqbGW7yqU8VpdbjBO.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/jRJeqbGW7yqU8VpdbjBO.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/jRJeqbGW7yqU8VpdbjBO.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/jRJeqbGW7yqU8VpdbjBO.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/jRJeqbGW7yqU8VpdbjBO.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/jRJeqbGW7yqU8VpdbjBO.png?auto=format&w=1600 1600w" width="800" />
<h3 id="video-stream">Video stream <a class="w-headline-link" href="https://web.dev/mishipay/#video-stream">#</a></h3>
<p>With the help of the
<a href="https://developer.mozilla.org/docs/Web/API/MediaDevices/getUserMedia" rel="noopener"><code>getUserMedia()</code></a> method, we
can access the user's rear view camera with the constraints listed below. Invoking the method
automatically triggers a prompt for users to accept or deny access to their camera. Once we have
access to the video stream, we can relay it to a video element as shown below:</p>
<div><pre class="language-js"><code class="language-js"><span class="token comment">/**<br /> * Video Stream Layer<br /> * https://developer.mozilla.org/docs/Web/API/MediaDevices/getUserMedia<br /> */</span><br /><span class="token keyword">const</span> canvasEle <span class="token operator">=</span> document<span class="token punctuation">.</span><span class="token function">getElementById</span><span class="token punctuation">(</span><span class="token string">'canvas'</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br /><span class="token keyword">const</span> videoEle <span class="token operator">=</span> document<span class="token punctuation">.</span><span class="token function">getElementById</span><span class="token punctuation">(</span><span class="token string">'videoElement'</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br /><span class="token keyword">const</span> canvasCtx <span class="token operator">=</span> canvasEle<span class="token punctuation">.</span><span class="token function">getContext</span><span class="token punctuation">(</span><span class="token string">'2d'</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br /><span class="token function">fetchVideoStream</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br /><span class="token keyword">function</span> <span class="token function">fetchVideoStream</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><br />  <span class="token keyword">let</span> constraints <span class="token operator">=</span> <span class="token punctuation">{</span> <span class="token literal-property property">video</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">facingMode</span><span class="token operator">:</span> <span class="token string">'environment'</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">;</span><br />  <span class="token keyword">if</span> <span class="token punctuation">(</span>navigator<span class="token punctuation">.</span>mediaDevices <span class="token operator">!==</span> <span class="token keyword">undefined</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><br />    navigator<span class="token punctuation">.</span>mediaDevices<br />      <span class="token punctuation">.</span><span class="token function">getUserMedia</span><span class="token punctuation">(</span>constraints<span class="token punctuation">)</span><br />      <span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">stream</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span><br />        videoEle<span class="token punctuation">.</span>srcObject <span class="token operator">=</span> stream<span class="token punctuation">;</span><br />        videoStream <span class="token operator">=</span> stream<span class="token punctuation">;</span><br />        videoEle<span class="token punctuation">.</span><span class="token function">play</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />        <span class="token comment">// Initiate frame capture - Processing Layer.</span><br />      <span class="token punctuation">}</span><span class="token punctuation">)</span><br />      <span class="token punctuation">.</span><span class="token function">catch</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">error</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span><br />        console<span class="token punctuation">.</span><span class="token function">debug</span><span class="token punctuation">(</span>error<span class="token punctuation">)</span><span class="token punctuation">;</span><br />        console<span class="token punctuation">.</span><span class="token function">warn</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">Failed to access the stream:</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>error<span class="token punctuation">.</span>name<span class="token interpolation-punctuation punctuation">}</span></span><span class="token template-punctuation string">`</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />      <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span><br />    console<span class="token punctuation">.</span><span class="token function">warn</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">getUserMedia API not supported!!</span><span class="token template-punctuation string">`</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token punctuation">}</span><br /><span class="token punctuation">}</span></code></pre>
</div><h3 id="processing-layer">Processing layer <a class="w-headline-link" href="https://web.dev/mishipay/#processing-layer">#</a></h3>
<p>For detecting a barcode in a given video stream, we need to periodically capture frames and transfer
them to the decoder layer. To capture a frame, we simply draw the streams from <code>VideoElement</code> onto
an <code>HTMLCanvasElement</code> using the
<a href="https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/drawImage" rel="noopener"><code>drawImage()</code></a>
method of the <a href="https://developer.mozilla.org/docs/Web/API/Canvas_API" rel="noopener">Canvas API</a>.</p>
<div><pre class="language-js"><code class="language-js"><span class="token comment">/**<br /> * Processing Layer - Frame Capture<br /> * https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Manipulating_video_using_canvas<br /> */</span><br /><span class="token keyword">async</span> <span class="token keyword">function</span> <span class="token function">captureFrames</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><br />  <span class="token keyword">if</span> <span class="token punctuation">(</span>videoEle<span class="token punctuation">.</span>readyState <span class="token operator">===</span> videoEle<span class="token punctuation">.</span><span class="token constant">HAVE_ENOUGH_DATA</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><br />    <span class="token keyword">const</span> canvasHeight <span class="token operator">=</span> <span class="token punctuation">(</span>canvasEle<span class="token punctuation">.</span>height <span class="token operator">=</span> videoEle<span class="token punctuation">.</span>videoHeight<span class="token punctuation">)</span><span class="token punctuation">;</span><br />    <span class="token keyword">const</span> canvasWidth <span class="token operator">=</span> <span class="token punctuation">(</span>canvasEle<span class="token punctuation">.</span>width <span class="token operator">=</span> videoEle<span class="token punctuation">.</span>videoWidth<span class="token punctuation">)</span><span class="token punctuation">;</span><br />    canvasCtx<span class="token punctuation">.</span><span class="token function">drawImage</span><span class="token punctuation">(</span>videoEle<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> canvasWidth<span class="token punctuation">,</span> canvasHeight<span class="token punctuation">)</span><span class="token punctuation">;</span><br />    <span class="token comment">// Transfer the `canvasEle` to the decoder for barcode detection.</span><br />    <span class="token keyword">const</span> result <span class="token operator">=</span> <span class="token keyword">await</span> <span class="token function">decodeBarcode</span><span class="token punctuation">(</span>canvasEle<span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span><br />    console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'Video feed not available yet'</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token punctuation">}</span><br /><span class="token punctuation">}</span></code></pre>
</div><p>For advanced use cases, this layer also performs some pre-processing tasks such as cropping,
rotating, or converting to grayscale. These tasks can be CPU-intensive and result in the application
being unresponsive given that barcode scanning is a long-running operation. With the help of the
<a href="https://developer.mozilla.org/docs/Web/API/OffscreenCanvas" rel="noopener">OffscreenCanvas</a> API, we can offload
the CPU-intensive task to a web worker. On devices that support hardware graphics acceleration,
WebGL API and its
<a href="https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext" rel="noopener"><code>WebGL2RenderingContext</code></a> can
optimize gains on the CPU-intensive pre-processing tasks.</p>
<h3 id="decoder-layer">Decoder layer <a class="w-headline-link" href="https://web.dev/mishipay/#decoder-layer">#</a></h3>
<p>The final layer is the decoder layer which is responsible for decoding barcodes from the frames
captured by the processing layer. Thanks to the
<a href="https://developer.mozilla.org/docs/Web/API/Barcode_Detection_API" rel="noopener">Shape Detection API</a> (which is
not yet available on all browsers) the browser itself decodes the barcode from an
<code>ImageBitmapSource</code>, which can be an <code>img</code> element, an SVG <code>image</code> element, a <code>video</code> element, a
<code>canvas</code> element, a <code>Blob</code> object, an <code>ImageData</code> object, or an <code>ImageBitmap</code> object.</p>
<img alt="Diagram showing the three main thread layers: video stream, processing layer, and Shape Detection API." decoding="async" height="358" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/GR4od5fHOxys6lrxttPn.png?auto=format" srcset="https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/GR4od5fHOxys6lrxttPn.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/GR4od5fHOxys6lrxttPn.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/GR4od5fHOxys6lrxttPn.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/GR4od5fHOxys6lrxttPn.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/GR4od5fHOxys6lrxttPn.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/GR4od5fHOxys6lrxttPn.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/GR4od5fHOxys6lrxttPn.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/GR4od5fHOxys6lrxttPn.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/GR4od5fHOxys6lrxttPn.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/GR4od5fHOxys6lrxttPn.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/GR4od5fHOxys6lrxttPn.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/GR4od5fHOxys6lrxttPn.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/GR4od5fHOxys6lrxttPn.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/GR4od5fHOxys6lrxttPn.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/GR4od5fHOxys6lrxttPn.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/GR4od5fHOxys6lrxttPn.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/GR4od5fHOxys6lrxttPn.png?auto=format&w=1600 1600w" width="800" />
<div><pre class="language-js"><code class="language-js"><span class="token comment">/**<br /> * Barcode Decoder with Shape Detection API<br /> * https://web.dev/shape-detection/<br /> */</span><br /><span class="token keyword">async</span> <span class="token keyword">function</span> <span class="token function">decodeBarcode</span><span class="token punctuation">(</span><span class="token parameter">canvas</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><br />  <span class="token keyword">const</span> formats <span class="token operator">=</span> <span class="token punctuation">[</span><br />    <span class="token string">'aztec'</span><span class="token punctuation">,</span><br />    <span class="token string">'code_128'</span><span class="token punctuation">,</span><br />    <span class="token string">'code_39'</span><span class="token punctuation">,</span><br />    <span class="token string">'code_93'</span><span class="token punctuation">,</span><br />    <span class="token string">'codabar'</span><span class="token punctuation">,</span><br />    <span class="token string">'data_matrix'</span><span class="token punctuation">,</span><br />    <span class="token string">'ean_13'</span><span class="token punctuation">,</span><br />    <span class="token string">'ean_8'</span><span class="token punctuation">,</span><br />    <span class="token string">'itf'</span><span class="token punctuation">,</span><br />    <span class="token string">'pdf417'</span><span class="token punctuation">,</span><br />    <span class="token string">'qr_code'</span><span class="token punctuation">,</span><br />    <span class="token string">'upc_a'</span><span class="token punctuation">,</span><br />    <span class="token string">'upc_e'</span><span class="token punctuation">,</span><br />  <span class="token punctuation">]</span><span class="token punctuation">;</span><br />  <span class="token keyword">const</span> barcodeDetector <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">window<span class="token punctuation">.</span>BarcodeDetector</span><span class="token punctuation">(</span><span class="token punctuation">{</span><br />    formats<span class="token punctuation">,</span><br />  <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token keyword">try</span> <span class="token punctuation">{</span><br />    <span class="token keyword">const</span> barcodes <span class="token operator">=</span> <span class="token keyword">await</span> barcodeDetector<span class="token punctuation">.</span><span class="token function">detect</span><span class="token punctuation">(</span>canvas<span class="token punctuation">)</span><span class="token punctuation">;</span><br />    console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>barcodes<span class="token punctuation">)</span><span class="token punctuation">;</span><br />    <span class="token keyword">return</span> barcodes<span class="token punctuation">.</span>length <span class="token operator">></span> <span class="token number">0</span> <span class="token operator">?</span> barcodes<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string">'rawValue'</span><span class="token punctuation">]</span> <span class="token operator">:</span> <span class="token keyword">undefined</span><span class="token punctuation">;</span><br />  <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span>e<span class="token punctuation">)</span> <span class="token punctuation">{</span><br />    <span class="token keyword">throw</span> e<span class="token punctuation">;</span><br />  <span class="token punctuation">}</span><br /><span class="token punctuation">}</span></code></pre>
</div><p>For devices that don't support the Shape Detection API yet, we need a fallback solution to decode
the barcodes. The Shape Detection API exposes a
<a href="https://developer.mozilla.org/docs/Web/API/BarcodeDetector/getSupportedFormats" rel="noopener"><code>getSupportedFormats()</code></a>
method which helps switch between the Shape Detection API and the fallback solution.</p>
<div><pre class="language-js"><code class="language-js"><span class="token comment">// Feature detection.</span><br /><span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span><span class="token punctuation">(</span><span class="token string">'BarceodeDetector'</span> <span class="token keyword">in</span> window<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><br />  <span class="token keyword">return</span><span class="token punctuation">;</span><br /><span class="token punctuation">}</span><br /><span class="token comment">// Check supported barcode formats.</span><br />BarcodeDetector<span class="token punctuation">.</span><span class="token function">getSupportedFormats</span><span class="token punctuation">(</span><span class="token punctuation">)</span><br /><span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">supportedFormats</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span><br />  supportedFormats<span class="token punctuation">.</span><span class="token function">forEach</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">format</span><span class="token punctuation">)</span> <span class="token operator">=></span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>format<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br /><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
</div><img alt="Flow diagram showing how, dependent on Barcode Detector support and the supported barcode formats, either the Shape Detection API or the fallback solution  is being used." decoding="async" height="404" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/GmrPC7mFTdtsEdS1BDWp.png?auto=format" srcset="https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/GmrPC7mFTdtsEdS1BDWp.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/GmrPC7mFTdtsEdS1BDWp.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/GmrPC7mFTdtsEdS1BDWp.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/GmrPC7mFTdtsEdS1BDWp.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/GmrPC7mFTdtsEdS1BDWp.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/GmrPC7mFTdtsEdS1BDWp.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/GmrPC7mFTdtsEdS1BDWp.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/GmrPC7mFTdtsEdS1BDWp.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/GmrPC7mFTdtsEdS1BDWp.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/GmrPC7mFTdtsEdS1BDWp.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/GmrPC7mFTdtsEdS1BDWp.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/GmrPC7mFTdtsEdS1BDWp.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/GmrPC7mFTdtsEdS1BDWp.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/GmrPC7mFTdtsEdS1BDWp.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/GmrPC7mFTdtsEdS1BDWp.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/GmrPC7mFTdtsEdS1BDWp.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/GmrPC7mFTdtsEdS1BDWp.png?auto=format&w=1600 1600w" width="800" />
<h3 id="fallback-solution">Fallback solution <a class="w-headline-link" href="https://web.dev/mishipay/#fallback-solution">#</a></h3>
<p>Several open-source and enterprise scanning libraries are available that can be easily integrated
with any web application to implement scanning. Here are some of the libraries that MishiPay
recommend.</p>
<div class="table-wrapper scrollbar">
  <table>
    <thead>
      <tr>
        <th>Library Name</th>
        <th>Type</th>
        <th>Wasm Solution</th>
        <th>Barcode Formats</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td><a href="https://github.com/serratus/quaggaJS">QuaggaJs</a></td>
        <td>Open Source</td>
        <td>No</td>
        <td>1D</td>
      </tr>
      <tr>
        <td><a href="https://github.com/zxing-js/library">ZxingJs</a></td>
        <td>Open Source</td>
        <td>No</td>
        <td>1D & 2D (Limited)</td>
      </tr>
      <tr>
        <td><a href="https://codecorp.com/products">CodeCorp</a></td>
        <td>Enterprise</td>
        <td>Yes</td>
        <td>1D & 2D</td>
      </tr>
      <tr>
        <td><a href="https://docs.scandit.com/stable/web/">Scandit</a></td>
        <td>Enterprise</td>
        <td>Yes</td>
        <td>1D & 2D</td>
      </tr>
    </tbody>
    <caption style="max-width:initial;">
      Comparison of open-source and commercial barcode scanning libraries
    </caption>
  </table>
</div>
<p>All the above libraries are full-fledged SDKs that compose all the layers discussed above. They also
expose interfaces to support various scanning operations. Depending on the barcode formats and
detection speed needed for the business case, a decision can be between Wasm and non-Wasm solutions.
Despite the overhead of requiring an additional resource (Wasm) to decode the barcode, Wasm
solutions outperform the non-Wasm solution in terms of accuracy.</p>
<p><a href="https://docs.scandit.com/stable/web/" rel="noopener">Scandit</a> was our primary choice. It supports all barcode
formats required for our business use cases; it beats all the available open-source libraries in
scanning speed.</p>
<h2 id="future-of-scanning">Future of scanning <a class="w-headline-link" href="https://web.dev/mishipay/#future-of-scanning">#</a></h2>
<p>Once the Shape Detection API is fully supported by all major browsers, we could potentially have a
new HTML element <code>&lt;scanner&gt;</code> that has the capabilities required for a barcode scanner. Engineering
at MishiPay believes there is a solid use case for the barcode scanning functionality to be a new
HTML element due to the growing number of open source and licensed libraries that are enabling
experiences such as Scan &amp; Go and many others.</p>
<h2 id="conclusion">Conclusion <a class="w-headline-link" href="https://web.dev/mishipay/#conclusion">#</a></h2>
<p>App fatigue is an issue that developers face when their products enter the market. Users often want
to understand the value that an application gives them before they download it. In a store, where
MishiPay saves shoppers' time and improves their experience, it is counterintuitive to wait for a
download before they can use an application. This is where our PWA helps. By eliminating the barrier
to entry, we have increased our transactions by 10 times and enabled our users to save 2.5 years of
waiting in the queue.</p>
<h2 id="acknowledgements">Acknowledgements <a class="w-headline-link" href="https://web.dev/mishipay/#acknowledgements">#</a></h2>
<p>This article was reviewed by <a href="https://github.com/jpmedley" rel="noopener">Joe Medley</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[How The Economic Times passed Core Web Vitals thresholds and achieved an overall 43% better bounce rate]]></title>
<description><![CDATA[With internet speeds improving day-by-day, users expect websites to respond and behave faster than ever. The Economic Times handles over 45 million monthly active users. By optimizing for Core Web Vitals across the domain, on AMP and non-AMP pages, we managed to significantly reduce bounce rates ...]]></description>
<link>https://tsecurity.de/de/1725690/it+betriebssysteme/web+tipps/how+the+economic+times+passed+core+web+vitals+thresholds+and+achieved+an+overall+43+better+bounce+rate/</link>
<pubDate>Thu, 08 Dec 2022 19:45:05 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>With internet speeds improving day-by-day, users expect websites to respond and behave faster than ever. <a href="https://m.economictimes.com/" rel="noopener">The Economic Times</a> handles over 45 million monthly active users. By optimizing for Core Web Vitals across the domain, on AMP and non-AMP pages, we managed to significantly reduce bounce rates and improve the reading experience.</p>
<h2 id="measuring-the-impact">Measuring the Impact <a class="w-headline-link" href="https://web.dev/economic-times-cwv/#measuring-the-impact">#</a></h2>
<p>We focused on <a href="https://web.dev/lcp/">Largest Contentful Paint (LCP)</a> and <a href="https://web.dev/cls/">Cumulative Layout Shift (CLS)</a>, as they matter the most when it comes to providing a great reading experience to our users. After implementing various performance fixes as described below, The Economic Times managed to improve Chrome User Experiments (CrUX) report metrics significantly within a few months.</p>
<p><strong>Overall, CLS improved</strong> by 250% from 0.25 to 0.09.
<strong>Overall, LCP improved</strong> by 80% from 4.5 seconds to 2.5 seconds.</p>
<p>Further, LCP values in the &quot;Poor&quot; range were reduced by 33% from October 2020 to July 2021:</p>
<figure>
  <img alt="LCP distributions grouped by month, starting from October 2020 and ending in July 2021. The amount of LCP values classified as &#x27;Poor&#x27; was reduced from 15.03% to 10.08%." decoding="async" height="477" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/1mrpePbYaQeKbIDJKo8b.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/1mrpePbYaQeKbIDJKo8b.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/1mrpePbYaQeKbIDJKo8b.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/1mrpePbYaQeKbIDJKo8b.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/1mrpePbYaQeKbIDJKo8b.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/1mrpePbYaQeKbIDJKo8b.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/1mrpePbYaQeKbIDJKo8b.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/1mrpePbYaQeKbIDJKo8b.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/1mrpePbYaQeKbIDJKo8b.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/1mrpePbYaQeKbIDJKo8b.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/1mrpePbYaQeKbIDJKo8b.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/1mrpePbYaQeKbIDJKo8b.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/1mrpePbYaQeKbIDJKo8b.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/1mrpePbYaQeKbIDJKo8b.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/1mrpePbYaQeKbIDJKo8b.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/1mrpePbYaQeKbIDJKo8b.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/1mrpePbYaQeKbIDJKo8b.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/1mrpePbYaQeKbIDJKo8b.png?auto=format&w=1600 1600w" width="800" />
</figure>
<p>Additionally, CLS values in the &quot;Poor&quot; range were reduced by 65%, and CLS values in the &quot;Good&quot; range increased by 20% in the same timeframe:</p>
<figure>
  <img alt="CLS distributions grouped by month, starting from October 2020 and ending in July 2021. The amount of CLS values classified as &#x27;Poor&#x27; was reduced from 25.92% to 9%, and the amount of CLS values classified as &#x27;Good&#x27; increased from 62.62% to 76.5%." decoding="async" height="463" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/NK3g38biuTH12zGzncHK.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/NK3g38biuTH12zGzncHK.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/NK3g38biuTH12zGzncHK.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/NK3g38biuTH12zGzncHK.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/NK3g38biuTH12zGzncHK.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/NK3g38biuTH12zGzncHK.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/NK3g38biuTH12zGzncHK.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/NK3g38biuTH12zGzncHK.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/NK3g38biuTH12zGzncHK.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/NK3g38biuTH12zGzncHK.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/NK3g38biuTH12zGzncHK.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/NK3g38biuTH12zGzncHK.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/NK3g38biuTH12zGzncHK.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/NK3g38biuTH12zGzncHK.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/NK3g38biuTH12zGzncHK.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/NK3g38biuTH12zGzncHK.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/NK3g38biuTH12zGzncHK.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/NK3g38biuTH12zGzncHK.png?auto=format&w=1600 1600w" width="800" />
</figure>
<p>The result was that The Economic Times—which was previously not meeting CWV thresholds—now passed CWV thresholds across its entire origin and <strong>reduced bounce rates by 43% overall</strong>.</p>
<figure class="w-caption">
  <video autoplay="" loop="" muted="" playsinline="">      <source src="https://storage.googleapis.com/web-dev-uploads/video/jL3OLOhcWUQDnR4XjewLBx4e3PC3/6C1gW9oQu7Njds1Gdpmv.mp4" type="video/mp4" />    </video>
  <figcaption>
    A before and after animation of The Economic Times's Article page.
  </figcaption>
</figure>
<h2 id="what-is-lcp-and-how-did-we-improve-it">What is LCP and how did we improve it? <a class="w-headline-link" href="https://web.dev/economic-times-cwv/#what-is-lcp-and-how-did-we-improve-it">#</a></h2>
<p>The largest element is the most relevant one for improving user experience and recognizing load speed. Performance metrics like <a href="https://web.dev/fcp/">First Contentful Paint (FCP)</a> only capture the very initial experience of page loading. On the other hand, LCP reports the render time of the largest image, text or video section visible to the user.</p>
<p>In addition to switching to a faster DNS provider and optimizing images, here are some of the techniques we applied we covered to improve LCP.</p>
<h3 id="critical-requests-first">Critical requests first <a class="w-headline-link" href="https://web.dev/economic-times-cwv/#critical-requests-first">#</a></h3>
<p>As all modern browsers limit the concurrent number of requests, developers need to prioritize loading the critical content first. To load a complex web page we need to download assets such as header elements, CSS, JavaScript resources, hero image, article body, comments, other related news, footer, and ads. We evaluated what elements were required for LCP, and provided the preference to load those items first to improve LCP. We also deferred the calls that were not part of the initial page rendering.</p>
<h3 id="text-appearance">Text appearance <a class="w-headline-link" href="https://web.dev/economic-times-cwv/#text-appearance">#</a></h3>
<p>We experimented with the <a href="https://developer.mozilla.org/docs/Web/CSS/@font-face/font-display" rel="noopener"><code>font-display</code> property</a> as this impacts both LCP and CLS. We tried <code>font-display: auto;</code> and then switched to <code>font-display: swap;</code>. This renders the text initially in the best matching and available font, then switches to the font when it has been downloaded. This resulted in our text rendering quickly, independent of network speed.</p>
<h3 id="better-compression">Better Compression <a class="w-headline-link" href="https://web.dev/economic-times-cwv/#better-compression">#</a></h3>
<p><a href="http://github.com/google/brotli/" rel="noopener">Brotli</a> is an alternative compression algorithm to Gzip and Deflate developed by Google. We replaced our fonts and assets and changed server compression from Gzip to Brotli to achieve a smaller footprint:</p>
<ul>
<li>Javascript files are 15% smaller than with Gzip.</li>
<li>HTML files are 18% smaller than with Gzip.</li>
<li>CSS and font files are 17% smaller than with Gzip.</li>
</ul>
<h3 id="preconnect-to-third-party-domains">Preconnect to third-party domains <a class="w-headline-link" href="https://web.dev/economic-times-cwv/#preconnect-to-third-party-domains">#</a></h3>
<p><a href="https://web.dev/preconnect-and-dns-prefetch/#establish-early-connections-with-relpreconnect"><code>preconnect</code></a> should be used carefully as it can still take up valuable CPU time, and delay other important resources, especially on secure connections.</p>
<p>However, if it's known that a fetch for a resource on a third-party domain will occur, <code>preconnect</code> is good. If it only happens occasionally on a high traffic website, <code>preconnect</code> might trigger unnecessary TCP and TLS work. Thus <a href="https://web.dev/preconnect-and-dns-prefetch/#resolve-domain-name-early-with-reldns-prefetch"><code>dns-prefetch</code></a> was a better fit for third-party resources—for example, social media, analytics, etc.—to perform DNS lookups ahead of time.</p>
<h3 id="break-up-code-into-chunks">Break up code into chunks <a class="w-headline-link" href="https://web.dev/economic-times-cwv/#break-up-code-into-chunks">#</a></h3>
<p>In the site's head, we only loaded those resources which contain either an essential part of the business logic or were <a href="https://github.com/addyosmani/critical" rel="noopener">critical</a> for above the fold page rendering. Furthermore, we split our code into chunks with <a href="https://loadable-components.com/docs/code-splitting/" rel="noopener">code splitting</a>. This helped us to further improve page LCP.</p>
<h3 id="better-caching">Better caching <a class="w-headline-link" href="https://web.dev/economic-times-cwv/#better-caching">#</a></h3>
<p>For all the front-end routes, we added a <a href="https://en.wikipedia.org/wiki/Redis" rel="noopener">Redis</a> layer which served templates from the cache. This reduces the computation time on the server and builds the whole UI in each request, thus decreasing LCP in subsequent requests.</p>
<h3 id="summarizing-lcp-goals-and-achievements">Summarizing LCP Goals and achievements <a class="w-headline-link" href="https://web.dev/economic-times-cwv/#summarizing-lcp-goals-and-achievements">#</a></h3>
<p>Before beginning the optimization project, the team benchmarked their LCP score at <strong>4.5 seconds</strong> (for the 75th percentile of their users, based on CrUX report field data). After the optimization project, it was reduced to <strong>2.5 seconds</strong>.</p>
<figure class="w-caption">
  <img alt="LCP distributions from September 2020 to June 2021. Overall, the 75th percentile of LCP values observed in the Chrome User Experience report showed an 8.97% reduction in &#x27;Poor&#x27; LCP values. The overall decrease in LCP time at the 75th percentile was 200 milliseconds, with 77.63% of LCP values falling in the &#x27;Good&#x27; range." decoding="async" height="596" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/DsNmTCU3JTpWAam7a3df.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/DsNmTCU3JTpWAam7a3df.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/DsNmTCU3JTpWAam7a3df.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/DsNmTCU3JTpWAam7a3df.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/DsNmTCU3JTpWAam7a3df.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/DsNmTCU3JTpWAam7a3df.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/DsNmTCU3JTpWAam7a3df.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/DsNmTCU3JTpWAam7a3df.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/DsNmTCU3JTpWAam7a3df.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/DsNmTCU3JTpWAam7a3df.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/DsNmTCU3JTpWAam7a3df.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/DsNmTCU3JTpWAam7a3df.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/DsNmTCU3JTpWAam7a3df.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/DsNmTCU3JTpWAam7a3df.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/DsNmTCU3JTpWAam7a3df.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/DsNmTCU3JTpWAam7a3df.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/DsNmTCU3JTpWAam7a3df.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/DsNmTCU3JTpWAam7a3df.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    Source: CrUX Report of The Economic Times overall LCP
  </figcaption>
</figure>
<h2 id="what-is-cls-and-how-did-we-improve-it">What is CLS and how did we improve it? <a class="w-headline-link" href="https://web.dev/economic-times-cwv/#what-is-cls-and-how-did-we-improve-it">#</a></h2>
<p>Have you ever noticed any unexpected movement of page content while browsing a website? One cause of this is asynchronous loading of media (images, videos, ads, etc.) on the page with unknown dimensions. As soon as media resources load, they shift the layout of the page.</p>
<aside class="aside flow bg-state-info-bg color-state-info-text"><div class=" flow"> For more information on CLS, read the <a href="https://web.dev/cls/">CLS metric page</a>. </div></aside>
<p>We're going to cover the measures we took to improve CLS on the The Economic Times website.</p>
<h3 id="use-placeholders">Use placeholders <a class="w-headline-link" href="https://web.dev/economic-times-cwv/#use-placeholders">#</a></h3>
<p>We used a styled placeholder for ad units and media elements of known dimensions to avoid layout shifts when the ad library loads and renders page ads. This ensures layout shifts are eliminated by reserving space for the ad.</p>
<figure>
  <img alt="A side-by-side comparison of The Economic Times website as shown on a mobile phone. At left, a gray placeholder is reserved for the article hero image. At right, the placeholder is replaced with the loaded image." decoding="async" height="647" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ujvqcVK7usp89zn6njAN.jpg?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ujvqcVK7usp89zn6njAN.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ujvqcVK7usp89zn6njAN.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ujvqcVK7usp89zn6njAN.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ujvqcVK7usp89zn6njAN.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ujvqcVK7usp89zn6njAN.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ujvqcVK7usp89zn6njAN.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ujvqcVK7usp89zn6njAN.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ujvqcVK7usp89zn6njAN.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ujvqcVK7usp89zn6njAN.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ujvqcVK7usp89zn6njAN.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ujvqcVK7usp89zn6njAN.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ujvqcVK7usp89zn6njAN.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ujvqcVK7usp89zn6njAN.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ujvqcVK7usp89zn6njAN.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ujvqcVK7usp89zn6njAN.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ujvqcVK7usp89zn6njAN.jpg?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/ujvqcVK7usp89zn6njAN.jpg?auto=format&w=1600 1600w" width="800" />
</figure>
<h3 id="defined-container-dimensions">Defined container dimensions <a class="w-headline-link" href="https://web.dev/economic-times-cwv/#defined-container-dimensions">#</a></h3>
<p>We specified explicit dimensions for all images and containers so that the browser engine doesn't need to calculate the DOM elements' width and height once they are available. This avoided unnecessary layout shifts and extra painting work.</p>
<h3 id="summarizing-cls-goals-and-achievements">Summarizing CLS goals and achievements <a class="w-headline-link" href="https://web.dev/economic-times-cwv/#summarizing-cls-goals-and-achievements">#</a></h3>
<p>Before beginning the optimization project, the team benchmarked their CLS score at <strong>0.25</strong>. We were able to reduce it significantly by <strong>90%</strong> to <strong>0.09</strong>.</p>
<figure>
  <img alt="CLS distributions shown in the Chrome User Experience Report. 76% of CLS values are &#x27;Good&#x27;, 15% are &#x27;Fair&#x27;, and 9% are &#x27;Poor&#x27;. The 75th percentile of user experiences on The Economic Times website overall experienced a CLS of 0.09." decoding="async" height="160" loading="lazy" sizes="(min-width: 694px) 694px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/PvfZtgjSaShtmRASx5Mw.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/PvfZtgjSaShtmRASx5Mw.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/PvfZtgjSaShtmRASx5Mw.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/PvfZtgjSaShtmRASx5Mw.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/PvfZtgjSaShtmRASx5Mw.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/PvfZtgjSaShtmRASx5Mw.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/PvfZtgjSaShtmRASx5Mw.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/PvfZtgjSaShtmRASx5Mw.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/PvfZtgjSaShtmRASx5Mw.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/PvfZtgjSaShtmRASx5Mw.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/PvfZtgjSaShtmRASx5Mw.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/PvfZtgjSaShtmRASx5Mw.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/PvfZtgjSaShtmRASx5Mw.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/PvfZtgjSaShtmRASx5Mw.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/PvfZtgjSaShtmRASx5Mw.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/PvfZtgjSaShtmRASx5Mw.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/PvfZtgjSaShtmRASx5Mw.png?auto=format&w=1388 1388w" width="694" />
</figure>
<h2 id="what-is-first-input-delay-fid-and-how-did-we-improve-it">What is First Input Delay (FID) and how did we improve it? <a class="w-headline-link" href="https://web.dev/economic-times-cwv/#what-is-first-input-delay-fid-and-how-did-we-improve-it">#</a></h2>
<p><a href="https://web.dev/fid/">First Input Delay</a> is the metric that tracks a website's responsiveness to user input. The primary cause of a poor FID score is heavy JavaScript work that keeps the browser's main thread busy, which can delay user interactions. We improved FID in several ways.</p>
<h3 id="break-up-long-javascript-tasks">Break up long JavaScript tasks <a class="w-headline-link" href="https://web.dev/economic-times-cwv/#break-up-long-javascript-tasks">#</a></h3>
<p>Long tasks are tasks that are 50 milliseconds or longer. Long tasks occupy the browser's main thread and prevent it from responding to user input. We broke up long running tasks into smaller tasks where possible on user request, which helped to reduce the Javascript bloat.</p>
<figure>
  <img alt="CPU time broken down by activity type in the performance panel of Chrome&#x27;s DevTools. 143 milliseconds was spent scheduling the loading of resources. 4553 milliseconds was spent on JavaScript. 961 milliseconds was spent on rendering work. 191 milliseconds was spent on painting operations. 1488 milliseconds on system tasks, with 3877 milliseconds of idle time. The total timeframe was 11212 milliseconds." decoding="async" height="501" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/rfFVGpifiTIaiMIFpTOv.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/rfFVGpifiTIaiMIFpTOv.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/rfFVGpifiTIaiMIFpTOv.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/rfFVGpifiTIaiMIFpTOv.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/rfFVGpifiTIaiMIFpTOv.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/rfFVGpifiTIaiMIFpTOv.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/rfFVGpifiTIaiMIFpTOv.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/rfFVGpifiTIaiMIFpTOv.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/rfFVGpifiTIaiMIFpTOv.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/rfFVGpifiTIaiMIFpTOv.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/rfFVGpifiTIaiMIFpTOv.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/rfFVGpifiTIaiMIFpTOv.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/rfFVGpifiTIaiMIFpTOv.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/rfFVGpifiTIaiMIFpTOv.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/rfFVGpifiTIaiMIFpTOv.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/rfFVGpifiTIaiMIFpTOv.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/rfFVGpifiTIaiMIFpTOv.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/rfFVGpifiTIaiMIFpTOv.png?auto=format&w=1600 1600w" width="800" />
</figure>
<h3 id="defer-unused-javascript">Defer unused JavaScript <a class="w-headline-link" href="https://web.dev/economic-times-cwv/#defer-unused-javascript">#</a></h3>
<p>We prioritized page content over third-party scripts such as analytics to keep the page more responsive. However, there are certain limitations on some libraries since they need to be loaded in the document <code>&lt;head&gt;</code> in order to accurately track the user journey.</p>
<h3 id="reduce-polyfills">Reduce polyfills <a class="w-headline-link" href="https://web.dev/economic-times-cwv/#reduce-polyfills">#</a></h3>
<p>We reduced our dependency on certain polyfills and libraries, since browsers provide support for modern APIs, and less users are using legacy browsers, such as Internet Explorer.</p>
<h3 id="lazy-load-ads">Lazy load ads <a class="w-headline-link" href="https://web.dev/economic-times-cwv/#lazy-load-ads">#</a></h3>
<p>Lazily loading below-the-fold ads helped cut down main thread blocking time and thereby improved FID.</p>
<h3 id="summarizing-fid-goals-and-achievements">Summarizing FID goals and achievements <a class="w-headline-link" href="https://web.dev/economic-times-cwv/#summarizing-fid-goals-and-achievements">#</a></h3>
<p>From routine experiments, we were able to reduce our FID from 200 ms to under 50 ms today.</p>
<figure>
  <img alt="FID distributions shown in the Chrome User Experience Report. 86% of CLS values are &#x27;Good&#x27;, 10% are &#x27;Fair&#x27;, and 4% are &#x27;Poor&#x27;. The 75th percentile of user experiences on The Economic Times website overall experienced a FID of 44 milliseconds." decoding="async" height="190" loading="lazy" sizes="(min-width: 720px) 720px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/bqZP6cbsJhryp5E17dPV.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/bqZP6cbsJhryp5E17dPV.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/bqZP6cbsJhryp5E17dPV.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/bqZP6cbsJhryp5E17dPV.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/bqZP6cbsJhryp5E17dPV.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/bqZP6cbsJhryp5E17dPV.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/bqZP6cbsJhryp5E17dPV.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/bqZP6cbsJhryp5E17dPV.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/bqZP6cbsJhryp5E17dPV.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/bqZP6cbsJhryp5E17dPV.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/bqZP6cbsJhryp5E17dPV.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/bqZP6cbsJhryp5E17dPV.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/bqZP6cbsJhryp5E17dPV.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/bqZP6cbsJhryp5E17dPV.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/bqZP6cbsJhryp5E17dPV.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/bqZP6cbsJhryp5E17dPV.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/bqZP6cbsJhryp5E17dPV.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/bqZP6cbsJhryp5E17dPV.png?auto=format&w=1440 1440w" width="720" />
</figure>
<h2 id="preventing-regressions">Preventing regressions <a class="w-headline-link" href="https://web.dev/economic-times-cwv/#preventing-regressions">#</a></h2>
<p>The Economics Times plans to introduce automated performance checks in production to avoid page performance regressions. They plan to evaluate Lighthouse-CI to automate lab tests, which can prevent regressions on their production branch.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[How Terra improved user engagement thanks to Dark Mode]]></title>
<description><![CDATA[Terra, one of Brazil's largest media companies with 75 million monthly users, reduced the bounce rate by 60% and increased the pages read per session by 170% on desktop for users that prefer dark mode by providing a custom dark theme.
In this article, we'll analyze Terra's journey from identifyin...]]></description>
<link>https://tsecurity.de/de/1725691/it+betriebssysteme/web+tipps/how+terra+improved+user+engagement+thanks+to+dark+mode/</link>
<pubDate>Thu, 08 Dec 2022 19:45:05 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Terra, one of Brazil's largest media companies with 75 million monthly users, reduced the bounce rate by 60% and increased the pages read per session by 170% on desktop for users that prefer dark mode by providing a custom dark theme.</p>
<p>In this article, we'll analyze Terra's journey from identifying the size of the &quot;dark mode&quot; cohort, to applying a custom dark theme, and finally measuring the impact of this implementation on their main KPIs.</p>
<ul class="stats">
  <div class="stats__item">
    <p class="stats__figure">60<sub>%</sub></p>
    <p>Reduction in Bounce Rates</p>
  </div>
  <div class="stats__item">
    <p class="stats__figure">170<sub>%</sub></p>
    <p>More pages per session</p>
  </div>
</ul>
<h2 id="what-is-dark-mode">What is dark mode? <a class="w-headline-link" href="https://web.dev/terra-dark-mode/#what-is-dark-mode">#</a></h2>
<p>Historically user interfaces in devices are displayed in &quot;light mode&quot;, which usually means displaying black text on top of light interfaces. The alternative is &quot;dark mode&quot;, with light text on a dark background, such as gray or black.</p>
<p>Dark Mode has <a href="https://web.dev/prefers-color-scheme/#why-dark-mode">benefits</a> for user experience. Some people prefer it for aesthetic or accessibility reasons. It has  other advantages, such as preserving battery life in devices. Users can express that they prefer dark mode via a setting in their devices, <a href="https://web.dev/prefers-color-scheme/#activating-dark-mode-in-the-operating-system">which depends on the operating system</a>. For example, the following screenshot shows what the <strong>Dark Theme</strong> configuration option looks like in devices that run <strong>Android Q</strong>:</p>
<figure>
  <img alt="Android Q dark mode settings." decoding="async" height="250" loading="lazy" sizes="(min-width: 218px) 218px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/admin/Yh6SEoWDK1SbqcGjlL6d.png?auto=format" srcset="https://web-dev.imgix.net/image/admin/Yh6SEoWDK1SbqcGjlL6d.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/admin/Yh6SEoWDK1SbqcGjlL6d.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/admin/Yh6SEoWDK1SbqcGjlL6d.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/admin/Yh6SEoWDK1SbqcGjlL6d.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/admin/Yh6SEoWDK1SbqcGjlL6d.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/admin/Yh6SEoWDK1SbqcGjlL6d.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/admin/Yh6SEoWDK1SbqcGjlL6d.png?auto=format&w=436 436w" style="max-width: 218px; margin: 0 auto;" width="218" />
  <figcaption>Android&nbsp;Q dark theme settings.</figcaption>
</figure>
<p>To offer a better experience to users who prefer &quot;dark mode&quot;, you can use the <a href="https://developer.mozilla.org/docs/Web/CSS/@media/prefers-color-scheme" rel="noopener"><code>prefers-color-scheme</code></a> media query, with a value of <code>light</code> or <code>dark</code>. This media query reflects the user's choice in their device. You can then load a <a href="https://web.dev/prefers-color-scheme/#dark-mode-in-practice">custom dark theme</a> for those that prefer dark. For example, by loading a &quot;dark&quot; CSS file, and changing values such as font and background colors. The following code shows an example of that:</p>
<div><pre class="language-css"><code class="language-css"><span class="token atrule"><span class="token rule">@media</span> <span class="token punctuation">(</span><span class="token property">prefers-color-scheme</span><span class="token punctuation">:</span> dark<span class="token punctuation">)</span></span> <span class="token punctuation">{</span><br />   // apply a dark theme<br /><span class="token punctuation">}</span><br /><br /><span class="token atrule"><span class="token rule">@media</span> <span class="token punctuation">(</span><span class="token property">prefers-color-scheme</span><span class="token punctuation">:</span> light<span class="token punctuation">)</span></span> <span class="token punctuation">{</span><br />  // apply a light theme<br /><span class="token punctuation">}</span></code></pre>
</div><div class="browser-compat">
      <span class="browser-compat__label">Browser support:</span>
      <span class="browser-compat__items"><span class="browser-compat__icon" data-browser="chrome">
          <span class="visually-hidden">chrome 76, Supported</span>
      </span>
      <span class="browser-compat__version" data-compat="yes">
        76
      </span>
      <span class="browser-compat__icon" data-browser="firefox">
          <span class="visually-hidden">firefox 67, Supported</span>
      </span>
      <span class="browser-compat__version" data-compat="yes">
        67
      </span>
      <span class="browser-compat__icon" data-browser="edge">
          <span class="visually-hidden">edge 79, Supported</span>
      </span>
      <span class="browser-compat__version" data-compat="yes">
        79
      </span>
      <span class="browser-compat__icon" data-browser="safari">
          <span class="visually-hidden">safari 12.1, Supported</span>
      </span>
      <span class="browser-compat__version" data-compat="yes">
        12.1
      </span>
      </span><span class="browser-compat__link">
        <a href="https://developer.mozilla.org/docs/Web/CSS/@media/prefers-color-scheme#browser_compatibility" target="_blank">
          Source
        </a>
      </span>
    </div>
<aside class="aside flow bg-state-info-bg color-state-info-text"><div class=" flow"> This article will only cover the technique of applying a custom dark theme, provided by the developer. Chrome 96 has introduced an <a href="https://developer.chrome.com/blog/auto-dark-theme/#sign-up-for-the-origin-trial">origin trial</a> for &quot;Auto Dark Themes&quot; on Android, for which the browser applies an automatically generated dark theme to light themed sites, when the user has opted into dark themes in the operating system, without requiring the developer to provide styles for it. For more information about &quot;Chrome Auto Dark Mode&quot;, check out <a href="https://developer.chrome.com/blog/auto-dark-theme/">this article</a>. </div></aside>
<h2 id="identifying-the-prefers-light-vs-dark-user-cohorts">Identifying the &quot;prefers light&quot; vs &quot;dark&quot; user cohorts <a class="w-headline-link" href="https://web.dev/terra-dark-mode/#identifying-the-prefers-light-vs-dark-user-cohorts">#</a></h2>
<p>At the time of writing (December 2021), <a href="https://chromestatus.com/features" rel="noopener">Chrome Platform Status</a> determines that approximately <a href="https://chromestatus.com/metrics/feature/timeline/popularity/3581" rel="noopener">22% of the web traffic</a> comes from users with the &quot;prefer dark&quot; setting.</p>
<p>This is aggregated data, so the real percentage of users who prefer dark that come to a site can vary. For that reason, to understand the size of this group it is advisable to run in house measurement.</p>
<p>The following code creates an analytics dimension, to measure the performance of users that prefer <code>light</code> vs. <code>dark</code>:</p>
<div><pre class="language-javascript"><code class="language-javascript"><span class="token keyword">function</span> <span class="token function">getColorScheme</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><br />    <span class="token keyword">let</span> colorScheme <span class="token operator">=</span> <span class="token string">'Unknown'</span><span class="token punctuation">;</span><br />    <span class="token keyword">if</span> <span class="token punctuation">(</span>window<span class="token punctuation">.</span>matchMedia<span class="token punctuation">)</span> <span class="token punctuation">{</span><br />        <span class="token keyword">if</span> <span class="token punctuation">(</span>window<span class="token punctuation">.</span><span class="token function">matchMedia</span><span class="token punctuation">(</span><span class="token string">'(prefers-color-scheme: dark)'</span><span class="token punctuation">)</span><span class="token punctuation">.</span>matches<span class="token punctuation">)</span> <span class="token punctuation">{</span><br />            colorScheme <span class="token operator">=</span> <span class="token string">'Dark'</span><span class="token punctuation">;</span><br />        <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>window<span class="token punctuation">.</span><span class="token function">matchMedia</span><span class="token punctuation">(</span><span class="token string">'(prefers-color-scheme: light)'</span><span class="token punctuation">)</span><span class="token punctuation">.</span>matches<span class="token punctuation">)</span> <span class="token punctuation">{</span><br />            colorScheme <span class="token operator">=</span> <span class="token string">'Light'</span><span class="token punctuation">;</span><br />        <span class="token punctuation">}</span><br />    <span class="token punctuation">}</span><br />    <span class="token keyword">return</span> colorScheme<span class="token punctuation">;</span><br /><span class="token punctuation">}</span><br /><br />window<span class="token punctuation">.</span>ga<span class="token operator">=</span>window<span class="token punctuation">.</span>ga<span class="token operator">||</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token punctuation">(</span>ga<span class="token punctuation">.</span>q<span class="token operator">=</span>ga<span class="token punctuation">.</span>q<span class="token operator">||</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span>arguments<span class="token punctuation">)</span><span class="token punctuation">}</span><span class="token punctuation">;</span><br />ga<span class="token punctuation">.</span>l<span class="token operator">=</span><span class="token operator">+</span><span class="token keyword">new</span> <span class="token class-name">Date</span><span class="token punctuation">;</span> <span class="token function">ga</span><span class="token punctuation">(</span><span class="token string">'create'</span><span class="token punctuation">,</span> <span class="token string">'UA-ID'</span><span class="token punctuation">,</span> <span class="token string">'auto'</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br /><span class="token function">ga</span><span class="token punctuation">(</span><span class="token string">'set'</span><span class="token punctuation">,</span> <span class="token string">'color-scheme-preference'</span><span class="token punctuation">,</span> <span class="token function">getColorScheme</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br /><span class="token function">ga</span><span class="token punctuation">(</span><span class="token string">'send'</span><span class="token punctuation">,</span> <span class="token string">'pageview'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
</div><p>Terra implemented this code in their site and compared the behavior of both groups in mobile (Android) and desktop (Windows) devices. At that moment Terra wasn't providing a custom dark theme, so the goals of this experiment were:</p>
<ul>
<li>Determining the size of the group of users who prefer dark.</li>
<li>Identifying patterns: for example, do users that prefer dark leave the site more quickly compared to those that prefer light?</li>
</ul>
<p>Knowing this can inform decisions, for example: if it's necessary to provide a custom dark theme.
These are the results Terra obtained after testing for 14 days:</p>
<h3 id="mobile-android">Mobile (Android) <a class="w-headline-link" href="https://web.dev/terra-dark-mode/#mobile-android">#</a></h3>
<p>In the case of mobile (Android) the numbers for bounce rate and pages per session didn't show big differences between the users that prefer &quot;light&quot;, compared to those that prefer &quot;dark&quot;:</p>
<div class="table-wrapper scrollbar">
  <table>
    <thead>
      <tr>
        <th>Display Mode</th>
        <th>Bounce Rate</th>
        <th>Pages Per Session</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>Prefers Light</td>
        <td>25.84%</td>
        <td>3.96</td>
      </tr>
      <tr>
        <td>Prefers Dark</td>
        <td>26.10%</td>
        <td>3.75</td>
      </tr>
    </tbody>
  </table>
</div>
<h3 id="desktop-windows">Desktop (Windows) <a class="w-headline-link" href="https://web.dev/terra-dark-mode/#desktop-windows">#</a></h3>
<p>In the case of desktop (Windows), the group of users that preferred &quot;dark&quot; stayed much less on the site: they had almost <strong>twice the bounce rate and read a little more than half of the pages</strong> than those users that preferred &quot;light&quot;:</p>
<div class="table-wrapper scrollbar">
  <table>
    <thead>
      <tr>
        <th>Display Mode</th>
        <th>Bounce Rate</th>
        <th>Pages Per Session</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>Prefers Light</td>
        <td>13.20%</td>
        <td>7.42</td>
      </tr>
      <tr>
        <td>Prefers Dark</td>
        <td>24.12%</td>
        <td>4.68</td>
      </tr>
    </tbody>
  </table>
</div>
<p>Based on this data, Terra hypothesized that users who prefer &quot;dark&quot; stay less in desktop devices, due to the lack of support of a dark theme in their site.</p>
<p>As a next step Terra decided to work on a &quot;dark theme&quot; strategy to see if they could improve the engagement for the group of users that preferred dark.</p>
<h2 id="implementing-a-dark-theme">Implementing a dark theme <a class="w-headline-link" href="https://web.dev/terra-dark-mode/#implementing-a-dark-theme">#</a></h2>
<p>Most websites implement a dark theme by using the simple strategy shown previously of listening to user's configuration changes via the <a href="https://drafts.csswg.org/mediaqueries-5/#prefers-color-scheme" rel="noopener"><code>prefers-color-scheme</code></a> media query and changing styles based on that.</p>
<p>Terra decided to give more control to the user: when they detect that they have the &quot;prefer dark&quot; setting turned on in their devices (via the media query), they show them a prompt to ask them if they want to navigate in &quot;night mode&quot;. As long as the user doesn't deny the prompt (by clicking on the &quot;Ignore&quot; button), they honor the user's OS-setting, and apply a custom dark theme:</p>
<figure>
  <img alt="Screenshot of Terra&#x27;s light theme prompting the user to accept dark mode." decoding="async" height="146" loading="lazy" sizes="(min-width: 266px) 266px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/26V1DWN36MZr3mUo8ChSBlCpzp43/TRqfCAmBe025456JyX1b.png?auto=format" srcset="https://web-dev.imgix.net/image/26V1DWN36MZr3mUo8ChSBlCpzp43/TRqfCAmBe025456JyX1b.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/26V1DWN36MZr3mUo8ChSBlCpzp43/TRqfCAmBe025456JyX1b.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/26V1DWN36MZr3mUo8ChSBlCpzp43/TRqfCAmBe025456JyX1b.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/26V1DWN36MZr3mUo8ChSBlCpzp43/TRqfCAmBe025456JyX1b.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/26V1DWN36MZr3mUo8ChSBlCpzp43/TRqfCAmBe025456JyX1b.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/26V1DWN36MZr3mUo8ChSBlCpzp43/TRqfCAmBe025456JyX1b.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/26V1DWN36MZr3mUo8ChSBlCpzp43/TRqfCAmBe025456JyX1b.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/26V1DWN36MZr3mUo8ChSBlCpzp43/TRqfCAmBe025456JyX1b.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/26V1DWN36MZr3mUo8ChSBlCpzp43/TRqfCAmBe025456JyX1b.png?auto=format&w=532 532w" style="max-width: 266px; margin: 0 auto;" width="266" />
  <figcaption>Terra shows a prompt to the user asking if they want to navigate in dark mode after detecting that they prefer dark in their devices.</figcaption>
</figure>
<p>As a complement of this strategy they provide additional configuration options in the &quot;settings&quot; screen, where the user can decide if they explicitly prefer &quot;light&quot;, &quot;dark&quot;, or want to rely on the underlying device settings.</p>
<figure>
  <img alt="Screenshots of Terra&#x27;s configuration screen to opt in and out of dark mode." decoding="async" height="417" loading="lazy" sizes="(min-width: 480px) 480px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/26V1DWN36MZr3mUo8ChSBlCpzp43/B7g0uvq2QB0eWVjnuMAl.png?auto=format" srcset="https://web-dev.imgix.net/image/26V1DWN36MZr3mUo8ChSBlCpzp43/B7g0uvq2QB0eWVjnuMAl.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/26V1DWN36MZr3mUo8ChSBlCpzp43/B7g0uvq2QB0eWVjnuMAl.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/26V1DWN36MZr3mUo8ChSBlCpzp43/B7g0uvq2QB0eWVjnuMAl.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/26V1DWN36MZr3mUo8ChSBlCpzp43/B7g0uvq2QB0eWVjnuMAl.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/26V1DWN36MZr3mUo8ChSBlCpzp43/B7g0uvq2QB0eWVjnuMAl.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/26V1DWN36MZr3mUo8ChSBlCpzp43/B7g0uvq2QB0eWVjnuMAl.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/26V1DWN36MZr3mUo8ChSBlCpzp43/B7g0uvq2QB0eWVjnuMAl.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/26V1DWN36MZr3mUo8ChSBlCpzp43/B7g0uvq2QB0eWVjnuMAl.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/26V1DWN36MZr3mUo8ChSBlCpzp43/B7g0uvq2QB0eWVjnuMAl.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/26V1DWN36MZr3mUo8ChSBlCpzp43/B7g0uvq2QB0eWVjnuMAl.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/26V1DWN36MZr3mUo8ChSBlCpzp43/B7g0uvq2QB0eWVjnuMAl.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/26V1DWN36MZr3mUo8ChSBlCpzp43/B7g0uvq2QB0eWVjnuMAl.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/26V1DWN36MZr3mUo8ChSBlCpzp43/B7g0uvq2QB0eWVjnuMAl.png?auto=format&w=960 960w" style="max-width: 480px; margin: 0 auto;" width="480" />
  <figcaption>Terra's themes configurations allow users to choose between "Dark" and "Light" themes or rely on the device's settings.</figcaption>
</figure>
<p>This is how Terra's &quot;Night Mode&quot; looks like:</p>
<figure>
  <img alt="Screenshot of Terra&#x27;s dark theme." decoding="async" height="468" loading="lazy" sizes="(min-width: 286px) 286px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/26V1DWN36MZr3mUo8ChSBlCpzp43/QRW06FYeMghUI8obAQWC.png?auto=format" srcset="https://web-dev.imgix.net/image/26V1DWN36MZr3mUo8ChSBlCpzp43/QRW06FYeMghUI8obAQWC.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/26V1DWN36MZr3mUo8ChSBlCpzp43/QRW06FYeMghUI8obAQWC.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/26V1DWN36MZr3mUo8ChSBlCpzp43/QRW06FYeMghUI8obAQWC.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/26V1DWN36MZr3mUo8ChSBlCpzp43/QRW06FYeMghUI8obAQWC.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/26V1DWN36MZr3mUo8ChSBlCpzp43/QRW06FYeMghUI8obAQWC.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/26V1DWN36MZr3mUo8ChSBlCpzp43/QRW06FYeMghUI8obAQWC.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/26V1DWN36MZr3mUo8ChSBlCpzp43/QRW06FYeMghUI8obAQWC.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/26V1DWN36MZr3mUo8ChSBlCpzp43/QRW06FYeMghUI8obAQWC.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/26V1DWN36MZr3mUo8ChSBlCpzp43/QRW06FYeMghUI8obAQWC.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/26V1DWN36MZr3mUo8ChSBlCpzp43/QRW06FYeMghUI8obAQWC.png?auto=format&w=572 572w" style="max-width: 286px; margin: 0 auto;" width="286" />
  <figcaption>Terra's dark theme, "Night Mode".</figcaption>
</figure>
<aside class="aside flow bg-state-info-bg color-state-info-text"><div class=" flow"> We have used mobile screenshots for simplicity, but Terra has applied the same strategy across mobile and desktop devices. </div></aside>
<h2 id="measuring-the-impact-of-terras-dark-theme">Measuring the impact of Terra's dark theme <a class="w-headline-link" href="https://web.dev/terra-dark-mode/#measuring-the-impact-of-terras-dark-theme">#</a></h2>
<p>To measure the impact of the dark theme, Terra took the group of users that have the &quot;Prefer Dark&quot; setting turned on in their devices and compared engagement metrics when showing a &quot;Light&quot; vs. a &quot;DarK&quot; theme.
Here are the results for mobile (Android) and desktop (Windows):</p>
<h3 id="mobile-android-2">Mobile (Android) <a class="w-headline-link" href="https://web.dev/terra-dark-mode/#mobile-android-2">#</a></h3>
<p>While bounce rates remained similar, pages and sessions almost doubled (from 2.47 to 5.24) when users were exposed to a dark theme:</p>
<div class="table-wrapper scrollbar">
  <table>
    <thead>
      <tr>
        <th>Display Mode</th>
        <th>Bounce Rate</th>
        <th>Pages Per Session</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>Prefers Light</td>
        <td>26.91%</td>
        <td>2.47</td>
      </tr>
      <tr>
        <td>Prefers Dark</td>
        <td>23.91%</td>
        <td>5.24</td>
      </tr>
    </tbody>
  </table>
</div>
<ul class="stats">
  <div class="stats__item">
    <p class="stats__figure">2<sub>X</sub></p>
    <p>More pages per session</p>
  </div>
</ul>
<h3 id="desktop-windows-2">Desktop (Windows) <a class="w-headline-link" href="https://web.dev/terra-dark-mode/#desktop-windows-2">#</a></h3>
<p>Both metrics improved when showing a dark theme: bounce rates went from 27.25% to 10.82% and pages per session almost tripled (from 3.7 to 9.99).</p>
<div class="table-wrapper scrollbar">
  <table>
    <thead>
      <tr>
        <th>Display Mode</th>
        <th>Bounce Rate</th>
        <th>Pages Per Session</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>Prefers Light</td>
        <td>27.5%</td>
        <td>3.7</td>
      </tr>
      <tr>
        <td>Prefers Dark</td>
        <td>10.82%</td>
        <td>9.99</td>
      </tr>
    </tbody>
  </table>
</div>
<ul class="stats">
  <div class="stats__item">
    <p class="stats__figure">60<sub>%</sub></p>
    <p>Reduction in Bounce Rates</p>
  </div>
  <div class="stats__item">
    <p class="stats__figure">170<sub>%</sub></p>
    <p>More pages per session</p>
  </div>
</ul>
<p>Based on this data, Terra could confirm the benefits for the users from implementing a dark theme, and has decided to continue maintaining it as a core feature of the site.</p>
<h2 id="conclusion">Conclusion <a class="w-headline-link" href="https://web.dev/terra-dark-mode/#conclusion">#</a></h2>
<p>Dark Mode is a preference that users can turn on in their devices  to change the style of the screens into dark themes. This technique has reported benefits from the user experience and for different aspects of the user's devices such as saving  battery life.</p>
<p>In this article we saw how providing a custom dark theme improved engagement metrics for the group of Terra's users that have the preferred dark mode setting turned on in their devices.</p>
<p>For companies with the resources to implement an alternative dark theme this is the recommended approach. For those that don't have the time to invest in such a feature, Chrome is starting to roll out an <a href="https://developer.chrome.com/blog/auto-dark-theme/" rel="noopener">Auto Dark Mode feature</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[How QuintoAndar increased conversion rates and pages per session by improving page performance]]></title>
<description><![CDATA[QuintoAndar is a Brazilian proptech company whose products offer digital end-to-end solutions for real estate. This year, we carried out a project focused on improving the performance of a content hub in our app, and had encouraging results in increasing user traffic and conversion metrics.

 
  ...]]></description>
<link>https://tsecurity.de/de/1725692/it+betriebssysteme/web+tipps/how+quintoandar+increased+conversion+rates+and+pages+per+session+by+improving+page+performance/</link>
<pubDate>Thu, 08 Dec 2022 19:45:05 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>QuintoAndar is a Brazilian proptech company whose products offer digital end-to-end solutions for real estate. This year, we carried out a project focused on improving the performance of a content hub in our app, and had encouraging results in increasing user traffic and conversion metrics.</p>
<div class="stats">
 <div class="stats__item">
   <p class="stats__figure">46<sub>%</sub></p>
   <p>reduction in bounce rate</p>
 </div>
 <div class="stats__item">
   <p class="stats__figure">87<sub>%</sub></p>
   <p>increase in pages per session</p>
 </div>
 <div class="stats__item">
   <p class="stats__figure">5<sub>%</sub></p>
   <p>improvement in conversion during validation phase</p>
 </div>
</div>
<h2 id="challenges">Challenges <a class="w-headline-link" href="https://web.dev/quintoandar/#challenges">#</a></h2>
<p>Our app has a condominium content hub with over 40,000 pages, where users can get information about their properties, check photos of the common areas, read about the neighborhood, and find available listings for rent or sale. These pages are very important for QuintoAndar:</p>
<ul>
<li>They are an important source of <a href="https://en.wikipedia.org/wiki/Organic_search_results" rel="noopener">organic traffic</a>, with a steadily increasing number of users coming from search engine results.</li>
<li>They have high conversion rates in the medium to long-term compared to other pages.</li>
</ul>
<p>However, there were challenges when it came to the performance and user experience in these pages:</p>
<ul>
<li>Their performance as measured by <a href="https://web.dev/vitals/">Core Web Vitals</a> was not optimized, and there were known issues regarding slow page loads, slow responsiveness to user input, and layout instability.</li>
<li>Their <a href="https://en.wikipedia.org/wiki/Bounce_rate" rel="noopener">bounce rates</a> were high, even if we expected them to be higher than in other parts of the app.</li>
<li>The <a href="https://developers.google.com/search/blog/2020/11/timing-for-page-experience" rel="noopener">page experience update in Google Search</a>—which, at that time, was not yet released—would include Core Web Vitals into the ranking algorithm, which meant page performance could affect how search results were going to be displayed.</li>
</ul>
<p>At the same time, we identified some developer experience opportunities that could unlock gains in other projects across the company:</p>
<ul>
<li>Our server-side rendering logic—which renders all high-traffic pages, including condominium pages—was created in-house, and became too complex to maintain and onboard new hires.</li>
<li>Essential features to achieve good app performance, such as <a href="https://developer.mozilla.org/docs/Glossary/Code_splitting" rel="noopener">code splitting</a>, also required a custom setup plus manual work from the developers.</li>
<li>QuintoAndar has over 30 <a href="https://reactjs.org/" rel="noopener">React</a> web applications. Delivering updates to these applications and maintaining them in accordance to best practices is an arduous task.</li>
</ul>
<h2 id="approach">Approach <a class="w-headline-link" href="https://web.dev/quintoandar/#approach">#</a></h2>
<p>We began a performance optimization project of the condominium content hub to improve its user experience, as these improvements could lead to conversion gains, better SEO, and better usability. This initiative was also a fitting opportunity to improve the developer experience as well.</p>
<h3 id="migrating-to-nextjs">Migrating to Next.js <a class="w-headline-link" href="https://web.dev/quintoandar/#migrating-to-nextjs">#</a></h3>
<p>The new version of the condominium page was implemented with <a href="http://nextjs.org/" rel="noopener">Next.js</a>. Being largely independent from other parts of the app, the condominium content hub seemed like a good candidate for trying out a new framework. We would be able to understand the magnitude of migration efforts and evaluate how its features could help without affecting the other React apps in QuintoAndar.</p>
<p>A hard requirement was to ensure pages remained crawlable by search engines. Next.js meets this requirement by supporting server-side rendering out-of-the-box, and removes the need for a custom setup. The documentation makes it much easier to share knowledge on how to do tasks such as <a href="https://nextjs.org/docs/basic-features/data-fetching" rel="noopener">data fetching</a> on the server and onboard new developers. Server-side rendering is also known to <a href="https://developers.google.com/web/updates/2019/02/rendering-on-the-web#server-rendering" rel="noopener">improve performance</a> metrics such as <a href="https://web.dev/fcp/">First Contentful Paint</a> (FCP).</p>
<p>The framework provides other performance-friendly features such as automatic <a href="https://web.dev/reduce-javascript-payloads-with-code-splitting/">code splitting</a> and <a href="https://web.dev/link-prefetch/">prefetching</a>. Even though the existing structure already provided such features, the additional work required from developers stalled their adoption. For example, code splitting at page or component-level had to be done manually.</p>
<h3 id="optimizing-javascript-resources">Optimizing JavaScript resources <a class="w-headline-link" href="https://web.dev/quintoandar/#optimizing-javascript-resources">#</a></h3>
<p>The first step was to <a href="https://web.dev/remove-unused-code/">remove unused code</a>. We looked at the <a href="https://github.com/webpack-contrib/webpack-bundle-analyzer" rel="noopener">Webpack Bundle Analyzer</a> reports, which shows the contents of each JS bundle, and carefully reviewed all third-party scripts. As a result, we were able to clean up some tracking libraries that were not used in this specific page.</p>
<p>Our team went further and evaluated the performance cost of existing features. For instance, the &quot;like&quot; button required quite a lot of JS to work. However, in the condominium page, less than 0.5% of the users interacted with the button, which is available and used more frequently in other parts of our app. After a discussion involving both Engineering and Product, we decided to remove this feature.</p>
<figure>
  <video autoplay="" controls="" loop="" muted="" playsinline="">      <source src="https://storage.googleapis.com/web-dev-uploads/video/jL3OLOhcWUQDnR4XjewLBx4e3PC3/2uEL2YxbuGGlmJDlvW9F.mp4" type="video/mp4" />    </video>
  <figcaption>
    An animation showing the “like” button feature. There is a card about an apartment available for rent. In the bottom right corner of the card, there is a grey heart-shaped button that turns blue when clicked.
  </figcaption>
</figure>
<p>Other JS optimizations were already in place, such as <a href="https://web.dev/reduce-network-payloads-using-text-compression/#static-compression">static compression with Brotli</a>, which was done at build time using <a href="https://github.com/mynameiswhm/brotli-webpack-plugin" rel="noopener"><code>BrotliWebpackPlugin</code></a>, and was also applied to other types of static resources. At first, we were relying on the compression provided by the CDN, and Brotli reduced JS size by 18% compared to gzip. But then, we switched to Brotli compression at build time, and were able to achieve a 24% reduction.</p>
<h3 id="optimizing-image-resources">Optimizing image resources <a class="w-headline-link" href="https://web.dev/quintoandar/#optimizing-image-resources">#</a></h3>
<p>There is a hero image occupying most of the area above the fold in the mobile version. It also happens to be the <a href="https://web.dev/lcp/">Largest Contentful Paint</a> (LCP) of the page.</p>
<figure>
  <img alt="The condominium page for Edifício Copan (São Paulo, Brazil). A photo taken from the ground level shows the curves of the building structure." decoding="async" height="640" loading="lazy" sizes="(min-width: 360px) 360px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/W7koRinBm3QXErIzwGP8.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/W7koRinBm3QXErIzwGP8.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/W7koRinBm3QXErIzwGP8.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/W7koRinBm3QXErIzwGP8.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/W7koRinBm3QXErIzwGP8.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/W7koRinBm3QXErIzwGP8.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/W7koRinBm3QXErIzwGP8.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/W7koRinBm3QXErIzwGP8.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/W7koRinBm3QXErIzwGP8.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/W7koRinBm3QXErIzwGP8.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/W7koRinBm3QXErIzwGP8.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/W7koRinBm3QXErIzwGP8.png?auto=format&w=720 720w" width="360" />
  <figcaption>
    The hero image of a condominium page.
  </figcaption>
</figure>
<p>Previously, all images already had <code>srcset</code> and <code>sizes</code> attributes to <a href="https://web.dev/serve-responsive-images/">serve responsive images</a>. We also used <a href="https://github.com/thumbor/thumbor" rel="noopener">Thumbor</a> to resize images on-demand and configured our CDN to cache them efficiently.</p>
<p>Modern mobile devices have displays with very high pixel density, meaning the browser would render 3x or 4x versions of the image, if available. As resolution increases, it gets harder for the human eye to perceive the differences, but file sizes will increase regardless. <a href="https://blog.twitter.com/engineering/en_us/topics/infrastructure/2019/capping-image-fidelity-on-ultra-high-resolution-devices" rel="noopener">Capping the maximum image resolution</a> improved image size without compromising the user experience. We limited the hero image to serve its 2x version at most, which is approximately 35% smaller than the 3x version and 50% smaller than the 4x one.</p>
<p>To finish, we used a <a href="https://web.dev/preload-critical-assets/">preloading</a> strategy to download and display it as soon as possible, looking forward to improving the LCP metric.</p>
<div><pre class="language-html"><code class="language-html"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>link</span> <span class="token attr-name">rel</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>preload<span class="token punctuation">"</span></span> <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>/img/450x450/892847321-143.0038687080606IMG20180420WA0037.jpg<span class="token punctuation">"</span></span> <span class="token attr-name">as</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>image<span class="token punctuation">"</span></span><span class="token punctuation">></span></span></code></pre>
</div><p>The <a href="https://nextjs.org/docs/basic-features/image-optimization" rel="noopener">Next.js built-in image component</a> includes many of these optimizations such as responsive resizing and prioritized loading. During this project, we did not migrate the existing images to use this component, but we are planning to adopt it in new features.</p>
<h3 id="reducing-layout-shift">Reducing layout shift <a class="w-headline-link" href="https://web.dev/quintoandar/#reducing-layout-shift">#</a></h3>
<p>The condominium page had a few issues with <a href="https://web.dev/cls/">Cumulative Layout Shift</a> (CLS). The elements responsible for the layout shifts were rendered only in the client—for instance, hydrating server-side markup with client-rendered components, or images without defined <code>width</code> and <code>height</code> attributes.</p>
<p>To solve these problems, we set exact dimensions for these elements when possible, or estimated values with <code>min-height</code>. There are more options, such as using the <a href="https://developer.mozilla.org/docs/Web/CSS/aspect-ratio" rel="noopener"><code>aspect-ratio</code> CSS property</a>. We also created placeholders to prevent dynamically rendered components from causing layout shifts.</p>
<figure>
  <img alt="An image showing an urban area in Google Maps with a red marker in the center." decoding="async" height="174" loading="lazy" sizes="(min-width: 397px) 397px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/VqFwUiJOtNmyNc14xljP.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/VqFwUiJOtNmyNc14xljP.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/VqFwUiJOtNmyNc14xljP.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/VqFwUiJOtNmyNc14xljP.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/VqFwUiJOtNmyNc14xljP.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/VqFwUiJOtNmyNc14xljP.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/VqFwUiJOtNmyNc14xljP.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/VqFwUiJOtNmyNc14xljP.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/VqFwUiJOtNmyNc14xljP.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/VqFwUiJOtNmyNc14xljP.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/VqFwUiJOtNmyNc14xljP.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/VqFwUiJOtNmyNc14xljP.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/VqFwUiJOtNmyNc14xljP.png?auto=format&w=794 794w" width="397" />
  <figcaption>
    Defining dimensions for elements such as the map image reduced the CLS.
  </figcaption>
</figure>
<h3 id="progressively-rolling-out-changes">Progressively rolling out changes <a class="w-headline-link" href="https://web.dev/quintoandar/#progressively-rolling-out-changes">#</a></h3>
<p>Our team wanted to validate that the optimized version of the condominium hub page to make sure the user experience would be better. To achieve this, we adopted a progressive rollout strategy:</p>
<ol>
<li>In the first phase, the new version was published for a few hand-picked URLs, so only a few hundreds of users per day would see them;</li>
<li>In the second phase, it was published for more pages, accounting to a few thousand users per day;</li>
<li>In the third and final phase, it was published for all pages, and the roll-out was completed for all users.</li>
</ol>
<p>During this period, the engineering team continuously measured page performance in production and kept working on improvements. Additionally, the team compared business metrics between the new and previous versions. The results in this validation period were promising.</p>
<h2 id="results">Results <a class="w-headline-link" href="https://web.dev/quintoandar/#results">#</a></h2>
<p>The team used <a href="https://speedcurve.com/" rel="noopener">SpeedCurve</a> to continuously run <a href="https://web.dev/user-centric-performance-metrics/#how-metrics-are-measured">lab tests</a> against the condominium page. These are the results for the mobile version:</p>
<div class="table-wrapper">
  <table>
    <thead>
      <tr>
        <th>Lab metric</th>
        <th>Before</th>
        <th>After</th>
        <th>Difference</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>Largest Contentful Paint (LCP)</td>
        <td>2.41 seconds</td>
        <td>1.48 seconds</td>
        <td>-39%</td>
      </tr>
      <tr>
        <td>Time to Interactive (TTI)</td>
        <td>12.16 seconds</td>
        <td>7.48 seconds</td>
        <td>-39%</td>
      </tr>
      <tr>
        <td>Total Blocking Time (TBT)</td>
        <td>1124 milliseconds</td>
        <td>1056 milliseconds</td>
        <td>-4%</td>
      </tr>
      <tr>
        <td>Cumulative Layout Shift (CLS)</td>
        <td>0.0402</td>
        <td>0.0093</td>
        <td>-77%</td>
      </tr>
    </tbody>
    <caption>
      Lab metrics results collected with SpeedCurve.
    </caption>
  </table>
</div>
<p>We also wanted to check the impact on our real users. Using field data collected with <a href="https://www.instana.com/website-end-user-monitoring/" rel="noopener">Instana Website Monitoring</a>, we looked at the 1-month period before and after the roll-out. Comparing the 75th percentile for mobile users, we found that LCP decreased by 26%, and FID decreased by 72%.</p>
<figure>
  <img alt="A line graph with LCP values comparing the new and previous versions during the current and past month. The curve for the new version floats between 2 and 4 seconds, staying below the curve for the previous version most of the time." decoding="async" height="495" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/IAVpmg7O1Moxk8qA7zcq.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/IAVpmg7O1Moxk8qA7zcq.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/IAVpmg7O1Moxk8qA7zcq.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/IAVpmg7O1Moxk8qA7zcq.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/IAVpmg7O1Moxk8qA7zcq.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/IAVpmg7O1Moxk8qA7zcq.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/IAVpmg7O1Moxk8qA7zcq.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/IAVpmg7O1Moxk8qA7zcq.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/IAVpmg7O1Moxk8qA7zcq.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/IAVpmg7O1Moxk8qA7zcq.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/IAVpmg7O1Moxk8qA7zcq.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/IAVpmg7O1Moxk8qA7zcq.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/IAVpmg7O1Moxk8qA7zcq.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/IAVpmg7O1Moxk8qA7zcq.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/IAVpmg7O1Moxk8qA7zcq.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/IAVpmg7O1Moxk8qA7zcq.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/IAVpmg7O1Moxk8qA7zcq.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/IAVpmg7O1Moxk8qA7zcq.png?auto=format&w=1600 1600w" width="800" />
</figure>
<figure>
  <img alt="A line graph with FID values comparing the new and previous versions during the current and past month. The curve for the new version stays below 100ms most of the time, while in the curve for the previous version there are a few spikes crossing 250ms." decoding="async" height="494" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/QWkHnGHi4YTdBR6q17sw.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/QWkHnGHi4YTdBR6q17sw.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/QWkHnGHi4YTdBR6q17sw.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/QWkHnGHi4YTdBR6q17sw.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/QWkHnGHi4YTdBR6q17sw.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/QWkHnGHi4YTdBR6q17sw.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/QWkHnGHi4YTdBR6q17sw.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/QWkHnGHi4YTdBR6q17sw.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/QWkHnGHi4YTdBR6q17sw.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/QWkHnGHi4YTdBR6q17sw.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/QWkHnGHi4YTdBR6q17sw.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/QWkHnGHi4YTdBR6q17sw.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/QWkHnGHi4YTdBR6q17sw.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/QWkHnGHi4YTdBR6q17sw.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/QWkHnGHi4YTdBR6q17sw.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/QWkHnGHi4YTdBR6q17sw.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/QWkHnGHi4YTdBR6q17sw.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/QWkHnGHi4YTdBR6q17sw.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    Field metrics results collected with Instana.
  </figcaption>
</figure>
<p><a href="https://pagespeed.web.dev/" rel="noopener">PageSpeed Insights</a> provides a field data report for the last 28 days. <a href="https://www.quintoandar.com.br/condominio/ed-copan-centro-historico-de-sao-paulo-sao-paulo-ndv7sq7j2d" rel="noopener">The most accessed condominium page</a> alone had enough data to generate a report for mobile users. As of November 2021, all Core Web Vitals are in the &quot;good&quot; bucket.</p>
<figure>
  <img alt="A screenshot of the PageSpeed Insights report focusing on the Field Data section. All Core Web Vitals metrics (FCP, FID, LCP, CLS) are in the good bucket." decoding="async" height="483" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/83nulYFqSAAWNLLPHXut.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/83nulYFqSAAWNLLPHXut.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/83nulYFqSAAWNLLPHXut.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/83nulYFqSAAWNLLPHXut.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/83nulYFqSAAWNLLPHXut.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/83nulYFqSAAWNLLPHXut.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/83nulYFqSAAWNLLPHXut.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/83nulYFqSAAWNLLPHXut.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/83nulYFqSAAWNLLPHXut.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/83nulYFqSAAWNLLPHXut.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/83nulYFqSAAWNLLPHXut.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/83nulYFqSAAWNLLPHXut.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/83nulYFqSAAWNLLPHXut.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/83nulYFqSAAWNLLPHXut.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/83nulYFqSAAWNLLPHXut.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/83nulYFqSAAWNLLPHXut.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/83nulYFqSAAWNLLPHXut.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/83nulYFqSAAWNLLPHXut.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    PageSpeed Insights shows that mobile users are having a good experience in the most accessed condominium page.
  </figcaption>
</figure>
<p>During the progressive roll-out, we noticed a drop in bounce rates. By the time we had finished the release for all pages, <a href="https://analytics.google.com/" rel="noopener">Google Analytics</a> showed a 46% decrease in bounce rate, a 87% increase in pages per session, and a 49% increase in average session duration. The bounce rate reduction was even bigger for paid searches, reaching a 59% drop — a positive sign when it comes to the investments in <a href="https://en.wikipedia.org/wiki/Pay-per-click" rel="noopener">pay-per click</a> (PPC) ads.</p>
<figure>
  <img alt="A screenshot of a graph from Google Analytics. It compares the bounce rates between two distinct periods in March 2021. Starting from March 17th, there is a slight drop in the bounce rate. The drop is accentuated on March 24th." decoding="async" height="169" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/f31hvBafirHtDBlKINwI.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/f31hvBafirHtDBlKINwI.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/f31hvBafirHtDBlKINwI.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/f31hvBafirHtDBlKINwI.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/f31hvBafirHtDBlKINwI.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/f31hvBafirHtDBlKINwI.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/f31hvBafirHtDBlKINwI.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/f31hvBafirHtDBlKINwI.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/f31hvBafirHtDBlKINwI.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/f31hvBafirHtDBlKINwI.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/f31hvBafirHtDBlKINwI.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/f31hvBafirHtDBlKINwI.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/f31hvBafirHtDBlKINwI.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/f31hvBafirHtDBlKINwI.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/f31hvBafirHtDBlKINwI.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/f31hvBafirHtDBlKINwI.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/f31hvBafirHtDBlKINwI.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/f31hvBafirHtDBlKINwI.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    Google Analytics shows the bounce rate decreasing as we rolled-out the new version in more pages.
  </figcaption>
</figure>
<p>As for the impact in business metrics, we analyzed conversion rates for transactions like scheduling a tour and applying to rent or buy an estate. While improvements were still being rolled out, our team compared the conversion between the previous and new versions. In the same week, the group of pages with the new version showed a 5% conversion increase, while the other pages had a slight decrease in the same metric.</p>
<figure>
  <img alt="Two line graphs side-by-side, each one comparing the conversion between the current and previous week. The left one is for the previous version of the page, showing the conversion curve for the current week is a bit below the one for the previous week. The right one is for the new version, and the conversion curve for the current week is a bit above the one for the previous week." decoding="async" height="447" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8duPNi2huaphIWCU7DBb.png?auto=format" srcset="https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8duPNi2huaphIWCU7DBb.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8duPNi2huaphIWCU7DBb.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8duPNi2huaphIWCU7DBb.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8duPNi2huaphIWCU7DBb.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8duPNi2huaphIWCU7DBb.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8duPNi2huaphIWCU7DBb.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8duPNi2huaphIWCU7DBb.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8duPNi2huaphIWCU7DBb.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8duPNi2huaphIWCU7DBb.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8duPNi2huaphIWCU7DBb.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8duPNi2huaphIWCU7DBb.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8duPNi2huaphIWCU7DBb.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8duPNi2huaphIWCU7DBb.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8duPNi2huaphIWCU7DBb.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8duPNi2huaphIWCU7DBb.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8duPNi2huaphIWCU7DBb.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/jL3OLOhcWUQDnR4XjewLBx4e3PC3/8duPNi2huaphIWCU7DBb.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    In the same week, the conversion for the new version increased, while the previous version had a small decrease.
  </figcaption>
</figure>
<h2 id="conclusion">Conclusion <a class="w-headline-link" href="https://web.dev/quintoandar/#conclusion">#</a></h2>
<p>This project is the first part of a long-term migration effort from framework-less React to Next.js. The teams who worked on the condominium page since then gave positive feedback about the improved developer experience. Other teams who had to bootstrap new web apps have already done so with Next.js. We believe Next.js will simplify maintenance efforts and establish a common ground between different apps.</p>
<p>Overall, the condominium content hub has been continuously growing in terms of absolute number of users and transactions. In the long-term analysis, there are many factors contributing to this, like the expansion of QuintoAndar’s operation and SEO initiatives such as improved page indexing. During this project, we have seen that page performance is also one of these factors with great potential for positive conversion impact.</p>
<p><em>Special thanks to <a href="https://www.linkedin.com/in/pasrcarmo/" rel="noopener">Pedro Carmo</a>, Product Manager of the SEO team, for diving into the user data and creating all the conversion analysis seen in this case study.</em></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Kapwing: Powerful video editing for the web]]></title>
<description><![CDATA[Joshua is the Chief Technology Officer at Kapwing. 
Online video consumption has grown rapidly since the start of the pandemic.
People are spending more time consuming endless high-quality video on
platforms such as TikTok, Instagram, and YouTube. Creatives and small business
owners all over the ...]]></description>
<link>https://tsecurity.de/de/1725693/it+betriebssysteme/web+tipps/kapwing+powerful+video+editing+for+the+web/</link>
<pubDate>Thu, 08 Dec 2022 19:45:05 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<aside class="aside flow bg-state-info-bg color-state-info-text"><div class=" flow"> Joshua is the Chief Technology Officer at <a href="https://www.kapwing.com/">Kapwing</a>. </div></aside>
<p>Online video consumption has grown rapidly since the start of the pandemic.
People are spending more time consuming endless high-quality video on
platforms such as TikTok, Instagram, and YouTube. Creatives and small business
owners all over the world need quick and easy-to-use tools to make video
content.</p>
<p>Companies like Kapwing make it possible to create all this video content right
on the web, by using the latest in powerful APIs and performance tools.</p>
<div class="youtube">  <lite-youtube videoid="Df2U9-R-OJs" videoStartAt="974">  </lite-youtube></div>
<h2 id="about-kapwing">About Kapwing <a class="w-headline-link" href="https://web.dev/kapwing/#about-kapwing">#</a></h2>
<p>Kapwing is a web-based collaborative video editor designed mainly for casual
creatives like game-streamers, musicians, YouTube creators, and meme-rs. It's
also a go-to resource for business owners who need an easy way to produce
their own social content, such as Facebook and Instagram ads.</p>
<p>People discover Kapwing by searching for a specific task, for example &quot;how to
trim a video,&quot; &quot;add music to my video,&quot; or &quot;resize a video.&quot; They can do what
they searched for with just one click—without the added friction of
navigating to an app store and downloading an app. The web makes it simple for
people to search for precisely what task they need help with, and then do it.</p>
<p>After that first click, Kapwing users can do a whole lot more. They can
explore free templates, add new layers of free stock videos, insert
subtitles, transcribe videos, and upload background music.</p>
<h2 id="how-kapwing-brings-real-time-editing-and-collaboration-to-the-web">How Kapwing brings real-time editing and collaboration to the web <a class="w-headline-link" href="https://web.dev/kapwing/#how-kapwing-brings-real-time-editing-and-collaboration-to-the-web">#</a></h2>
<p>While the web provides unique advantages, it also presents distinct
challenges. Kapwing needs to deliver smooth and precise playback of complex,
multi-layered projects across a wide range of devices and network conditions.
To achieve this, we use a variety of web APIs to achieve our performance and
feature goals.</p>
<aside class="aside flow bg-state-info-bg color-state-info-text"><div class=" flow"> Kapwing's work was featured at Chrome Developer Summit in November 2021. <a href="https://www.youtube.com/watch?v=Df2U9-R-OJs&amp;t=974s">Watch the keynote</a> for an overview of Kapwing's work, and keep reading to take a closer look at the technical implementation. </div></aside>
<h3 id="indexeddb">IndexedDB <a class="w-headline-link" href="https://web.dev/kapwing/#indexeddb">#</a></h3>
<p>High performance editing requires that all of our users' content live on the
client, avoiding the network whenever possible. Unlike a streaming service,
where users typically access a piece of content once, our customers reuse
their assets frequently, days and even months after upload.</p>
<p><a href="https://web.dev/storage-for-the-web/">IndexedDB</a> allows us to provide persistent file
system-like storage to our users. The result is that over 90% of media
requests in the app are fulfilled locally. Integrating IndexedDB into our
system was very straightforward.</p>
<p>Here is some boiler plate initialization code that runs on app load:</p>
<div><pre class="language-js"><code class="language-js"><span class="token keyword">import</span> <span class="token punctuation">{</span>DBSchema<span class="token punctuation">,</span> openDB<span class="token punctuation">,</span> deleteDB<span class="token punctuation">,</span> IDBPDatabase<span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'idb'</span><span class="token punctuation">;</span><br /><br /><span class="token keyword">let</span> <span class="token literal-property property">openIdb</span><span class="token operator">:</span> Promise <span class="token operator">&lt;</span>IDBPDatabase<span class="token operator">&lt;</span>Schema<span class="token operator">>></span><span class="token punctuation">;</span><br /><br /><span class="token keyword">const</span> db <span class="token operator">=</span><br />  <span class="token punctuation">(</span><span class="token keyword">await</span> openDB<span class="token punctuation">)</span> <span class="token operator">&lt;</span><br />  Schema <span class="token operator">></span><br />  <span class="token punctuation">(</span><br />    <span class="token string">'kapwing'</span><span class="token punctuation">,</span><br />    version<span class="token punctuation">,</span> <span class="token punctuation">{</span><br />      <span class="token function">upgrade</span><span class="token punctuation">(</span><span class="token parameter">db<span class="token punctuation">,</span> oldVersion</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><br />        <span class="token keyword">if</span> <span class="token punctuation">(</span>oldVersion <span class="token operator">>=</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><br />          <span class="token comment">// assets store schema changed, need to recreate</span><br />          db<span class="token punctuation">.</span><span class="token function">deleteObjectStore</span><span class="token punctuation">(</span><span class="token string">'assets'</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />        <span class="token punctuation">}</span><br /><br />        db<span class="token punctuation">.</span><span class="token function">createObjectStore</span><span class="token punctuation">(</span><span class="token string">'assets'</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><br />          <span class="token literal-property property">keyPath</span><span class="token operator">:</span> <span class="token string">'mediaLibraryID'</span><br />        <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />      <span class="token punctuation">}</span><span class="token punctuation">,</span><br />      <span class="token keyword">async</span> <span class="token function">blocked</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><br />        <span class="token keyword">await</span> <span class="token function">deleteDB</span><span class="token punctuation">(</span><span class="token string">'kapwing'</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />      <span class="token punctuation">}</span><span class="token punctuation">,</span><br />      <span class="token keyword">async</span> <span class="token function">blocking</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><br />        <span class="token keyword">await</span> <span class="token function">deleteDB</span><span class="token punctuation">(</span><span class="token string">'kapwing'</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />      <span class="token punctuation">}</span><span class="token punctuation">,</span><br />    <span class="token punctuation">}</span><br />  <span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
</div><p>We pass a version and define an <code>upgrade</code> function. This is used for
initialization or to update our schema when necessary. We pass error-handling
callbacks, <code>blocked</code> and <code>blocking</code>, which we've found useful in
preventing issues for users with unstable systems.</p>
<p>Finally, note our definition of a primary key <code>keyPath</code>. In our case, this is a
unique ID we call <code>mediaLibraryID</code>. When a user adds a piece of media to our system, whether via our uploader or a third party extension, we add the media
to our media library with the following code:</p>
<div><pre class="language-js"><code class="language-js"><span class="token keyword">export</span> <span class="token keyword">async</span> <span class="token keyword">function</span> <span class="token function">addAsset</span><span class="token punctuation">(</span><span class="token parameter"><span class="token literal-property property">mediaLibraryID</span><span class="token operator">:</span> string<span class="token punctuation">,</span> <span class="token literal-property property">file</span><span class="token operator">:</span> File</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><br />  <span class="token keyword">return</span> <span class="token function">runWithAssetMutex</span><span class="token punctuation">(</span>mediaLibraryID<span class="token punctuation">,</span> <span class="token keyword">async</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span><br />    <span class="token keyword">const</span> assetAlreadyInStore <span class="token operator">=</span> <span class="token keyword">await</span> <span class="token punctuation">(</span><span class="token keyword">await</span> openIdb<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><br />      <span class="token string">'assets'</span><span class="token punctuation">,</span><br />      mediaLibraryID<br />    <span class="token punctuation">)</span><span class="token punctuation">;</span>    <br />    <span class="token keyword">if</span> <span class="token punctuation">(</span>assetAlreadyInStore<span class="token punctuation">)</span> <span class="token keyword">return</span><span class="token punctuation">;</span><br />        <br />    <span class="token keyword">const</span> <span class="token literal-property property">idbVideo</span><span class="token operator">:</span> IdbVideo <span class="token operator">=</span> <span class="token punctuation">{</span><br />      file<span class="token punctuation">,</span><br />      mediaLibraryID<span class="token punctuation">,</span><br />    <span class="token punctuation">}</span><span class="token punctuation">;</span><br /><br />    <span class="token keyword">await</span> <span class="token punctuation">(</span><span class="token keyword">await</span> openIdb<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span><span class="token string">'assets'</span><span class="token punctuation">,</span> idbVideo<span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br /><span class="token punctuation">}</span></code></pre>
</div><p><code>runWithAssetMutex</code> is our own internally defined function that serializes
IndexedDB access. This is required for any read-modify-write type operations,
as the IndexedDB API is asynchronous.</p>
<p>Now let's take a look at how we access files. Below is our <code>getAsset</code> function:</p>
<div><pre class="language-js"><code class="language-js"><span class="token keyword">export</span> <span class="token keyword">async</span> <span class="token keyword">function</span> <span class="token function">getAsset</span><span class="token punctuation">(</span><br />  <span class="token parameter"><span class="token literal-property property">mediaLibraryID</span><span class="token operator">:</span> string<span class="token punctuation">,</span><br />  <span class="token literal-property property">source</span><span class="token operator">:</span> LayerSource <span class="token operator">|</span> <span class="token keyword">null</span> <span class="token operator">|</span> <span class="token keyword">undefined</span><span class="token punctuation">,</span><br />  <span class="token literal-property property">location</span><span class="token operator">:</span> string</span><br /><span class="token punctuation">)</span><span class="token operator">:</span> Promise<span class="token operator">&lt;</span>IdbAsset <span class="token operator">|</span> <span class="token keyword">undefined</span><span class="token operator">></span> <span class="token punctuation">{</span><br />  <span class="token keyword">let</span> <span class="token literal-property property">asset</span><span class="token operator">:</span> IdbAsset <span class="token operator">|</span> <span class="token keyword">undefined</span><span class="token punctuation">;</span><br />  <span class="token keyword">const</span> <span class="token punctuation">{</span> idbCache <span class="token punctuation">}</span> <span class="token operator">=</span> window<span class="token punctuation">;</span><br />  <span class="token keyword">const</span> assetInCache <span class="token operator">=</span> idbCache<span class="token punctuation">[</span>mediaLibraryID<span class="token punctuation">]</span><span class="token punctuation">;</span><br /><br />  <span class="token keyword">if</span> <span class="token punctuation">(</span>assetInCache <span class="token operator">&amp;&amp;</span> assetInCache<span class="token punctuation">.</span>status <span class="token operator">===</span> <span class="token string">'complete'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><br />    asset <span class="token operator">=</span> assetInCache<span class="token punctuation">.</span>asset<span class="token punctuation">;</span><br />  <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>assetInCache <span class="token operator">&amp;&amp;</span> assetInCache<span class="token punctuation">.</span>status <span class="token operator">===</span> <span class="token string">'pending'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><br />    asset <span class="token operator">=</span> <span class="token keyword">await</span> <span class="token keyword">new</span> <span class="token class-name">Promise</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">res</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span><br />      assetInCache<span class="token punctuation">.</span>subscribers<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span>res<span class="token punctuation">)</span><span class="token punctuation">;</span><br />    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <br />  <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span><br />    idbCache<span class="token punctuation">[</span>mediaLibraryID<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">{</span> <span class="token literal-property property">subscribers</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token literal-property property">status</span><span class="token operator">:</span> <span class="token string">'pending'</span> <span class="token punctuation">}</span><span class="token punctuation">;</span><br />    asset <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token keyword">await</span> openIdb<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token string">'assets'</span><span class="token punctuation">,</span> mediaLibraryID<span class="token punctuation">)</span><span class="token punctuation">;</span><br /><br />    idbCache<span class="token punctuation">[</span>mediaLibraryID<span class="token punctuation">]</span><span class="token punctuation">.</span>asset <span class="token operator">=</span> asset<span class="token punctuation">;</span><br />    idbCache<span class="token punctuation">[</span>mediaLibraryID<span class="token punctuation">]</span><span class="token punctuation">.</span>subscribers<span class="token punctuation">.</span><span class="token function">forEach</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter"><span class="token literal-property property">res</span><span class="token operator">:</span> any</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span><br />      <span class="token function">res</span><span class="token punctuation">(</span>asset<span class="token punctuation">)</span><span class="token punctuation">;</span><br />    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br /><br />    <span class="token keyword">delete</span> <span class="token punctuation">(</span>idbCache<span class="token punctuation">[</span>mediaLibraryID<span class="token punctuation">]</span> <span class="token keyword">as</span> any<span class="token punctuation">)</span><span class="token punctuation">.</span>subscribers<span class="token punctuation">;</span><br /><br />    <span class="token keyword">if</span> <span class="token punctuation">(</span>asset<span class="token punctuation">)</span> <span class="token punctuation">{</span><br />      idbCache<span class="token punctuation">[</span>mediaLibraryID<span class="token punctuation">]</span><span class="token punctuation">.</span>status <span class="token operator">=</span> <span class="token string">'complete'</span><span class="token punctuation">;</span><br />    <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span><br />      idbCache<span class="token punctuation">[</span>mediaLibraryID<span class="token punctuation">]</span><span class="token punctuation">.</span>status <span class="token operator">=</span> <span class="token string">'failed'</span><span class="token punctuation">;</span><br />    <span class="token punctuation">}</span><br />  <span class="token punctuation">}</span> <br />  <span class="token keyword">return</span> asset<span class="token punctuation">;</span><br /><span class="token punctuation">}</span></code></pre>
</div><p>We have our own data structure, <code>idbCache</code>, that is used to minimize IndexedDB
accesses. While IndexedDB is fast, accessing local memory is faster. We
recommend this approach so long as you manage the size of the cache.</p>
<p>The <code>subscribers</code> array, which is used to prevent simultaneous access to
IndexedDB, would otherwise be common on load.</p>
<h3 id="web-audio-api">Web Audio API <a class="w-headline-link" href="https://web.dev/kapwing/#web-audio-api">#</a></h3>
<p>Audio visualization is incredibly important for video editing. To understand
why, take a look at a screenshot from the editor:</p>
<img alt="Kapwing&#x27;s editor has a menu for media, including several templates and custom elements, including some templates which are specific to certain platforms like LinkedIn; a timeline which separates video, audio, and animation; canvas editor with export quality options; a preview of the video; and more capabilities." decoding="async" height="397" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/6MqSyhNqFl23wN3GWKbP.png?auto=format" srcset="https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/6MqSyhNqFl23wN3GWKbP.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/6MqSyhNqFl23wN3GWKbP.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/6MqSyhNqFl23wN3GWKbP.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/6MqSyhNqFl23wN3GWKbP.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/6MqSyhNqFl23wN3GWKbP.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/6MqSyhNqFl23wN3GWKbP.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/6MqSyhNqFl23wN3GWKbP.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/6MqSyhNqFl23wN3GWKbP.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/6MqSyhNqFl23wN3GWKbP.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/6MqSyhNqFl23wN3GWKbP.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/6MqSyhNqFl23wN3GWKbP.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/6MqSyhNqFl23wN3GWKbP.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/6MqSyhNqFl23wN3GWKbP.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/6MqSyhNqFl23wN3GWKbP.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/6MqSyhNqFl23wN3GWKbP.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/6MqSyhNqFl23wN3GWKbP.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/VbsHyyQopiec0718rMq2kTE1hke2/6MqSyhNqFl23wN3GWKbP.png?auto=format&w=1600 1600w" width="800" />
<p>This is a YouTube style video, which is common in our app. The user doesn't
move very much throughout the clip, so the timelines visual thumbnails aren't
as useful for navigating between sections. On the other hand, the audio
<a href="https://en.wikipedia.org/wiki/Waveform" rel="noopener">waveform</a> shows peaks and valleys,
with the valleys typically corresponding to dead time in the recording. If you
zoom in on the timeline, you'd see more fine grained audio information with
valleys corresponding to stutters and pauses.</p>
<p>Our user research shows that creators are often guided by these waveforms as
they splice their content. The web audio API allows us to present this
information performantly and to update quickly on a zoom or pan of the
timeline.</p>
<p>The snippet below demonstrates how we do this:</p>
<div><pre class="language-js"><code class="language-js"><span class="token keyword">const</span> <span class="token function-variable function">getDownsampledBuffer</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token parameter"><span class="token literal-property property">idbAsset</span><span class="token operator">:</span> IdbAsset</span><span class="token punctuation">)</span> <span class="token operator">=></span><br />  decodeMutex<span class="token punctuation">.</span><span class="token function">runExclusive</span><span class="token punctuation">(</span><br />    <span class="token keyword">async</span> <span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">:</span> Promise<span class="token operator">&lt;</span>Float32Array<span class="token operator">></span> <span class="token operator">=></span> <span class="token punctuation">{</span><br />      <span class="token keyword">const</span> arrayBuffer <span class="token operator">=</span> <span class="token keyword">await</span> idbAsset<span class="token punctuation">.</span>file<span class="token punctuation">.</span><span class="token function">arrayBuffer</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />      <span class="token keyword">const</span> audioContext <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">AudioContext</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />      <span class="token keyword">const</span> audioBuffer <span class="token operator">=</span> <span class="token keyword">await</span> audioContext<span class="token punctuation">.</span><span class="token function">decodeAudioData</span><span class="token punctuation">(</span>arrayBuffer<span class="token punctuation">)</span><span class="token punctuation">;</span><br /><br />      <span class="token keyword">const</span> offline <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">OfflineAudioContext</span><span class="token punctuation">(</span><br />        audioBuffer<span class="token punctuation">.</span>numberOfChannels<span class="token punctuation">,</span><br />        audioBuffer<span class="token punctuation">.</span>duration <span class="token operator">*</span> <span class="token constant">MIN_BROWSER_SUPPORTED_SAMPLE_RATE</span><span class="token punctuation">,</span><br />        <span class="token constant">MIN_BROWSER_SUPPORTED_SAMPLE_RATE</span><br />      <span class="token punctuation">)</span><span class="token punctuation">;</span><br /><br />      <span class="token keyword">const</span> downsampleSource <span class="token operator">=</span> offline<span class="token punctuation">.</span><span class="token function">createBufferSource</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />      downsampleSource<span class="token punctuation">.</span>buffer <span class="token operator">=</span> audioBuffer<span class="token punctuation">;</span><br />      downsampleSource<span class="token punctuation">.</span><span class="token function">start</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />      downsampleSource<span class="token punctuation">.</span><span class="token function">connect</span><span class="token punctuation">(</span>offline<span class="token punctuation">.</span>destination<span class="token punctuation">)</span><span class="token punctuation">;</span><br /><br />      <span class="token keyword">const</span> downsampledBuffer22K <span class="token operator">=</span> <span class="token keyword">await</span> offline<span class="token punctuation">.</span><span class="token function">startRendering</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br /><br />      <span class="token keyword">const</span> downsampledBuffer22KData <span class="token operator">=</span> downsampledBuffer22K<span class="token punctuation">.</span><span class="token function">getChannelData</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br /><br />      <span class="token keyword">const</span> downsampledBuffer <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Float32Array</span><span class="token punctuation">(</span><br />        Math<span class="token punctuation">.</span><span class="token function">floor</span><span class="token punctuation">(</span><br />          downsampledBuffer22KData<span class="token punctuation">.</span>length <span class="token operator">/</span> <span class="token constant">POST_BROWSER_SAMPLE_INTERVAL</span><br />        <span class="token punctuation">)</span><br />      <span class="token punctuation">)</span><span class="token punctuation">;</span><br /><br />      <span class="token keyword">for</span> <span class="token punctuation">(</span><br />        <span class="token keyword">let</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">,</span> j <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span><br />        i <span class="token operator">&lt;</span> downsampledBuffer22KData<span class="token punctuation">.</span>length<span class="token punctuation">;</span><br />        i <span class="token operator">+=</span> <span class="token constant">POST_BROWSER_SAMPLE_INTERVAL</span><span class="token punctuation">,</span> j <span class="token operator">+=</span> <span class="token number">1</span><br />      <span class="token punctuation">)</span> <span class="token punctuation">{</span><br />        <span class="token keyword">let</span> sum <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span><br />        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">let</span> k <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> k <span class="token operator">&lt;</span> <span class="token constant">POST_BROWSER_SAMPLE_INTERVAL</span><span class="token punctuation">;</span> k <span class="token operator">+=</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><br />          sum <span class="token operator">+=</span> Math<span class="token punctuation">.</span><span class="token function">abs</span><span class="token punctuation">(</span>downsampledBuffer22KData<span class="token punctuation">[</span>i <span class="token operator">+</span> k<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />        <span class="token punctuation">}</span><br />        <span class="token keyword">const</span> avg <span class="token operator">=</span> sum <span class="token operator">/</span> <span class="token constant">POST_BROWSER_SAMPLE_INTERVAL</span><span class="token punctuation">;</span><br />        downsampledBuffer<span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token operator">=</span> avg<span class="token punctuation">;</span><br />      <span class="token punctuation">}</span><br /><br />      <span class="token keyword">return</span> downsampledBuffer<span class="token punctuation">;</span><br />    <span class="token punctuation">}</span> <br />  <span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
</div><p>We pass this helper the asset that is stored in IndexedDB. Upon completion we
will update the asset in IndexedDB as well as our own cache.</p>
<p>We gather data about the <code>audioBuffer</code> with the <code>AudioContext</code> constructor,
but because we aren't rendering to the device hardware we use the
<code>OfflineAudioContext</code> to render to an <code>ArrayBuffer</code> where we will store
amplitude data.</p>
<p>The API itself returns data at a sample rate much higher than needed for
effective visualization. That's why we manually downsample to 200 Hz, which we
found to be enough for useful, visually appealing waveforms.</p>
<h3 id="webcodecs">WebCodecs <a class="w-headline-link" href="https://web.dev/kapwing/#webcodecs">#</a></h3>
<p>For certain videos the track thumbnails are more useful for timeline
navigation than the waveforms. However, generating thumbnails is more resource
intensive than generating waveforms.</p>
<p>We can't cache every potential thumbnail on load, so quick decode on timeline
pan/zoom is critical to a performant and responsive application. The
bottleneck to achieving smooth frame drawing is decoding frames, which until
recently we did using an HTML5 video player. The performance of that approach
wasn't reliable and we often saw degraded app responsiveness during frame
rendering.</p>
<p>Recently we have moved over to <a href="https://web.dev/webcodecs/">WebCodecs</a>, which can be used in
web workers. This should enhance our ability to draw thumbnails for large
amounts of layers  without impacting main thread performance. While the web
worker implementation  is still in progress, we give an outline below of our
existing main thread implementation.</p>
<p>A video file contains multiple streams: video, audio, subtitles and so on that
are 'muxed' together. To use WebCodecs, we first need to have a demuxed video
stream. We demux mp4s with the mp4box library, as shown here:</p>
<div><pre class="language-js"><code class="language-js"><span class="token keyword">async</span> <span class="token keyword">function</span> <span class="token function">create</span><span class="token punctuation">(</span><span class="token parameter"><span class="token literal-property property">demuxer</span><span class="token operator">:</span> any</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><br />  demuxer<span class="token punctuation">.</span>file <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token keyword">await</span> MP4Box<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">createFile</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  demuxer<span class="token punctuation">.</span>file<span class="token punctuation">.</span><span class="token function-variable function">onReady</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token parameter"><span class="token literal-property property">info</span><span class="token operator">:</span> any</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span><br />    demuxer<span class="token punctuation">.</span>info <span class="token operator">=</span> info<span class="token punctuation">;</span><br />    demuxer<span class="token punctuation">.</span><span class="token function">_info_resolver</span><span class="token punctuation">(</span>info<span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token punctuation">}</span><span class="token punctuation">;</span><br />  demuxer<span class="token punctuation">.</span><span class="token function">loadMetadata</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br /><span class="token punctuation">}</span><br /><br /><span class="token keyword">const</span> <span class="token function-variable function">loadMetadata</span> <span class="token operator">=</span> <span class="token keyword">async</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span><br />  <span class="token keyword">let</span> offset <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span><br />  <span class="token keyword">const</span> asset <span class="token operator">=</span> <span class="token keyword">await</span> <span class="token function">getAsset</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">.</span>mediaLibraryId<span class="token punctuation">,</span> <span class="token keyword">null</span><span class="token punctuation">,</span> <span class="token keyword">this</span><span class="token punctuation">.</span>url<span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token keyword">const</span> maxFetchOffset <span class="token operator">=</span> asset<span class="token operator">?.</span>file<span class="token punctuation">.</span>size <span class="token operator">||</span> <span class="token number">0</span><span class="token punctuation">;</span><br /><br />  <span class="token keyword">const</span> end <span class="token operator">=</span> offset <span class="token operator">+</span> <span class="token constant">FETCH_SIZE</span><span class="token punctuation">;</span><br />  <span class="token keyword">const</span> response <span class="token operator">=</span> <span class="token keyword">await</span> <span class="token function">fetch</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">.</span>url<span class="token punctuation">,</span> <span class="token punctuation">{</span><br />    <span class="token literal-property property">headers</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">range</span><span class="token operator">:</span> <span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">bytes=</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>offset<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">-</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>end<span class="token interpolation-punctuation punctuation">}</span></span><span class="token template-punctuation string">`</span></span> <span class="token punctuation">}</span><span class="token punctuation">,</span><br />  <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token keyword">const</span> reader <span class="token operator">=</span> response<span class="token punctuation">.</span>body<span class="token punctuation">.</span><span class="token function">getReader</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br /><br />  <span class="token keyword">let</span> done<span class="token punctuation">,</span> value<span class="token punctuation">;</span><br />  <span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token operator">!</span>done<span class="token punctuation">)</span> <span class="token punctuation">{</span><br />    <span class="token punctuation">(</span><span class="token punctuation">{</span> done<span class="token punctuation">,</span> value <span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token keyword">await</span> reader<span class="token punctuation">.</span><span class="token function">read</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />    <span class="token keyword">if</span> <span class="token punctuation">(</span>done<span class="token punctuation">)</span> <span class="token punctuation">{</span><br />      <span class="token keyword">this</span><span class="token punctuation">.</span>file<span class="token punctuation">.</span><span class="token function">flush</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />      <span class="token keyword">break</span><span class="token punctuation">;</span><br />    <span class="token punctuation">}</span><br /><br />    <span class="token keyword">const</span> <span class="token literal-property property">buf</span><span class="token operator">:</span> ArrayBufferLike <span class="token operator">&amp;</span> <span class="token punctuation">{</span> fileStart<span class="token operator">?</span><span class="token operator">:</span> number <span class="token punctuation">}</span> <span class="token operator">=</span> value<span class="token punctuation">.</span>buffer<span class="token punctuation">;</span><br />    buf<span class="token punctuation">.</span>fileStart <span class="token operator">=</span> offset<span class="token punctuation">;</span><br />    offset <span class="token operator">=</span> <span class="token keyword">this</span><span class="token punctuation">.</span>file<span class="token punctuation">.</span><span class="token function">appendBuffer</span><span class="token punctuation">(</span>buf<span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token punctuation">}</span><br /><span class="token punctuation">}</span><span class="token punctuation">;</span></code></pre>
</div><p>This snippet refers to a <code>demuxer</code> class, which we use to encapsulate the
interface to <code>MP4Box</code>. We once again access the asset from IndexedDB. These
segments aren't necessarily stored in byte order, and that the <code>appendBuffer</code>
method returns the offset of the next chunk.</p>
<p>Here's how we decode a video frame:</p>
<div><pre class="language-js"><code class="language-js"><span class="token keyword">const</span> getFrameFromVideoDecoder <span class="token operator">=</span> <span class="token keyword">async</span> <span class="token punctuation">(</span>demuxer<span class="token operator">:</span> any<span class="token punctuation">)</span><span class="token operator">:</span> Promise<span class="token operator">&lt;</span>any<span class="token operator">></span> <span class="token operator">=></span> <span class="token punctuation">{</span><br />  <span class="token keyword">let</span> desiredSampleIndex <span class="token operator">=</span> demuxer<span class="token punctuation">.</span><span class="token function">getFrameIndexForTimestamp</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">.</span>frameTime<span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token keyword">let</span> <span class="token literal-property property">timestampToMatch</span><span class="token operator">:</span> number<span class="token punctuation">;</span><br />  <span class="token keyword">let</span> <span class="token literal-property property">decodedSample</span><span class="token operator">:</span> VideoFrame <span class="token operator">|</span> <span class="token keyword">null</span> <span class="token operator">=</span> <span class="token keyword">null</span><span class="token punctuation">;</span><br /><br />  <span class="token keyword">const</span> <span class="token function-variable function">outputCallback</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token parameter"><span class="token literal-property property">frame</span><span class="token operator">:</span> VideoFrame</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span><br />    <span class="token keyword">if</span> <span class="token punctuation">(</span>frame<span class="token punctuation">.</span>timestamp <span class="token operator">===</span> timestampToMatch<span class="token punctuation">)</span> decodedSample <span class="token operator">=</span> frame<span class="token punctuation">;</span><br />    <span class="token keyword">else</span> frame<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token punctuation">}</span><span class="token punctuation">;</span>  <br /><br />  <span class="token keyword">const</span> decoder <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">VideoDecoder</span><span class="token punctuation">(</span><span class="token punctuation">{</span><br />    <span class="token literal-property property">output</span><span class="token operator">:</span> outputCallback<span class="token punctuation">,</span><br />  <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <br />  <span class="token keyword">const</span> <span class="token punctuation">{</span><br />    codec<span class="token punctuation">,</span><br />    codecWidth<span class="token punctuation">,</span><br />    codecHeight<span class="token punctuation">,</span><br />    description<span class="token punctuation">,</span><br />  <span class="token punctuation">}</span> <span class="token operator">=</span> demuxer<span class="token punctuation">.</span><span class="token function">getDecoderConfigurationInfo</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  decoder<span class="token punctuation">.</span><span class="token function">configure</span><span class="token punctuation">(</span><span class="token punctuation">{</span> codec<span class="token punctuation">,</span> codecWidth<span class="token punctuation">,</span> codecHeight<span class="token punctuation">,</span> description <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <br /><br />  <span class="token comment">/* begin demuxer interface */</span><br />  <span class="token keyword">const</span> preceedingKeyFrameIndex <span class="token operator">=</span> demuxer<span class="token punctuation">.</span><span class="token function">getPreceedingKeyFrameIndex</span><span class="token punctuation">(</span><br />    desiredSampleIndex<br />  <span class="token punctuation">)</span><span class="token punctuation">;</span>  <br />  <span class="token keyword">const</span> trak_id <span class="token operator">=</span> demuxer<span class="token punctuation">.</span>trak_id<br />  <span class="token keyword">const</span> trak <span class="token operator">=</span> demuxer<span class="token punctuation">.</span>moov<span class="token punctuation">.</span>traks<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter"><span class="token literal-property property">trak</span><span class="token operator">:</span> any</span><span class="token punctuation">)</span> <span class="token operator">=></span> trak<span class="token punctuation">.</span>tkhd<span class="token punctuation">.</span>track_id <span class="token operator">===</span> trak_id<span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token keyword">const</span> data <span class="token operator">=</span> <span class="token keyword">await</span> demuxer<span class="token punctuation">.</span><span class="token function">getFrameDataRange</span><span class="token punctuation">(</span><br />    preceedingKeyFrameIndex<span class="token punctuation">,</span><br />    desiredSampleIndex<br />  <span class="token punctuation">)</span><span class="token punctuation">;</span>  <br />  <span class="token comment">/* end demuxer interface */</span><br /><br />  <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">let</span> i <span class="token operator">=</span> preceedingKeyFrameIndex<span class="token punctuation">;</span> i <span class="token operator">&lt;=</span> desiredSampleIndex<span class="token punctuation">;</span> i <span class="token operator">+=</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><br />    <span class="token keyword">const</span> sample <span class="token operator">=</span> trak<span class="token punctuation">.</span>samples<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span><br />    <span class="token keyword">const</span> sampleData <span class="token operator">=</span> data<span class="token punctuation">.</span><span class="token function">readNBytes</span><span class="token punctuation">(</span><br />      sample<span class="token punctuation">.</span>offset<span class="token punctuation">,</span><br />      sample<span class="token punctuation">.</span>size<br />    <span class="token punctuation">)</span><span class="token punctuation">;</span>  <br /><br />    <span class="token keyword">const</span> sampleType <span class="token operator">=</span> sample<span class="token punctuation">.</span>is_sync <span class="token operator">?</span> <span class="token string">'key'</span> <span class="token operator">:</span> <span class="token string">'delta'</span><span class="token punctuation">;</span><br />    <span class="token keyword">const</span> encodedFrame <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">EncodedVideoChunk</span><span class="token punctuation">(</span><span class="token punctuation">{</span><br />      sampleType<span class="token punctuation">,</span><br />      <span class="token literal-property property">timestamp</span><span class="token operator">:</span> sample<span class="token punctuation">.</span>cts<span class="token punctuation">,</span><br />      <span class="token literal-property property">duration</span><span class="token operator">:</span> sample<span class="token punctuation">.</span>duration<span class="token punctuation">,</span><br />      samapleData<span class="token punctuation">,</span><br />    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <br /><br />    <span class="token keyword">if</span> <span class="token punctuation">(</span>i <span class="token operator">===</span> desiredSampleIndex<span class="token punctuation">)</span><br />      timestampToMatch <span class="token operator">=</span> encodedFrame<span class="token punctuation">.</span>timestamp<span class="token punctuation">;</span><br />    decoder<span class="token punctuation">.</span><span class="token function">decodeEncodedFrame</span><span class="token punctuation">(</span>encodedFrame<span class="token punctuation">,</span> i<span class="token punctuation">)</span><span class="token punctuation">;</span> <br />  <span class="token punctuation">}</span><br />  <span class="token keyword">await</span> decoder<span class="token punctuation">.</span><span class="token function">flush</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br /><br />  <span class="token keyword">return</span> <span class="token punctuation">{</span> <span class="token literal-property property">type</span><span class="token operator">:</span> <span class="token string">'value'</span><span class="token punctuation">,</span> <span class="token literal-property property">value</span><span class="token operator">:</span> decodedSample <span class="token punctuation">}</span><span class="token punctuation">;</span><br /><span class="token punctuation">}</span><span class="token punctuation">;</span></code></pre>
</div><p>The structure of the demuxer is quite complex and beyond the scope of this
article. It stores each frame in an array titled <code>samples</code>. We use the demuxer
to find the closest preceding key frame to our desired timestamp, which is
where we must begin video decode.</p>
<p>Videos are composed of full frames, known as key or i-frames, as well as much
smaller delta frames, often referred to as p- or b-frames. Decode must always
begin at a key frame.</p>
<p>The application decodes frames by:</p>
<ol>
<li>Instantiating the decoder with a frame output callback.</li>
<li>Configuring the decoder for the specific codec and input resolution.</li>
<li>Creating an <code>encodedVideoChunk</code> using data from the demuxer.</li>
<li>Calling the <code>decodeEncodedFrame</code> method.</li>
</ol>
<p>We do this until we reach the frame with the desired timestamp.</p>
<h2 id="whats-next">What's next? <a class="w-headline-link" href="https://web.dev/kapwing/#whats-next">#</a></h2>
<p>We define scale on our frontend as the ability to maintain precise and
performant playback as projects get larger and more complex. One way to scale
performance is to mount as few videos as possible at once, however when we do
this, we risk slow and choppy transitions. While we've developed internal
systems to cache video components for reuse, there are limitations to how much
control HTML5 video tags can provide.</p>
<p>In the future, we may attempt to play all media using WebCodecs. This could
allow us to be very precise about what data we buffer which should help scale
performance.</p>
<p>We can also do a better job of offloading large trackpad computations to
<a href="https://web.dev/off-main-thread/">web workers</a>, and we can be smarter about pre-fetching
files and pre-generating frames. We see large opportunities to optimize our
overall application performance and to extend functionality with tools like
<a href="https://developer.mozilla.org/docs/Web/API/WebGL_API" rel="noopener">WebGL</a>.</p>
<p>We would like to continue our investment in
<a href="https://www.tensorflow.org/js" rel="noopener">TensorFlow.js</a>, which we currently use for
intelligent background removal. We plan to leverage TensorFlow.js for other
sophisticated tasks such as object detection, feature extraction, style transfer, and so on.</p>
<p>Ultimately, we're excited to continue builing our product with native-like
performance and functionality on a free and open web.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[SVGcode: a PWA to convert raster images to SVG vector graphics]]></title>
<description><![CDATA[In a hurry? Go straight to the SVGcode app and read the article later. 

      
  
    (If you prefer watching over reading, this article is also available as a video.)
  

From raster to vector #
Have you ever scaled an image and the result was pixelated and unsatisfactory? If
so, you have proba...]]></description>
<link>https://tsecurity.de/de/1725694/it+betriebssysteme/web+tipps/svgcode+a+pwa+to+convert+raster+images+to+svg+vector+graphics/</link>
<pubDate>Thu, 08 Dec 2022 19:45:05 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<aside class="aside flow bg-state-info-bg color-state-info-text"><div class=" flow"> In a hurry? Go <a href="https://svgco.de/">straight to the SVGcode app</a> and read the article later. </div></aside>
<figure data-size="full">
  <div class="youtube">  <lite-youtube videoid="kcvfyQh6J-0">  </lite-youtube></div>
  <figcaption>
    (If you prefer watching over reading, this article is also available as a <a href="https://youtu.be/kcvfyQh6J-0">video</a>.)
  </figcaption>
</figure>
<h2 id="from-raster-to-vector">From raster to vector <a class="w-headline-link" href="https://web.dev/svgcode/#from-raster-to-vector">#</a></h2>
<p>Have you ever scaled an image and the result was pixelated and unsatisfactory? If
so, you have probably dealt with a raster image format such as WebP, PNG, or JPG.</p>
<figure>
  <video autoplay="" loop="" muted="" playsinline="">      <source src="https://storage.googleapis.com/web-dev-uploads/video/8WbTDNrhLsU0El80frMBGE4eMCD3/bIiC6vyZLqgGWPuFF9od.mp4" type="video/mp4" />    </video>
  <figcaption>
    Scaling up a raster image makes it look pixelated.
  </figcaption>
</figure>
<p>In contrast, vector graphics are images that are defined by points in a coordinate system. These
points are connected by lines and curves to form polygons and other shapes. Vector graphics have an
advantage over raster graphics in that they may be scaled up or down to any resolution
without pixelation.</p>
<figure>
  <video autoplay="" loop="" muted="" playsinline="">      <source src="https://storage.googleapis.com/web-dev-uploads/video/8WbTDNrhLsU0El80frMBGE4eMCD3/yM32DfKFp8ooBAshjlUE.mp4" type="video/mp4" />    </video>
  <figcaption>
    Scaling up a vector image with no loss of quality.
  </figcaption>
</figure>
<h2 id="introducing-svgcode">Introducing SVGcode <a class="w-headline-link" href="https://web.dev/svgcode/#introducing-svgcode">#</a></h2>
<p>I have built a PWA called <a href="https://svgco.de/" rel="noopener">SVGcode</a> that can help you convert raster images to
vectors. Credit where credit is due: I didn't invent this. With SVGcode, I just stand on the
shoulders of a command line tool called <a href="http://potrace.sourceforge.net/" rel="noopener">Potrace</a> by
<a href="https://www.mathstat.dal.ca/~selinger/" rel="noopener">Peter Selinger</a> that I have
<a href="https://www.npmjs.com/package/esm-potrace-wasm" rel="noopener">converted to Web Assembly</a>, so it can be used in a
Web app.</p>
<figure>
  <img alt="SVGcode application screenshot." decoding="async" height="483" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/xMosQFxacBsz116CcFwy.png?auto=format" srcset="https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/xMosQFxacBsz116CcFwy.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/xMosQFxacBsz116CcFwy.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/xMosQFxacBsz116CcFwy.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/xMosQFxacBsz116CcFwy.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/xMosQFxacBsz116CcFwy.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/xMosQFxacBsz116CcFwy.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/xMosQFxacBsz116CcFwy.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/xMosQFxacBsz116CcFwy.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/xMosQFxacBsz116CcFwy.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/xMosQFxacBsz116CcFwy.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/xMosQFxacBsz116CcFwy.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/xMosQFxacBsz116CcFwy.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/xMosQFxacBsz116CcFwy.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/xMosQFxacBsz116CcFwy.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/xMosQFxacBsz116CcFwy.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/xMosQFxacBsz116CcFwy.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/8WbTDNrhLsU0El80frMBGE4eMCD3/xMosQFxacBsz116CcFwy.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    The <a href="https://svgco.de/">SVGcode</a> app.
  </figcaption>
</figure>
<h3 id="using-svgcode">Using SVGcode <a class="w-headline-link" href="https://web.dev/svgcode/#using-svgcode">#</a></h3>
<p>First, I want to show you how to use the app. I start with the teaser image for Chrome Dev Summit
that I downloaded from the ChromiumDev Twitter channel. This is a PNG raster image that I then
drag onto the SVGcode app. When I drop the file, the app traces the image color by color,
until a vectorized version of the input appears. I can now zoom into the image, and as you can see,
the edges stay sharp. But zooming in on the Chrome logo, you can see that the tracing wasn't
perfect, and especially the outlines of the logo look a bit speckled. I can improve the result by
de-speckling the tracing by suppressing speckles of up to, say, five pixels.</p>
<figure>
  <video autoplay="" loop="" muted="" playsinline="">      <source src="https://storage.googleapis.com/web-dev-uploads/video/8WbTDNrhLsU0El80frMBGE4eMCD3/WvmYtNTHAbINP3ec1h1w.mp4" type="video/mp4" />    </video>
  <figcaption>
    Converting a dropped image to SVG.
  </figcaption>
</figure>
<h3 id="posterization-in-svgcode">Posterization in SVGcode <a class="w-headline-link" href="https://web.dev/svgcode/#posterization-in-svgcode">#</a></h3>
<p>An important step for vectorization, especially for photographic images, is posterizing the input
image to reduce the number of colors. SVGcode allows me to do this per color channel, and see the
resulting SVG as I make changes. When I'm happy with the result, I can save the SVG to my hard disk
and use it wherever I like.</p>
<figure>
  <video autoplay="" loop="" muted="" playsinline="">      <source src="https://storage.googleapis.com/web-dev-uploads/video/8WbTDNrhLsU0El80frMBGE4eMCD3/BzcR6yPyuQ0TIgzwYbLy.mp4" type="video/mp4" />    </video>
  <figcaption>
    Posterizing an image to reduce the number of colors.
  </figcaption>
</figure>
<h2 id="apis-used-in-svgcode">APIs used in SVGcode <a class="w-headline-link" href="https://web.dev/svgcode/#apis-used-in-svgcode">#</a></h2>
<p>Now that you have seen what the app is capable of, let me show you some of the APIs that help make
the magic happen.</p>
<h3 id="progressive-web-app">Progressive Web App <a class="w-headline-link" href="https://web.dev/svgcode/#progressive-web-app">#</a></h3>
<p>SVGcode is an installable Progressive Web App and therefore fully offline enabled. The app is based
on the
<a href="https://github.com/vitejs/vite/tree/main/packages/create-vite/template-vanilla" rel="noopener">Vanilla JS template</a>
for <a href="https://github.com/vitejs/vite" rel="noopener">Vite.js</a> and uses the popular
<a href="https://github.com/antfu/vite-plugin-pwa" rel="noopener">Vite plugin PWA</a>, which creates a service worker that
uses <a href="https://developer.chrome.com/docs/workbox/" rel="noopener">Workbox.js</a> under the hood. Workbox is a set
of libraries that can power a production-ready service worker for Progressive Web Apps, This pattern
may not necessarily work for all apps, but for SVGcode's use case it's great.</p>
<h4 id="window-controls-overlay">Window Controls Overlay <a class="w-headline-link" href="https://web.dev/svgcode/#window-controls-overlay">#</a></h4>
<p>To maximize the available screen real estate, SVGcode uses
<a href="https://web.dev/window-controls-overlay/">Window Controls Overlay</a> customization by moving its main menu up into
the titlebar area. You can see this get activated at the end of the install flow.</p>
<figure>
  <video autoplay="" loop="" muted="" playsinline="">      <source src="https://storage.googleapis.com/web-dev-uploads/video/8WbTDNrhLsU0El80frMBGE4eMCD3/aDk3LFxexL6g2NbH4RCA.mp4" type="video/mp4" />    </video>
  <figcaption>
    Installing SVGcode and activating the Window Controls Overlay customization.
  </figcaption>
</figure>
<h3 id="file-system-access-api">File System Access API <a class="w-headline-link" href="https://web.dev/svgcode/#file-system-access-api">#</a></h3>
<p>To open input image files and save the resulting SVGs, I use the
<a href="https://web.dev/file-system-access/">File System Access API</a>. This allows me to keep a reference to previously
opened files and to continue where I left off, even after an app reload. Whenever an image gets
saved, it is optimized via the <a href="https://github.com/svg/svgo" rel="noopener">svgo</a> library, which may take a moment,
depending on the complexity of the SVG. Showing the file save dialog requires a user gesture. It is
therefore important to obtain the file handle before the SVG optimization happens, so the user
gesture is not invalidated by the time the optimized SVG is ready.</p>
<div><pre class="language-js"><code class="language-js"><span class="token keyword">try</span> <span class="token punctuation">{</span><br />  <span class="token keyword">let</span> svg <span class="token operator">=</span> svgOutput<span class="token punctuation">.</span>innerHTML<span class="token punctuation">;</span><br />  <span class="token keyword">let</span> handle <span class="token operator">=</span> <span class="token keyword">null</span><span class="token punctuation">;</span><br />  <span class="token comment">// To not consume the user gesture obtain the handle before preparing the</span><br />  <span class="token comment">// blob, which may take longer.</span><br />  <span class="token keyword">if</span> <span class="token punctuation">(</span>supported<span class="token punctuation">)</span> <span class="token punctuation">{</span><br />    handle <span class="token operator">=</span> <span class="token keyword">await</span> <span class="token function">showSaveFilePicker</span><span class="token punctuation">(</span><span class="token punctuation">{</span><br />      <span class="token literal-property property">types</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token punctuation">{</span><span class="token literal-property property">description</span><span class="token operator">:</span> <span class="token string">'SVG file'</span><span class="token punctuation">,</span> <span class="token literal-property property">accept</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token string-property property">'image/svg+xml'</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token string">'.svg'</span><span class="token punctuation">]</span><span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">]</span><span class="token punctuation">,</span><br />    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token punctuation">}</span><br />  <span class="token function">showToast</span><span class="token punctuation">(</span>i18n<span class="token punctuation">.</span><span class="token function">t</span><span class="token punctuation">(</span><span class="token string">'optimizingSVG'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">Infinity</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  svg <span class="token operator">=</span> <span class="token keyword">await</span> <span class="token function">optimizeSVG</span><span class="token punctuation">(</span>svg<span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token function">showToast</span><span class="token punctuation">(</span>i18n<span class="token punctuation">.</span><span class="token function">t</span><span class="token punctuation">(</span><span class="token string">'savedSVG'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token keyword">const</span> blob <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Blob</span><span class="token punctuation">(</span><span class="token punctuation">[</span>svg<span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token literal-property property">type</span><span class="token operator">:</span> <span class="token string">'image/svg+xml'</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token keyword">await</span> <span class="token function">fileSave</span><span class="token punctuation">(</span>blob<span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token literal-property property">description</span><span class="token operator">:</span> <span class="token string">'SVG file'</span><span class="token punctuation">}</span><span class="token punctuation">,</span> handle<span class="token punctuation">)</span><span class="token punctuation">;</span><br /><span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span>err<span class="token punctuation">)</span> <span class="token punctuation">{</span><br />  console<span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span>err<span class="token punctuation">.</span>name<span class="token punctuation">,</span> err<span class="token punctuation">.</span>message<span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token function">showToast</span><span class="token punctuation">(</span>err<span class="token punctuation">.</span>message<span class="token punctuation">)</span><span class="token punctuation">;</span><br /><span class="token punctuation">}</span></code></pre>
</div><h4 id="drag-an-drop">Drag an drop <a class="w-headline-link" href="https://web.dev/svgcode/#drag-an-drop">#</a></h4>
<p>For opening an input image, I can either use the file open feature, or, as you have seen above, just
drag and drop an image file onto the app. The file open feature is pretty straightforward, more
interesting is the drag and drop case. What's particularly nice about this is that you can
get a file system handle from the data transfer item via the
<a href="https://developer.mozilla.org/docs/Web/API/DataTransferItem/getAsFileSystemHandle" rel="noopener"><code>getAsFileSystemHandle()</code></a>
method. As mentioned before, I can persist this handle, so it's ready when the app gets reloaded.</p>
<div><pre class="language-js"><code class="language-js">document<span class="token punctuation">.</span><span class="token function">addEventListener</span><span class="token punctuation">(</span><span class="token string">'drop'</span><span class="token punctuation">,</span> <span class="token keyword">async</span> <span class="token punctuation">(</span><span class="token parameter">event</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span><br />  event<span class="token punctuation">.</span><span class="token function">preventDefault</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  dropContainer<span class="token punctuation">.</span>classList<span class="token punctuation">.</span><span class="token function">remove</span><span class="token punctuation">(</span><span class="token string">'dropenter'</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token keyword">const</span> item <span class="token operator">=</span> event<span class="token punctuation">.</span>dataTransfer<span class="token punctuation">.</span>items<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">;</span><br />  <span class="token keyword">if</span> <span class="token punctuation">(</span>item<span class="token punctuation">.</span>kind <span class="token operator">===</span> <span class="token string">'file'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><br />    inputImage<span class="token punctuation">.</span><span class="token function">addEventListener</span><span class="token punctuation">(</span><br />      <span class="token string">'load'</span><span class="token punctuation">,</span><br />      <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span><br />        <span class="token constant">URL</span><span class="token punctuation">.</span><span class="token function">revokeObjectURL</span><span class="token punctuation">(</span>blobURL<span class="token punctuation">)</span><span class="token punctuation">;</span><br />      <span class="token punctuation">}</span><span class="token punctuation">,</span><br />      <span class="token punctuation">{</span><span class="token literal-property property">once</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">}</span><span class="token punctuation">,</span><br />    <span class="token punctuation">)</span><span class="token punctuation">;</span><br />    <span class="token keyword">const</span> handle <span class="token operator">=</span> <span class="token keyword">await</span> item<span class="token punctuation">.</span><span class="token function">getAsFileSystemHandle</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />    <span class="token keyword">if</span> <span class="token punctuation">(</span>handle<span class="token punctuation">.</span>kind <span class="token operator">!==</span> <span class="token string">'file'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><br />      <span class="token keyword">return</span><span class="token punctuation">;</span><br />    <span class="token punctuation">}</span><br />    <span class="token keyword">const</span> file <span class="token operator">=</span> <span class="token keyword">await</span> handle<span class="token punctuation">.</span><span class="token function">getFile</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />    <span class="token keyword">const</span> blobURL <span class="token operator">=</span> <span class="token constant">URL</span><span class="token punctuation">.</span><span class="token function">createObjectURL</span><span class="token punctuation">(</span>file<span class="token punctuation">)</span><span class="token punctuation">;</span><br />    inputImage<span class="token punctuation">.</span>src <span class="token operator">=</span> blobURL<span class="token punctuation">;</span><br />    <span class="token keyword">await</span> <span class="token function">set</span><span class="token punctuation">(</span><span class="token constant">FILE_HANDLE</span><span class="token punctuation">,</span> handle<span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token punctuation">}</span><br /><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
</div><p>For more details, check out the article on the <a href="https://web.dev/file-system-access/">File System Access API</a> and,
if you're interested, study the SVGcode source code in
<a href="https://github.com/tomayac/SVGcode/blob/main/src/js/filesystem.js" rel="noopener"><code>src/js/filesystem.js</code></a>.</p>
<h3 id="async-clipboard-api">Async Clipboard API <a class="w-headline-link" href="https://web.dev/svgcode/#async-clipboard-api">#</a></h3>
<p>SVGcode is also fully integrated with the operating system's clipboard via the Async Clipboard API.
You can paste images from the operating system's file explorer into the app either by clicking the
paste image button or by pressing command or control plus v on your keyboard.</p>
<figure>
  <video autoplay="" loop="" muted="" playsinline="">      <source src="https://storage.googleapis.com/web-dev-uploads/video/8WbTDNrhLsU0El80frMBGE4eMCD3/9wHL0Uc7eHFEFF99anaB.mp4" type="video/mp4" />    </video>
  <figcaption>
    Pasting an image from the file explorer into SVGcode.
  </figcaption>
</figure>
<p>The Async Clipboard API has recently gained the ability to deal with SVG images as well, so you can
also copy an SVG image and paste it into another application for further processing.</p>
<figure>
  <video autoplay="" loop="" muted="" playsinline="">      <source src="https://storage.googleapis.com/web-dev-uploads/video/8WbTDNrhLsU0El80frMBGE4eMCD3/KiGt5UHOvZZEvPhtwIny.mp4" type="video/mp4" />    </video>
  <figcaption>
    Copying an image from SVGcode into SVGOMG.
  </figcaption>
</figure>
<div><pre class="language-js"><code class="language-js">copyButton<span class="token punctuation">.</span><span class="token function">addEventListener</span><span class="token punctuation">(</span><span class="token string">'click'</span><span class="token punctuation">,</span> <span class="token keyword">async</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span><br />  <span class="token keyword">let</span> svg <span class="token operator">=</span> svgOutput<span class="token punctuation">.</span>innerHTML<span class="token punctuation">;</span><br />  <span class="token function">showToast</span><span class="token punctuation">(</span>i18n<span class="token punctuation">.</span><span class="token function">t</span><span class="token punctuation">(</span><span class="token string">'optimizingSVG'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">Infinity</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  svg <span class="token operator">=</span> <span class="token keyword">await</span> <span class="token function">optimizeSVG</span><span class="token punctuation">(</span>svg<span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token keyword">const</span> textBlob <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Blob</span><span class="token punctuation">(</span><span class="token punctuation">[</span>svg<span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token literal-property property">type</span><span class="token operator">:</span> <span class="token string">'text/plain'</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token keyword">const</span> svgBlob <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Blob</span><span class="token punctuation">(</span><span class="token punctuation">[</span>svg<span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token literal-property property">type</span><span class="token operator">:</span> <span class="token string">'image/svg+xml'</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  navigator<span class="token punctuation">.</span>clipboard<span class="token punctuation">.</span><span class="token function">write</span><span class="token punctuation">(</span><span class="token punctuation">[</span><br />    <span class="token keyword">new</span> <span class="token class-name">ClipboardItem</span><span class="token punctuation">(</span><span class="token punctuation">{</span><br />      <span class="token punctuation">[</span>svgBlob<span class="token punctuation">.</span>type<span class="token punctuation">]</span><span class="token operator">:</span> svgBlob<span class="token punctuation">,</span><br />      <span class="token punctuation">[</span>textBlob<span class="token punctuation">.</span>type<span class="token punctuation">]</span><span class="token operator">:</span> textBlob<span class="token punctuation">,</span><br />    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">,</span><br />  <span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token function">showToast</span><span class="token punctuation">(</span>i18n<span class="token punctuation">.</span><span class="token function">t</span><span class="token punctuation">(</span><span class="token string">'copiedSVG'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br /><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
</div><p>To learn more, read the <a href="https://web.dev/async-clipboard/">Async Clipboard</a> article, or see the file
<a href="https://github.com/tomayac/SVGcode/blob/main/src/js/clipboard.js" rel="noopener"><code>src/js/clipboard.js</code></a>.</p>
<h3 id="file-handling">File Handling <a class="w-headline-link" href="https://web.dev/svgcode/#file-handling">#</a></h3>
<p>One of my favorite features of SVGcode is how well it blends in with the operating system. As an
installed PWA, it can become a file handler, or even the default file handler, for image files. This
means that when I'm in the Finder on my macOS machine, I can right-click an image and open it with
SVGcode. This feature is called File Handling and works based on the file_handlers property in the
Web App Manifest and the launch queue, which allows the app to consume the passed file.</p>
<figure>
  <video autoplay="" loop="" muted="" playsinline="">      <source src="https://storage.googleapis.com/web-dev-uploads/video/8WbTDNrhLsU0El80frMBGE4eMCD3/DEQLkm1vrt226xsAoysI.mp4" type="video/mp4" />    </video>
  <figcaption>
    Opening a file from the desktop with installed SVGcode app.
  </figcaption>
</figure>
<div><pre class="language-js"><code class="language-js">window<span class="token punctuation">.</span>launchQueue<span class="token punctuation">.</span><span class="token function">setConsumer</span><span class="token punctuation">(</span><span class="token keyword">async</span> <span class="token punctuation">(</span><span class="token parameter">launchParams</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span><br />  <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>launchParams<span class="token punctuation">.</span>files<span class="token punctuation">.</span>length<span class="token punctuation">)</span> <span class="token punctuation">{</span><br />    <span class="token keyword">return</span><span class="token punctuation">;</span><br />  <span class="token punctuation">}</span><br />  <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">const</span> handle <span class="token keyword">of</span> launchParams<span class="token punctuation">.</span>files<span class="token punctuation">)</span> <span class="token punctuation">{</span><br />    <span class="token keyword">const</span> file <span class="token operator">=</span> <span class="token keyword">await</span> handle<span class="token punctuation">.</span><span class="token function">getFile</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />    <span class="token keyword">if</span> <span class="token punctuation">(</span>file<span class="token punctuation">.</span>type<span class="token punctuation">.</span><span class="token function">startsWith</span><span class="token punctuation">(</span><span class="token string">'image/'</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><br />      <span class="token keyword">const</span> blobURL <span class="token operator">=</span> <span class="token constant">URL</span><span class="token punctuation">.</span><span class="token function">createObjectURL</span><span class="token punctuation">(</span>file<span class="token punctuation">)</span><span class="token punctuation">;</span><br />      inputImage<span class="token punctuation">.</span><span class="token function">addEventListener</span><span class="token punctuation">(</span><br />        <span class="token string">'load'</span><span class="token punctuation">,</span><br />        <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span><br />          <span class="token constant">URL</span><span class="token punctuation">.</span><span class="token function">revokeObjectURL</span><span class="token punctuation">(</span>blobURL<span class="token punctuation">)</span><span class="token punctuation">;</span><br />        <span class="token punctuation">}</span><span class="token punctuation">,</span><br />        <span class="token punctuation">{</span><span class="token literal-property property">once</span><span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">}</span><span class="token punctuation">,</span><br />      <span class="token punctuation">)</span><span class="token punctuation">;</span><br />      inputImage<span class="token punctuation">.</span>src <span class="token operator">=</span> blobURL<span class="token punctuation">;</span><br />      <span class="token keyword">await</span> <span class="token function">set</span><span class="token punctuation">(</span><span class="token constant">FILE_HANDLE</span><span class="token punctuation">,</span> handle<span class="token punctuation">)</span><span class="token punctuation">;</span><br />      <span class="token keyword">return</span><span class="token punctuation">;</span><br />    <span class="token punctuation">}</span><br />  <span class="token punctuation">}</span><br /><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
</div><p>For more information, see <a href="https://web.dev/file-handling/">Let installed web applications be file handlers</a>, and view the source code in
<a href="https://github.com/tomayac/SVGcode/blob/main/src/js/filehandling.js" rel="noopener"><code>src/js/filehandling.js</code></a>.</p>
<h3 id="web-share-files">Web Share (Files) <a class="w-headline-link" href="https://web.dev/svgcode/#web-share-files">#</a></h3>
<p>Another example of blending in with the operating system is the app's share feature. Assuming I want
to make edits to an SVG created with SVGcode, one way to deal with this would be to save the file,
launch the SVG editing app, and then open the SVG file from there. A smoother flow, though, is to
use the <a href="https://web.dev/web-share/#sharing-files">Web Share API</a>, which allows for files to be shared directly. So if
the SVG editing app is a share target, it can directly receive the file without deviation.</p>
<div><pre class="language-js"><code class="language-js">shareSVGButton<span class="token punctuation">.</span><span class="token function">addEventListener</span><span class="token punctuation">(</span><span class="token string">'click'</span><span class="token punctuation">,</span> <span class="token keyword">async</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span><br />  <span class="token keyword">let</span> svg <span class="token operator">=</span> svgOutput<span class="token punctuation">.</span>innerHTML<span class="token punctuation">;</span><br />  svg <span class="token operator">=</span> <span class="token keyword">await</span> <span class="token function">optimizeSVG</span><span class="token punctuation">(</span>svg<span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token keyword">const</span> suggestedFileName <span class="token operator">=</span><br />    <span class="token function">getSuggestedFileName</span><span class="token punctuation">(</span><span class="token keyword">await</span> <span class="token function">get</span><span class="token punctuation">(</span><span class="token constant">FILE_HANDLE</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">||</span> <span class="token string">'Untitled.svg'</span><span class="token punctuation">;</span><br />  <span class="token keyword">const</span> file <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token punctuation">[</span>svg<span class="token punctuation">]</span><span class="token punctuation">,</span> suggestedFileName<span class="token punctuation">,</span> <span class="token punctuation">{</span> <span class="token literal-property property">type</span><span class="token operator">:</span> <span class="token string">'image/svg+xml'</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token keyword">const</span> data <span class="token operator">=</span> <span class="token punctuation">{</span><br />    <span class="token literal-property property">files</span><span class="token operator">:</span> <span class="token punctuation">[</span>file<span class="token punctuation">]</span><span class="token punctuation">,</span><br />  <span class="token punctuation">}</span><span class="token punctuation">;</span><br />  <span class="token keyword">if</span> <span class="token punctuation">(</span>navigator<span class="token punctuation">.</span><span class="token function">canShare</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><br />    <span class="token keyword">try</span> <span class="token punctuation">{</span><br />      <span class="token keyword">await</span> navigator<span class="token punctuation">.</span><span class="token function">share</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span><span class="token punctuation">;</span><br />    <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span>err<span class="token punctuation">)</span> <span class="token punctuation">{</span><br />      <span class="token keyword">if</span> <span class="token punctuation">(</span>err<span class="token punctuation">.</span>name <span class="token operator">!==</span> <span class="token string">'AbortError'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><br />        console<span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span>err<span class="token punctuation">.</span>name<span class="token punctuation">,</span> err<span class="token punctuation">.</span>message<span class="token punctuation">)</span><span class="token punctuation">;</span><br />      <span class="token punctuation">}</span><br />    <span class="token punctuation">}</span><br />  <span class="token punctuation">}</span><br /><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
</div><figure>
  <video autoplay="" loop="" muted="" playsinline="">      <source src="https://storage.googleapis.com/web-dev-uploads/video/8WbTDNrhLsU0El80frMBGE4eMCD3/p3Dn9FXrNLPtb4syXnfl.mp4" type="video/mp4" />    </video>
  <figcaption>
    Sharing an SVG image to Gmail.
  </figcaption>
</figure>
<h3 id="web-share-target-files">Web Share Target (Files) <a class="w-headline-link" href="https://web.dev/svgcode/#web-share-target-files">#</a></h3>
<p>The other way round, SVGcode can also act as a share target and receive files from other apps. To
make this work, the app needs to let the operating system know via the
<a href="https://web.dev/web-share-target/">Web Share Target API</a> what types of data it can accept. This happens via a
dedicated field in the Web App Manifest.</p>
<div><pre class="language-json"><code class="language-json"><span class="token punctuation">{</span><br />  <span class="token property">"share_target"</span><span class="token operator">:</span> <span class="token punctuation">{</span><br />    <span class="token property">"action"</span><span class="token operator">:</span> <span class="token string">"https://svgco.de/share-target/"</span><span class="token punctuation">,</span><br />    <span class="token property">"method"</span><span class="token operator">:</span> <span class="token string">"POST"</span><span class="token punctuation">,</span><br />    <span class="token property">"enctype"</span><span class="token operator">:</span> <span class="token string">"multipart/form-data"</span><span class="token punctuation">,</span><br />    <span class="token property">"params"</span><span class="token operator">:</span> <span class="token punctuation">{</span><br />      <span class="token property">"files"</span><span class="token operator">:</span> <span class="token punctuation">[</span><br />        <span class="token punctuation">{</span><br />          <span class="token property">"name"</span><span class="token operator">:</span> <span class="token string">"image"</span><span class="token punctuation">,</span><br />          <span class="token property">"accept"</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token string">"image/jpeg"</span><span class="token punctuation">,</span> <span class="token string">"image/png"</span><span class="token punctuation">,</span> <span class="token string">"image/webp"</span><span class="token punctuation">,</span> <span class="token string">"image/gif"</span><span class="token punctuation">]</span><br />        <span class="token punctuation">}</span><br />      <span class="token punctuation">]</span><br />    <span class="token punctuation">}</span><br />  <span class="token punctuation">}</span><br /><span class="token punctuation">}</span></code></pre>
</div><p>The <code>action</code> route does not actually exist, but is handled purely in the service worker's <code>fetch</code>
handler, which then passes on received files for actual processing in the app.</p>
<div><pre class="language-js"><code class="language-js">self<span class="token punctuation">.</span><span class="token function">addEventListener</span><span class="token punctuation">(</span><span class="token string">'fetch'</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token parameter">fetchEvent</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span><br />  <span class="token keyword">if</span> <span class="token punctuation">(</span><br />    fetchEvent<span class="token punctuation">.</span>request<span class="token punctuation">.</span>url<span class="token punctuation">.</span><span class="token function">endsWith</span><span class="token punctuation">(</span><span class="token string">'/share-target/'</span><span class="token punctuation">)</span> <span class="token operator">&amp;&amp;</span><br />    fetchEvent<span class="token punctuation">.</span>request<span class="token punctuation">.</span>method <span class="token operator">===</span> <span class="token string">'POST'</span><br />  <span class="token punctuation">)</span> <span class="token punctuation">{</span><br />    <span class="token keyword">return</span> fetchEvent<span class="token punctuation">.</span><span class="token function">respondWith</span><span class="token punctuation">(</span><br />      <span class="token punctuation">(</span><span class="token keyword">async</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span><br />        <span class="token keyword">const</span> formData <span class="token operator">=</span> <span class="token keyword">await</span> fetchEvent<span class="token punctuation">.</span>request<span class="token punctuation">.</span><span class="token function">formData</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />        <span class="token keyword">const</span> image <span class="token operator">=</span> formData<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token string">'image'</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />        <span class="token keyword">const</span> keys <span class="token operator">=</span> <span class="token keyword">await</span> caches<span class="token punctuation">.</span><span class="token function">keys</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />        <span class="token keyword">const</span> mediaCache <span class="token operator">=</span> <span class="token keyword">await</span> caches<span class="token punctuation">.</span><span class="token function">open</span><span class="token punctuation">(</span><br />          keys<span class="token punctuation">.</span><span class="token function">filter</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">key</span><span class="token punctuation">)</span> <span class="token operator">=></span> key<span class="token punctuation">.</span><span class="token function">startsWith</span><span class="token punctuation">(</span><span class="token string">'media'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span><br />        <span class="token punctuation">)</span><span class="token punctuation">;</span><br />        <span class="token keyword">await</span> mediaCache<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">'shared-image'</span><span class="token punctuation">,</span> <span class="token keyword">new</span> <span class="token class-name">Response</span><span class="token punctuation">(</span>image<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />        <span class="token keyword">return</span> Response<span class="token punctuation">.</span><span class="token function">redirect</span><span class="token punctuation">(</span><span class="token string">'./?share-target'</span><span class="token punctuation">,</span> <span class="token number">303</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br />      <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span><br />    <span class="token punctuation">)</span><span class="token punctuation">;</span><br />  <span class="token punctuation">}</span><br /><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
</div><figure>
  <video autoplay="" loop="" muted="" playsinline="">      <source src="https://storage.googleapis.com/web-dev-uploads/video/8WbTDNrhLsU0El80frMBGE4eMCD3/SVtll3ShgNigvkVLu7cn.mp4" type="video/mp4" />    </video>
  <figcaption>
    Sharing a screenshot to SVGcode.
  </figcaption>
</figure>
<h2 id="conclusion">Conclusion <a class="w-headline-link" href="https://web.dev/svgcode/#conclusion">#</a></h2>
<p>Alright, this was a quick tour through some of the advanced app features in SVGcode. I hope this app
can become an essential tool for your image processing needs alongside other amazing apps like
<a href="https://squoosh.app/" rel="noopener">Squoosh</a> or <a href="https://jakearchibald.github.io/svgomg/" rel="noopener">SVGOMG</a>.</p>
<p>SVGcode is available at <a href="https://svgco.de/" rel="noopener">svgco.de</a>. See what I did there? You can
<a href="https://github.com/tomayac/SVGcode" rel="noopener">review its source code on GitHub</a>. Note that since Potrace is
GPL-licensed, so is SVGcode. And with that, happy vectorizing! I hope SVGcode will be useful, and
some of its features can inspire your next app.</p>
<h2 id="acknowledgements">Acknowledgements <a class="w-headline-link" href="https://web.dev/svgcode/#acknowledgements">#</a></h2>
<p>This article was reviewed by <a href="https://github.com/jpmedley" rel="noopener">Joe Medley</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Improving Core Web Vitals on the Mail.ru home page resulted in an average 10% increase in conversion rates]]></title>
<description><![CDATA[Where we started #
Mail.ru is one of the leading e-mail services on the Russian-speaking Internet and is in the top 5 sites in Russia in terms of traffic. Mail.ru is an important resource for many people. It receives several hundred million visits per month, and is a portal from where people can ...]]></description>
<link>https://tsecurity.de/de/1725695/it+betriebssysteme/web+tipps/improving+core+web+vitals+on+the+mailru+home+page+resulted+in+an+average+10+increase+in+conversion+rates/</link>
<pubDate>Thu, 08 Dec 2022 19:45:05 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<h2 id="where-we-started">Where we started <a class="w-headline-link" href="https://web.dev/mailru-cwv/#where-we-started">#</a></h2>
<p>Mail.ru is one of the leading e-mail services on the Russian-speaking Internet and is <a href="https://www.alexa.com/topsites/countries/RU" rel="noopener">in the top 5 sites in Russia in terms of traffic</a>. Mail.ru is an important resource for many people. It receives several hundred million visits per month, and is a portal from where people can access email, news, social media, performance internet searches and more.</p>
<p>Mail.ru wanted to provide its visitors with a high quality user experience, so work began to improve Core Web Vitals. Before discussing our optimization strategy, a few technical details of the Mail.ru home page should first be noted.</p>
<p>Though the project had long been developed using our in-house templating engine <a href="https://github.com/mailru/fest" rel="noopener">Fest</a>, we began to migrate to <a href="https://svelte.dev/" rel="noopener">Svelte 3</a> in 2019.</p>
<aside class="aside flow bg-state-info-bg color-state-info-text"><div class=" flow"> You can find out more about Fest and our reasons for changing the technology stack to Svelte in <a href="https://youtu.be/H2l3pK42f38?t=2913">our team's presentation</a> at Svelte Russia Meetup #1. </div></aside>
<p>Svelte implements reactivity in a way that <a href="https://svelte.dev/blog/virtual-dom-is-pure-overhead" rel="noopener">doesn't use Virtual DOM</a>, which makes it less resource-intensive. <a href="https://svelte.dev/blog/frameworks-without-the-framework" rel="noopener">Svelte's approach removes unused functions from production bundles</a> because the code implementing them isn't generated by the compiler if the functions aren't used. Unused code is removed during compilation, resulting in smaller bundles. This may help reduce <a href="https://web.dev/tbt/">Total Blocking Time (TBT)</a> during page startup.</p>
<h2 id="tracking-performance-metrics">Tracking performance metrics <a class="w-headline-link" href="https://web.dev/mailru-cwv/#tracking-performance-metrics">#</a></h2>
<p>Before optimizing Core Web Vitals, it's helpful to <a href="https://web.dev/vitals-field-measurement-best-practices/">evaluate performance in the field</a>. Before Core Web Vitals, we tracked other metrics, such as <a href="https://web.dev/fcp/">First Contentful Paint (FCP)</a>, in our internal performance dashboard.</p>
<p>Our metrics collection script was modified to collect Core Web Vitals and transmit them to our performance dashboard for visualization. In line with Google's recommendations, our script uses <a href="https://developer.mozilla.org/docs/Web/API/PerformanceObserver" rel="noopener">PerformanceObserver API</a> to obtain metrics, which is part of <a href="https://github.com/mail-core" rel="noopener">the universal frontend &quot;Platform&quot;</a> inside Mail.ru.</p>
<p>The dashboard displayed the following metrics for users (mean values for the week of 15-21 March 2021):</p>
<div class="table-wrapper">
  <table>
    <thead>
      <tr>
        <th colspan="2" width="40%">Metrics group name</th>
        <th colspan="3" width="30%">Core Web Vitals</th>
        <th colspan="3" width="30%">Other Web Vitals</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td colspan="2">Metric name</td>
        <td>LCP</td>
        <td>FID</td>
        <td>CLS</td>
        <td>FCP</td>
        <td>TBT</td>
        <td>TTI</td>
      </tr>
      <tr>
        <td rowspan="3">Share of users in accordance with Core Web Vitals thresholds</td>
        <td>good</td>
        <td>52%</td>
        <td>92%</td>
        <td>33%</td>
        <td>35%</td>
        <td>42%</td>
        <td>43%</td>
      </tr>
      <tr>
        <td>needs-improvement</td>
        <td>19%</td>
        <td>5%</td>
        <td>23%</td>
        <td>38%</td>
        <td>16%</td>
        <td>25%</td>
      </tr>
      <tr>
        <td>poor</td>
        <td>29%</td>
        <td>3%</td>
        <td>44%</td>
        <td>27%</td>
        <td>42%</td>
        <td>32%</td>
      </tr>
    </tbody>
    <caption>Metrics for the week of 15-21 March 2021</caption>
  </table>
</div>
<figure>
  <img alt="Core Web Vitals before optimization show roughly 1/3 of users in the poor bucket." decoding="async" height="479" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/ZL7y3ZCpbMcqlOv9mLpV.png?auto=format" srcset="https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/ZL7y3ZCpbMcqlOv9mLpV.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/ZL7y3ZCpbMcqlOv9mLpV.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/ZL7y3ZCpbMcqlOv9mLpV.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/ZL7y3ZCpbMcqlOv9mLpV.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/ZL7y3ZCpbMcqlOv9mLpV.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/ZL7y3ZCpbMcqlOv9mLpV.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/ZL7y3ZCpbMcqlOv9mLpV.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/ZL7y3ZCpbMcqlOv9mLpV.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/ZL7y3ZCpbMcqlOv9mLpV.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/ZL7y3ZCpbMcqlOv9mLpV.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/ZL7y3ZCpbMcqlOv9mLpV.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/ZL7y3ZCpbMcqlOv9mLpV.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/ZL7y3ZCpbMcqlOv9mLpV.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/ZL7y3ZCpbMcqlOv9mLpV.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/ZL7y3ZCpbMcqlOv9mLpV.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/ZL7y3ZCpbMcqlOv9mLpV.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/ZL7y3ZCpbMcqlOv9mLpV.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>Web Vitals values before the improvements.</figcaption>
</figure>
<h2 id="improving-core-web-vitals">Improving Core Web Vitals <a class="w-headline-link" href="https://web.dev/mailru-cwv/#improving-core-web-vitals">#</a></h2>
<p>While plenty of guidance exists for improving Core Web Vitals, every project has unique challenges. For the Mail.ru home page, the following opportunities were identified:</p>
<ul>
<li>Implementing placeholders for ad banners to reduce <a href="https://web.dev/cls/">CLS</a>.</li>
<li>Using server-side rendering (SSR) to reduce <a href="https://web.dev/lcp/">Largest Contentful Paint (LCP)</a>.</li>
<li>Code splitting to reduce LCP and <a href="https://web.dev/fid/">First Input Delay (FID)</a>.</li>
</ul>
<h2 id="skeletons-for-cls-improvement">Skeletons for CLS improvement <a class="w-headline-link" href="https://web.dev/mailru-cwv/#skeletons-for-cls-improvement">#</a></h2>
<p>CLS was one of the worst performing field metrics for the Mail.ru home page. Subsequent profiling of this page in the <a href="https://developer.chrome.com/docs/devtools/evaluate-performance/" rel="noopener"><strong>Performance</strong> panel</a> of Chrome's DevTools revealed that ads were the source of the problem. To improve layout stability, our team decided to use placeholders to reserve space for ads before they load.</p>
<p>When implementing placeholders, the first step is to determine the dimensions of the content that will replace them. Luckily, the desktop version of Mail.ru home page has strictly documented sizes for ads. After talking with the design team, SVG-animated UI skeletons were used as placeholders as <a href="https://uxdesign.cc/what-you-should-know-about-skeleton-screens-a820c45a571a" rel="noopener">they reduce the perceived load time of the content</a>.</p>
<aside class="aside flow bg-state-bad-bg color-state-bad-text"><p class="cluster color-state-bad-text"><span class="aside__icon box-block "><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Error sign">   <path fill-rule="evenodd" clip-rule="evenodd" d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 15v-2h2v2h-2zm0-10v6h2V7h-2z"></path> </svg></span><strong>Caution</strong></p><div class=" flow"> SVG animations are not supported in Internet Explorer 11, consider using CSS if legacy browser support is essential to your application. </div></aside>
<h2 id="the-return-of-ssr">The return of SSR <a class="w-headline-link" href="https://web.dev/mailru-cwv/#the-return-of-ssr">#</a></h2>
<p>To ease the transition from Fest to Svelte, we incrementally rewrote the existing project rather than start over. By March 2021, we had migrated most of the frontend to Svelte, and eventually brought SSR to our production application after triaging and fixing backend performance issues.</p>
<aside class="aside flow bg-state-info-bg color-state-info-text"><div class=" flow"> SSR was not used for the entire application, as <a href="https://malloc.fi/performance-cost-of-server-side-rendered-react-node-js">it can be an expensive process</a> that can delay <a href="https://web.dev/ttfb/">Time to First Byte (TTFB)</a>, which <a href="https://web.dev/optimize-lcp/#optimize-your-server">may affect LCP</a>. We decided to use SSR for crucial content that the user will see on initial render, and offload rendering of hidden content on the client. At the moment, Mail.ru is experimenting with <a href="https://jasonformat.com/islands-architecture/">Islands Architecture</a> to see if further performance gains can be had. </div></aside>
<p>After implementing SSR, the team discovered the cause of CLS regression that initially went unnoticed: the news section was not inserted at the moment of rendering the first content on the page. There was a delay between the initial painting of the page markup provided by the server and the insertion of news section on the client. This behaviour resulted in an ad skeleton shift, which worsened CLS.</p>
<p>Although Chrome's DevTools showed Layout Shift events, we couldn't find the reason for it at first. Though SSR itself wasn't the problem, it helped in discovering the solution later on. Fixing the code responsible for the painting delay improved layout stability of the news component.</p>
<figure>
  <img alt="Active JavaScript just shows an empty page in the news section, hidding the layout jumps." decoding="async" height="443" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/X5ZgXiNPGEqz6oOlvY5v.png?auto=format" srcset="https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/X5ZgXiNPGEqz6oOlvY5v.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/X5ZgXiNPGEqz6oOlvY5v.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/X5ZgXiNPGEqz6oOlvY5v.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/X5ZgXiNPGEqz6oOlvY5v.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/X5ZgXiNPGEqz6oOlvY5v.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/X5ZgXiNPGEqz6oOlvY5v.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/X5ZgXiNPGEqz6oOlvY5v.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/X5ZgXiNPGEqz6oOlvY5v.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/X5ZgXiNPGEqz6oOlvY5v.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/X5ZgXiNPGEqz6oOlvY5v.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/X5ZgXiNPGEqz6oOlvY5v.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/X5ZgXiNPGEqz6oOlvY5v.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/X5ZgXiNPGEqz6oOlvY5v.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/X5ZgXiNPGEqz6oOlvY5v.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/X5ZgXiNPGEqz6oOlvY5v.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/X5ZgXiNPGEqz6oOlvY5v.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/X5ZgXiNPGEqz6oOlvY5v.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>Finding the news painting problem with JavaScript disabled.</figcaption>
</figure>
<figure>
  <img alt="Disabling JavaScript revealed layout shifts, previously hidden from human eyes." decoding="async" height="448" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/aXnxfjZCk4oZN8s6ag5o.png?auto=format" srcset="https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/aXnxfjZCk4oZN8s6ag5o.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/aXnxfjZCk4oZN8s6ag5o.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/aXnxfjZCk4oZN8s6ag5o.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/aXnxfjZCk4oZN8s6ag5o.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/aXnxfjZCk4oZN8s6ag5o.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/aXnxfjZCk4oZN8s6ag5o.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/aXnxfjZCk4oZN8s6ag5o.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/aXnxfjZCk4oZN8s6ag5o.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/aXnxfjZCk4oZN8s6ag5o.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/aXnxfjZCk4oZN8s6ag5o.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/aXnxfjZCk4oZN8s6ag5o.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/aXnxfjZCk4oZN8s6ag5o.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/aXnxfjZCk4oZN8s6ag5o.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/aXnxfjZCk4oZN8s6ag5o.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/aXnxfjZCk4oZN8s6ag5o.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/aXnxfjZCk4oZN8s6ag5o.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/aXnxfjZCk4oZN8s6ag5o.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>Fixing the news painting problem with JavaScript disabled.</figcaption>
</figure>
<p>Another effect SSR can have on CLS is the movement of components before and after hydration, which can lead to further layout shifts. We encountered this on the mobile version in particular and it required paying special attention to the hydrated component markup. A good solution to this problem was transferring as much display logic from JavaScript to CSS when possible.</p>
<h2 id="code-splitting-and-unused-polyfills">Code splitting and unused polyfills <a class="w-headline-link" href="https://web.dev/mailru-cwv/#code-splitting-and-unused-polyfills">#</a></h2>
<p>To improve the perceived page load speed, work was required to decrease LCP and FID values. One way to achieve this is through <a href="https://web.dev/codelab-code-splitting/">code splitting</a>. In addition to the Mail.ru home page itself, our team is developing a widget for portal navigation. It is currently embedded in <a href="https://vk.company/en/projects/" rel="noopener">many of our company's projects</a>.</p>
<p>For historical reasons, the widget is inserted at the very beginning of the page as a synchronously loading script. The share of polyfills in this script grew over time. To limit the negative performance effects of loading these polyfills, we implemented code splitting for both modern and legacy browsers.</p>
<p>We decided against the <a href="https://philipwalton.com/articles/deploying-es2015-code-in-production-today/" rel="noopener"><code>module</code>/<code>nomodule</code> pattern</a> for loading JavaScript bundles for modern or legacy browsers, as the <code>&lt;script&gt;</code> element's <a href="https://developer.mozilla.org/docs/Web/JavaScript/Guide/Modules" rel="noopener"><code>type=&quot;module&quot;</code> attribute</a> didn't target browsers that were modern enough for our needs. To address this, Mail.ru uses an in-house tool for identifying modern browser versions on the backend, and can adapt to those browsers accordingly.</p>
<aside class="aside flow bg-state-info-bg color-state-info-text"><div class=" flow"> The <a href="https://github.com/browserslist/browserslist-useragent">Browserslist Useragent</a> package is a publicly available alternative to custom tooling for comparing a project's <code>.browserslistrc</code> to the User-Agent string in an application backend. However, our team strongly recommends considering using <a href="https://github.com/WICG/ua-client-hints#differential-serving">User-Agent Client Hints</a> (for example, <a href="https://web.dev/user-agent-client-hints/#user-agent-response-and-request-headers">Sec-CH-UA header</a>, as Mail.ru does in our in-house tool. </div></aside>
<p>Once browsers could be identified in the backend, we implemented code splitting for modern and legacy browsers. The result was a 43.3% reduction in size of the synchronously-loaded JavaScript widget for modern browsers. This practice has been applied to some other portal scripts as well.</p>
<p>In addition to bundle size reduction and positive effects on Core Web Vitals, code splitting improves the developer experience as well. Only 3.5% of our users use legacy browsers and that share is on a downward trend, so implementing code-splitting allowed our developers to use the latest browser APIs without introducing the polyfill bloat necessary for legacy browsers to all users.</p>
<h2 id="results">Results <a class="w-headline-link" href="https://web.dev/mailru-cwv/#results">#</a></h2>
<p>After the optimization effort, we observed the mean values for the week of 24-30 May 2021 in our field data:</p>
<div>
  <table>
    <thead>
      <tr>
        <th colspan="2" width="40%">Metrics group name</th>
        <th colspan="3" width="30%">Core Web Vitals</th>
        <th colspan="3" width="30%">Other Web Vitals</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td colspan="2">Metric name</td>
        <td>LCP</td>
        <td>FID</td>
        <td>CLS</td>
        <td>FCP</td>
        <td>TBT</td>
        <td>TTI</td>
      </tr>
      <tr>
        <td rowspan="3">Share of users in accordance with Core Web Vitals thresholds</td>
        <td>good</td>
        <td>58% (+6%)</td>
        <td>93% (+1%)</td>
        <td>93% (+60%)</td>
        <td>43% (+8%)</td>
        <td>49% (+7%)</td>
        <td>51% (+8%)</td>
      </tr>
      <tr>
        <td>needs-improvement</td>
        <td>18%</td>
        <td>4%</td>
        <td>3%</td>
        <td>34%</td>
        <td>17%</td>
        <td>24%</td>
      </tr>
      <tr>
        <td>poor</td>
        <td>24%</td>
        <td>3%</td>
        <td>4%</td>
        <td>23%</td>
        <td>34%</td>
        <td>25%</td>
      </tr>
    </tbody>
    <caption>Metrics for the week of 24-30 March 2021</caption>
  </table>
</div>
<figure>
  <img alt="All metrics in the good bucket improved by at least 1%. CLS even by 60%." decoding="async" height="376" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/7FIE2St8w6EEowUIqV9K.png?auto=format" srcset="https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/7FIE2St8w6EEowUIqV9K.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/7FIE2St8w6EEowUIqV9K.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/7FIE2St8w6EEowUIqV9K.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/7FIE2St8w6EEowUIqV9K.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/7FIE2St8w6EEowUIqV9K.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/7FIE2St8w6EEowUIqV9K.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/7FIE2St8w6EEowUIqV9K.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/7FIE2St8w6EEowUIqV9K.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/7FIE2St8w6EEowUIqV9K.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/7FIE2St8w6EEowUIqV9K.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/7FIE2St8w6EEowUIqV9K.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/7FIE2St8w6EEowUIqV9K.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/7FIE2St8w6EEowUIqV9K.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/7FIE2St8w6EEowUIqV9K.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/7FIE2St8w6EEowUIqV9K.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/7FIE2St8w6EEowUIqV9K.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/7FIE2St8w6EEowUIqV9K.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>Comparison of Web Vitals before and after (change in 'good' group is shown in brackets).</figcaption>
</figure>
<p>The graphs below show changes in web page performance metrics values according to the &quot;Platform&quot;. Note the two important dates on the graphs:</p>
<ul>
<li>23 March 2021: the release of iteration with the last page sections migrated to Svelte;</li>
<li>19 April 2021: the release of iteration with returned SSR and layout modified to correct CLS regressions.</li>
</ul>
<p>The decrease in values from May 1 to May 10 is due to May holidays in Russia.</p>
<figure>
  <img alt="LCP from March to 1 June 2021 showing small improvments over time." decoding="async" height="344" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/8wq9d0uj3EJp5vK6kI49.png?auto=format" srcset="https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/8wq9d0uj3EJp5vK6kI49.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/8wq9d0uj3EJp5vK6kI49.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/8wq9d0uj3EJp5vK6kI49.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/8wq9d0uj3EJp5vK6kI49.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/8wq9d0uj3EJp5vK6kI49.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/8wq9d0uj3EJp5vK6kI49.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/8wq9d0uj3EJp5vK6kI49.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/8wq9d0uj3EJp5vK6kI49.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/8wq9d0uj3EJp5vK6kI49.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/8wq9d0uj3EJp5vK6kI49.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/8wq9d0uj3EJp5vK6kI49.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/8wq9d0uj3EJp5vK6kI49.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/8wq9d0uj3EJp5vK6kI49.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/8wq9d0uj3EJp5vK6kI49.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/8wq9d0uj3EJp5vK6kI49.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/8wq9d0uj3EJp5vK6kI49.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/8wq9d0uj3EJp5vK6kI49.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>LCP graph in 'Platform': 16 March to 1 June 2021.</figcaption>
</figure>
<figure>
  <img alt="FID from 16 March to 1 June 2021 showing tiny improvements on a high level." decoding="async" height="345" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/bxANzHIw78TvdS1RFyWG.png?auto=format" srcset="https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/bxANzHIw78TvdS1RFyWG.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/bxANzHIw78TvdS1RFyWG.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/bxANzHIw78TvdS1RFyWG.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/bxANzHIw78TvdS1RFyWG.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/bxANzHIw78TvdS1RFyWG.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/bxANzHIw78TvdS1RFyWG.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/bxANzHIw78TvdS1RFyWG.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/bxANzHIw78TvdS1RFyWG.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/bxANzHIw78TvdS1RFyWG.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/bxANzHIw78TvdS1RFyWG.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/bxANzHIw78TvdS1RFyWG.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/bxANzHIw78TvdS1RFyWG.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/bxANzHIw78TvdS1RFyWG.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/bxANzHIw78TvdS1RFyWG.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/bxANzHIw78TvdS1RFyWG.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/bxANzHIw78TvdS1RFyWG.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/bxANzHIw78TvdS1RFyWG.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>FID graph in 'Platform': 16 March to 1 June 2021.</figcaption>
</figure>
<figure>
  <img alt="CLS from 16 March to 1 June 2021 showing huge improvements starting at April 23rd." decoding="async" height="344" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/7woJXpiHLZU3l7PCdspi.png?auto=format" srcset="https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/7woJXpiHLZU3l7PCdspi.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/7woJXpiHLZU3l7PCdspi.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/7woJXpiHLZU3l7PCdspi.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/7woJXpiHLZU3l7PCdspi.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/7woJXpiHLZU3l7PCdspi.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/7woJXpiHLZU3l7PCdspi.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/7woJXpiHLZU3l7PCdspi.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/7woJXpiHLZU3l7PCdspi.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/7woJXpiHLZU3l7PCdspi.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/7woJXpiHLZU3l7PCdspi.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/7woJXpiHLZU3l7PCdspi.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/7woJXpiHLZU3l7PCdspi.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/7woJXpiHLZU3l7PCdspi.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/7woJXpiHLZU3l7PCdspi.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/7woJXpiHLZU3l7PCdspi.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/7woJXpiHLZU3l7PCdspi.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/7woJXpiHLZU3l7PCdspi.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>CLS graph in 'Platform': 16 March to 1 June 2021.</figcaption>
</figure>
<p>Results obtained using the &quot;Platform&quot; are in line with the growth of metric values in <a href="https://developer.chrome.com/docs/crux/" rel="noopener">Chrome UX Report (CrUX)</a>.</p>
<figure>
  <img alt="LCP metric from CrUX showing increase from 51% to 58% in the good bucket." decoding="async" height="499" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/41Czys52EyEMyYv3fI2w.png?auto=format" srcset="https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/41Czys52EyEMyYv3fI2w.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/41Czys52EyEMyYv3fI2w.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/41Czys52EyEMyYv3fI2w.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/41Czys52EyEMyYv3fI2w.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/41Czys52EyEMyYv3fI2w.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/41Czys52EyEMyYv3fI2w.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/41Czys52EyEMyYv3fI2w.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/41Czys52EyEMyYv3fI2w.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/41Czys52EyEMyYv3fI2w.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/41Czys52EyEMyYv3fI2w.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/41Czys52EyEMyYv3fI2w.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/41Czys52EyEMyYv3fI2w.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/41Czys52EyEMyYv3fI2w.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/41Czys52EyEMyYv3fI2w.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/41Czys52EyEMyYv3fI2w.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/41Czys52EyEMyYv3fI2w.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/41Czys52EyEMyYv3fI2w.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>LCP metric change in CrUX in 2021.</figcaption>
</figure>
<figure>
  <img alt="FID metric from CrUX showing slight improvment in FID from 91% to 93% in good bucket." decoding="async" height="498" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/c8LWvsC52Q58uvKOIZXc.png?auto=format" srcset="https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/c8LWvsC52Q58uvKOIZXc.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/c8LWvsC52Q58uvKOIZXc.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/c8LWvsC52Q58uvKOIZXc.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/c8LWvsC52Q58uvKOIZXc.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/c8LWvsC52Q58uvKOIZXc.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/c8LWvsC52Q58uvKOIZXc.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/c8LWvsC52Q58uvKOIZXc.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/c8LWvsC52Q58uvKOIZXc.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/c8LWvsC52Q58uvKOIZXc.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/c8LWvsC52Q58uvKOIZXc.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/c8LWvsC52Q58uvKOIZXc.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/c8LWvsC52Q58uvKOIZXc.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/c8LWvsC52Q58uvKOIZXc.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/c8LWvsC52Q58uvKOIZXc.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/c8LWvsC52Q58uvKOIZXc.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/c8LWvsC52Q58uvKOIZXc.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/c8LWvsC52Q58uvKOIZXc.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>FID metric change in CrUX in 2021.</figcaption>
</figure>
<figure>
  <img alt="CLS metric in CrUX showing hugh improvements from 46% to 98% in the good bucket." decoding="async" height="492" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/ilAn6vKt93uh4ioqGKj1.png?auto=format" srcset="https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/ilAn6vKt93uh4ioqGKj1.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/ilAn6vKt93uh4ioqGKj1.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/ilAn6vKt93uh4ioqGKj1.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/ilAn6vKt93uh4ioqGKj1.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/ilAn6vKt93uh4ioqGKj1.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/ilAn6vKt93uh4ioqGKj1.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/ilAn6vKt93uh4ioqGKj1.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/ilAn6vKt93uh4ioqGKj1.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/ilAn6vKt93uh4ioqGKj1.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/ilAn6vKt93uh4ioqGKj1.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/ilAn6vKt93uh4ioqGKj1.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/ilAn6vKt93uh4ioqGKj1.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/ilAn6vKt93uh4ioqGKj1.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/ilAn6vKt93uh4ioqGKj1.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/ilAn6vKt93uh4ioqGKj1.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/ilAn6vKt93uh4ioqGKj1.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/dB6B4Sr8kaaT0KZujRBFC303oFR2/ilAn6vKt93uh4ioqGKj1.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>CLS metric change in CrUX in 2021.</figcaption>
</figure>
<p>A comparison of mean user session duration values a week before the roll-out of initial improvements and a week after the roll-out shows 2.7% growth. Moreover, there is an overall significant increase in conversion in most sections of the page. In particular, conversions to the Mail.ru email app increased by 11.6%, the conversion of the news section increased by 13.5%.</p>
<div class="stats">
  <div class="stats__item">
    <p class="stats__figure">181<sub>%</sub></p>
    <p>Boost of share of good CLS threshold</p>
  </div>
  <div class="stats__item">
    <p class="stats__figure">2.7<sub>%</sub></p>
    <p>Higher mean session duration</p>
  </div>
  <div class="stats__item">
    <p class="stats__figure">13.5<sub>%</sub></p>
    <p>Increase of news section conversion rate</p>
  </div>
</div>
<p>The most unexpected result we got was a 17.4% increase in the Click-Through Rate (CTR) of the marketing banner (its rendering time was significantly reduced by the introduction of SSR and preload tags).</p>
<aside class="aside flow bg-state-info-bg color-state-info-text"><div class=" flow"> An unintended consequence of our work was that we saw a decrease in the conversion rate of some sections on the page. The search section in particular saw a decrease of 6.7%. Our team associates this with a change in the rendering of the page, as earlier on, this component was one of the first to render. We were able to reverse this decrease by introducing new product features into this section. </div></aside>
<p>After analyzing the rest of the sections on the page, we noticed significant performance improvement in the vast majority of them. Even for sections such as Weather and Coronavirus—which are not key on our page—we see an increase in conversion by 9.6% and 9.5%, respectively.</p>
<h2 id="conclusion">Conclusion <a class="w-headline-link" href="https://web.dev/mailru-cwv/#conclusion">#</a></h2>
<p>Improving performance is challenging in that the work involved may be prolonged. You should regularly monitor changes in metrics over time and ensure that all new product features don't cause regressions in Core Web Vitals. To achieve this, we monitor changes in Core Web Vitals in our <a href="https://web.dev/performance-budgets-101/">performance budget</a>.</p>
<p>Most importantly, we stressed the importance of Core Web Vitals to all members of our product team, from managers and designers to testers and QA. Each team member should be aware of performance metrics and be empowered to improve them. We also incorporate performance optimization objectives into our business processes on a regular cadence. Successfully providing a high-quality user experience is only possible through a joint effort by all team members.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[How Renault improved its bounce and conversion rates by measuring and optimizing Largest Contentful Paint]]></title>
<description><![CDATA[Groupe Renault is a French multinational automobile manufacturer with a presence in over 130 countries. For an automotive group such as Renault, performant brand sites driving more user engagement and conversions mean more business. All of its brand sites aim at providing the best user experience...]]></description>
<link>https://tsecurity.de/de/1725696/it+betriebssysteme/web+tipps/how+renault+improved+its+bounce+and+conversion+rates+by+measuring+and+optimizing+largest+contentful+paint/</link>
<pubDate>Thu, 08 Dec 2022 19:45:05 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Groupe Renault is a French multinational automobile manufacturer with a presence in over 130 countries. For an automotive group such as Renault, performant brand sites driving more user engagement and conversions mean more business. All of its brand sites aim at providing the best user experience at scale while maintaining flexibility of content and features for localized sites. In this context, performance monitoring is a key stake for the customer experience team which is in charge of developing and maintaining the global platform.</p>
<h2 id="measuring-the-business-impact-of-core-web-vitals">Measuring the business impact of Core Web Vitals <a class="w-headline-link" href="https://web.dev/renault/#measuring-the-business-impact-of-core-web-vitals">#</a></h2>
<h3 id="measurement-in-google-analytics">Measurement in Google Analytics <a class="w-headline-link" href="https://web.dev/renault/#measurement-in-google-analytics">#</a></h3>
<p>Working with fifty-five, its global data partner, Renault set up the <a href="https://github.com/GoogleChrome/web-vitals" rel="noopener">web-vitals</a> library, which allows sending to Google Analytics all the Web Vitals metrics from real users in a way that accurately matches how they're measured by Chrome and reported to other Google tools.</p>
<p>The following analysis showcases a dataset captured using these tools over four months between December 2020 and March 2021.</p>
<h3 id="optimized-lcp-strongly-correlates-with-user-engagement-and-business-metrics">Optimized LCP strongly correlates with user engagement and business metrics <a class="w-headline-link" href="https://web.dev/renault/#optimized-lcp-strongly-correlates-with-user-engagement-and-business-metrics">#</a></h3>
<p>The teams have identified a particularly strong correlation between a low Largest Contentful Paint (LCP) and favorable bounce rates and conversion rates, shown in the visualization below.</p>
<img alt="A chart showing a negative correlation between LCP and bounce rate and conversion rate." decoding="async" height="372" loading="lazy" sizes="(min-width: 782px) 782px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/A3ghcv1u3qxQKjgnb5Ru.png?auto=format" srcset="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/A3ghcv1u3qxQKjgnb5Ru.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/A3ghcv1u3qxQKjgnb5Ru.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/A3ghcv1u3qxQKjgnb5Ru.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/A3ghcv1u3qxQKjgnb5Ru.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/A3ghcv1u3qxQKjgnb5Ru.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/A3ghcv1u3qxQKjgnb5Ru.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/A3ghcv1u3qxQKjgnb5Ru.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/A3ghcv1u3qxQKjgnb5Ru.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/A3ghcv1u3qxQKjgnb5Ru.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/A3ghcv1u3qxQKjgnb5Ru.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/A3ghcv1u3qxQKjgnb5Ru.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/A3ghcv1u3qxQKjgnb5Ru.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/A3ghcv1u3qxQKjgnb5Ru.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/A3ghcv1u3qxQKjgnb5Ru.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/A3ghcv1u3qxQKjgnb5Ru.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/A3ghcv1u3qxQKjgnb5Ru.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/A3ghcv1u3qxQKjgnb5Ru.png?auto=format&w=1564 1564w" width="782" />
<p>The dataset captures over 10 million visits in 33 countries over four months and shows how lower LCP measures correlates with:</p>
<ul>
<li>Lower bounce rates</li>
<li>More conversions (lead forms completed)</li>
</ul>
<p>Interestingly, as the website runs as a Single Page Application (SPA), all these measures are captured on landing pages only. The data shows that it is worth optimizing the website until the LCP reaches below 1 second. The group's brand sites can never be too optimized!</p>
<blockquote>
<p>This dataset not only shows the negative correlation between LCP and business metrics, but also highlights performance discrepancies among the best performing landing pages. In the context of this website, getting LCP under 1 second leads to large increases in conversions and reductions in bounce.</p>
<p><cite>Eja Rakotoarimanana, Consultant, fifty-five</cite></p>
</blockquote>
<p>1 second LCP improvement can lead to a 14 percentage points (ppt) decrease in bounce rate and 13% increase in conversions.</p>
<div>
  <table>
    <thead>
      <tr>
        <th>1 second LCP improvement</th>
        <th>Result</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>LCP around 1&nbsp;s</td>
        <td>+13% CVR</td>
      </tr>
      <tr>
        <td>LCP under 1.6&nbsp;s</td>
        <td>-14 ppt bounce rate</td>
      </tr>
      <tr>
        <td>LCP above 1.6&nbsp;s</td>
        <td>-5 ppt bounce rate</td>
      </tr>
    </tbody>
  </table>
</div>
<aside class="aside flow bg-state-info-bg color-state-info-text"><div class=" flow"> The numbers above are derived from linear regressions computed over the dataset to understand the relationship between LCP and other technical and business metrics. The numbers linking LCP and bounce show that the marginal gain on bounce rates increases as LCP gets low (below 1.6 seconds). </div></aside>
<h2 id="renaults-approach-to-optimizing-core-web-vitals-at-scale">Renault's approach to optimizing Core Web Vitals at scale <a class="w-headline-link" href="https://web.dev/renault/#renaults-approach-to-optimizing-core-web-vitals-at-scale">#</a></h2>
<p>Since early 2020, in the brand's top 5 European markets, the number of visitors experiencing a <strong>fast LCP (under 2.5 s) has improved by an average of 22 ppt for Renault domains</strong> (from 51% to 73%).</p>
<img alt="A chart showing how Renault&#x27;s LCP measured by RUM improved over time by 22 ppt." decoding="async" height="365" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/itCYyzXJL57ZM1t31L4B.jpg?auto=format" srcset="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/itCYyzXJL57ZM1t31L4B.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/itCYyzXJL57ZM1t31L4B.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/itCYyzXJL57ZM1t31L4B.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/itCYyzXJL57ZM1t31L4B.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/itCYyzXJL57ZM1t31L4B.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/itCYyzXJL57ZM1t31L4B.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/itCYyzXJL57ZM1t31L4B.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/itCYyzXJL57ZM1t31L4B.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/itCYyzXJL57ZM1t31L4B.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/itCYyzXJL57ZM1t31L4B.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/itCYyzXJL57ZM1t31L4B.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/itCYyzXJL57ZM1t31L4B.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/itCYyzXJL57ZM1t31L4B.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/itCYyzXJL57ZM1t31L4B.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/itCYyzXJL57ZM1t31L4B.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/itCYyzXJL57ZM1t31L4B.jpg?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/itCYyzXJL57ZM1t31L4B.jpg?auto=format&w=1600 1600w" width="800" />
<p>Here is how they've approached it.</p>
<h3 id="a-central-optimization-of-the-spa">A central optimization of the SPA <a class="w-headline-link" href="https://web.dev/renault/#a-central-optimization-of-the-spa">#</a></h3>
<p>From a platform standpoint, performance has been a priority for years and including Core Web Vitals (CWV) as key metrics was a smooth process. Central teams have set up a comprehensive monitoring solution (with <a href="https://developer.chrome.com/docs/lighthouse/overview/" rel="noopener">Google Lighthouse</a> and <a href="https://developer.chrome.com/docs/crux/api/" rel="noopener">Chrome UX Report API</a>) and established a performance culture across the organization. There were several strategies to optimize their Single Page Application, including:</p>
<ul>
<li><a href="https://web.dev/rendering-on-the-web/">Server side rendering (SSR)</a> to ensure a fast First Contentful Paint (FCP).</li>
<li><a href="https://web.dev/codelab-code-splitting/">Code splitting</a> to deliver only the JS and CSS chunks needed for the landing page (for better LCP and FID).</li>
<li><a href="https://web.dev/content-delivery-networks/">CDN</a> with a high level of resource caching (including a <a href="https://aws.amazon.com/lambda/edge/" rel="noopener">Lambda@Edge</a> to sort and remove unnecessary query parameters). This helped avoid the drawbacks of SSR (slower TTFB due to server computation) and deliver content closer to the final user (for better TTFB and LCP).</li>
<li><a href="https://web.dev/codelab-text-compression-brotli/">Optimizing compression with brotli</a> to reduce the code size.</li>
<li><a href="https://web.dev/performance-http2/">HTTP2</a> to enable multiplexing of requests and responses.</li>
<li>Using responsive images with <a href="https://web.dev/serve-images-webp/">WebP support</a> and <a href="https://web.dev/use-srcset-to-automatically-choose-the-right-image/#help-the-browser-choose-the-right-image-size"><code>srcset</code></a> and <a href="https://web.dev/use-srcset-to-automatically-choose-the-right-image/#what-about-the-display-size-of-the-image"><code>sizes</code></a> attribute to serve the most appropriate image size and format to users.</li>
<li>Lazy-loading images, videos, and iframes using <a href="https://web.dev/lazy-loading-images/#images-inline-intersection-observer"><code>IntersectionObserver</code></a> and FPOs (small 1 KB thumbnails).</li>
<li>Removing blocking scripts and <a href="https://web.dev/serve-modern-code-to-modern-browsers/#use-@babelpreset-env">adjusting transpilation to browser targets</a> to reduce JS file sizes (by avoiding unnecessary polyfills).</li>
<li><a href="https://support.google.com/tagmanager/answer/2772488?hl=en" rel="noopener">Reducing the size of the Google Tag Manager container</a> to load third-party scripts only where and when needed.</li>
<li><a href="https://web.dev/font-best-practices/#use-fewer-web-fonts">Reducing the number of custom fonts</a>, <a href="https://web.dev/font-best-practices/#best-practices-2">using woff/woff2 formats with unicode-range</a>, and  <a href="https://developer.chrome.com/docs/lighthouse/performance/font-display//#how-to-avoid-showing-invisible-text" rel="noopener"><code>font-display:swap</code></a> to reduce font file sizes and show text as soon as possible even if custom fonts are not yet available.</li>
<li><a href="https://web.dev/preload-responsive-images/">Preloading hero images</a> which are often LCP elements.</li>
</ul>
<p>The team is still working on future improvements such as:</p>
<ul>
<li><a href="https://en.wikipedia.org/wiki/HTTP/2_Server_Push" rel="noopener">Server push</a> to improve FCP by delivering CSS faster. (On standby due to lack of AWS support and <a href="https://groups.google.com/a/chromium.org/g/blink-dev/c/K3rYLvmQUBY/m/vOWBKZGoAQAJ?pli=1" rel="noopener">deprecation proposal</a>.</li>
<li><a href="https://developers.google.com/web/updates/2019/02/rendering-on-the-web#rehydration" rel="noopener">Progressive hydration</a> to improve FID.</li>
<li><a href="https://web.dev/codelab-serve-modern-code/#use-lessscript-type%22module%22greater">ES6 Module support</a> to deliver a faster experience by using ES6 builds for modern browsers.</li>
</ul>
<p>The SPA approach can be beneficial for performance as a full page reload is not necessary when users navigate across pages. That being said, current CWV measurement methodology on SPA can be perceived as a downside as route transitions are not being measured; hence comparatively faster page loads within a session, due to UI caching, are not taken into account. It also makes it difficult to compare CWV metrics against a Multi Page Application competitor website where a warm cache would bring the measures down on each page a user would browse during a session. Read the <a href="https://web.dev/vitals-spa-faq/">Web Vitals SPA FAQ</a> for more details.</p>
<p>These are <a href="https://web.dev/vitals-spa-faq/">known limitations</a> that are being investigated by the <a href="https://github.com/GoogleChrome/web-vitals/issues/119#issuecomment-767298992" rel="noopener">Chrome product teams</a>. An <a href="https://web.dev/better-layout-shift-metric/">update to the CLS metric</a> has already been shipped to improve measurement on SPAs.</p>
<blockquote>
<p>Performance requires constant monitoring as various technical teams can impact it. Despite limitations in how they are measured on SPAs, CWV metrics allow us to track the impact of the actions our teams take. Hopefully route transitions will be taken into account soon!</p>
<p><cite>Cedric Bazureau, Tech Lead, Renault</cite></p>
</blockquote>
<h2 id="local-guidelines-promoting-performance-optimization-as-a-shared-responsibility">Local guidelines promoting performance optimization as a shared responsibility <a class="w-headline-link" href="https://web.dev/renault/#local-guidelines-promoting-performance-optimization-as-a-shared-responsibility">#</a></h2>
<p>Performance is communicated as both a global (central) and local responsibility. Teams have put together a series of best practices that local content owners are meant to follow. Here are a few examples from these guidelines:</p>
<ul>
<li>Optimize local Google Tag Manager container to improve site performance. for example conditionally trigger certain tags.</li>
<li>Limit size of video content by compressing it using internal tools or hosting it on a external platform (such as YouTube).</li>
<li>Avoid uploading pictures via Google Tag Manager.</li>
</ul>
<blockquote>
<p>A deep understanding of our digital performance is key to ensuring a continuous optimization of our brand sites. Our customer experience team's approach is to provide a global platform that positively impacts local teams' business outcomes while empowering these teams with guidelines and best practices to maintain this performance at a high level.</p>
<p><cite>Alexandre Perruche, Head of Performance, Renault</cite></p>
</blockquote>
<p>To conclude, website performance has always been a priority at Renault, and its website platform is continuously optimized. Measuring Core Web Vitals alongside business metrics has allowed them to promote this topic as a globally shared responsibility, and local guidelines equip teams with the ability to participate in this beneficial effort.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Improving Cumulative Layout Shift at Telegraph Media Group]]></title>
<description><![CDATA[Chris is a principal software engineer at The Telegraph. 
The visual stability challenge #
Layout shifts can be very disruptive. At Telegraph Media Group (TMG) visual stability
is particularly important because readers predominantly use our applications to
consume the news. If the layout shifts w...]]></description>
<link>https://tsecurity.de/de/1725697/it+betriebssysteme/web+tipps/improving+cumulative+layout+shift+at+telegraph+media+group/</link>
<pubDate>Thu, 08 Dec 2022 19:45:05 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<aside class="aside flow bg-state-info-bg color-state-info-text"><div class=" flow"> Chris is a principal software engineer at <a href="https://www.telegraph.co.uk/">The Telegraph</a>. </div></aside>
<h2 id="the-visual-stability-challenge">The visual stability challenge <a class="w-headline-link" href="https://web.dev/telegraph/#the-visual-stability-challenge">#</a></h2>
<p>Layout shifts can be very disruptive. At Telegraph Media Group (TMG) visual stability
is particularly important because readers predominantly use our applications to
consume the news. If the layout shifts while reading an article, the reader will
likely lose their place. This can be a frustrating and distracting experience.</p>
<p>From an engineering perspective, ensuring the pages don't shift and interrupt
the reader can be challenging, especially when areas of your application are
loaded asynchronously and added to the page dynamically.</p>
<p>At TMG, we have multiple teams contributing code client-side:</p>
<ul>
<li><strong>Core engineering.</strong> Implementing third-party solutions to power areas such
as content recommendations and commenting.</li>
<li><strong>Marketing.</strong> Running A/B tests to assess how our readers interact with new
features or changes.</li>
<li><strong>Advertising.</strong> Managing advert requests and advert pre-bidding.</li>
<li><strong>Editorial.</strong> Embedding code within articles such as tweets or videos, as
well as custom widgets (for example, Coronavirus case tracker).</li>
</ul>
<p>Ensuring each of these teams do not cause the layout of the page to jolt can be
difficult. Using the <a href="https://web.dev/cls/">Cumulative Layout Shift</a> metric to measure how
often it's occurring for our readers, the teams got more insight into the real
user experience and a clear goal to strive to. This resulted in our 75th
percentile CLS improving from 0.25 to 0.1 and our passing bucket growing from
57% to 72%.</p>
<div class="stats">
  <div class="stats__item">
    <p class="stats__figure">250<sub>%</sub></p>
    <p>75th percentile CLS improvement</p>
  </div>
  <div class="stats__item">
    <p class="stats__figure">15<sub>%</sub></p>
    <p>More users with good CLS score</p>
  </div>
</div>
<h2 id="where-we-started">Where we started <a class="w-headline-link" href="https://web.dev/telegraph/#where-we-started">#</a></h2>
<p>Using <a href="https://web.dev/chrome-ux-report-data-studio-dashboard/">CrUX dashboards</a> we were able
to establish that our pages were shifting more than we'd like.</p>
<figure>
    <img alt="CrUX Dashboard showing about 55-60% good, 15% needs improvement, and 25% of poor scores." decoding="async" height="472" loading="lazy" sizes="(min-width: 780px) 780px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/JvZwGUWfJ0bxKBQmD11P.png?auto=format" srcset="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/JvZwGUWfJ0bxKBQmD11P.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/JvZwGUWfJ0bxKBQmD11P.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/JvZwGUWfJ0bxKBQmD11P.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/JvZwGUWfJ0bxKBQmD11P.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/JvZwGUWfJ0bxKBQmD11P.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/JvZwGUWfJ0bxKBQmD11P.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/JvZwGUWfJ0bxKBQmD11P.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/JvZwGUWfJ0bxKBQmD11P.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/JvZwGUWfJ0bxKBQmD11P.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/JvZwGUWfJ0bxKBQmD11P.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/JvZwGUWfJ0bxKBQmD11P.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/JvZwGUWfJ0bxKBQmD11P.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/JvZwGUWfJ0bxKBQmD11P.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/JvZwGUWfJ0bxKBQmD11P.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/JvZwGUWfJ0bxKBQmD11P.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/JvZwGUWfJ0bxKBQmD11P.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/JvZwGUWfJ0bxKBQmD11P.png?auto=format&w=1560 1560w" width="780" />
    <figcaption>Our Cumulative Layout Shift scores between June 2020 and February 2021.</figcaption>
</figure>
<p>We ideally wanted at least 75% of our readers to have a &quot;good&quot; experience so we
started identifying the causes of the layout instability.</p>
<h2 id="how-we-measured-the-layout-shifts">How we measured the layout shifts <a class="w-headline-link" href="https://web.dev/telegraph/#how-we-measured-the-layout-shifts">#</a></h2>
<p>We used a combination of <a href="https://developer.chrome.com/docs/devtools/" rel="noopener">Chrome
DevTools</a> and
<a href="https://www.webpagetest.org/" rel="noopener">WebPageTest</a> to help recognize what was causing
the layout to shift. In DevTools, we used the <a href="https://developer.chrome.com/blog/new-in-devtools-84/#cls" rel="noopener">Experience
section</a> of the
<a href="https://developer.chrome.com/docs/devtools/evaluate-performance/" rel="noopener">Performance</a>
tab to highlight individual instances of shifting layout and how they
contributed to the overall score.</p>
<figure>
    <img alt="The front page of Telegraph with an ad in the header highlughted with a blue overlay." decoding="async" height="465" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/zfpYNnnpwtcG7YAmf7E5.jpg?auto=format" srcset="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/zfpYNnnpwtcG7YAmf7E5.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/zfpYNnnpwtcG7YAmf7E5.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/zfpYNnnpwtcG7YAmf7E5.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/zfpYNnnpwtcG7YAmf7E5.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/zfpYNnnpwtcG7YAmf7E5.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/zfpYNnnpwtcG7YAmf7E5.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/zfpYNnnpwtcG7YAmf7E5.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/zfpYNnnpwtcG7YAmf7E5.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/zfpYNnnpwtcG7YAmf7E5.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/zfpYNnnpwtcG7YAmf7E5.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/zfpYNnnpwtcG7YAmf7E5.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/zfpYNnnpwtcG7YAmf7E5.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/zfpYNnnpwtcG7YAmf7E5.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/zfpYNnnpwtcG7YAmf7E5.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/zfpYNnnpwtcG7YAmf7E5.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/zfpYNnnpwtcG7YAmf7E5.jpg?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/zfpYNnnpwtcG7YAmf7E5.jpg?auto=format&w=1600 1600w" width="800" />
    <figcaption>Identifying a layout shift caused by the advert loading client-side above the header using the Experience section of Chrome DevTools.</figcaption>
</figure>
<p><a href="https://www.webpagetest.org/" rel="noopener">WebPageTest</a> helpfully highlights where the
layout shift occurs in the timeline view when &quot;Highlight Layout Shifts&quot; is
selected.</p>
<figure>
    <img alt="WebPageTest filmstrip view of the Telegraph website with the layoutshift highlighted with a red overlay." decoding="async" height="369" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/qaa60OEaFLoKVzWtntVw.png?auto=format" srcset="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/qaa60OEaFLoKVzWtntVw.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/qaa60OEaFLoKVzWtntVw.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/qaa60OEaFLoKVzWtntVw.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/qaa60OEaFLoKVzWtntVw.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/qaa60OEaFLoKVzWtntVw.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/qaa60OEaFLoKVzWtntVw.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/qaa60OEaFLoKVzWtntVw.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/qaa60OEaFLoKVzWtntVw.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/qaa60OEaFLoKVzWtntVw.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/qaa60OEaFLoKVzWtntVw.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/qaa60OEaFLoKVzWtntVw.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/qaa60OEaFLoKVzWtntVw.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/qaa60OEaFLoKVzWtntVw.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/qaa60OEaFLoKVzWtntVw.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/qaa60OEaFLoKVzWtntVw.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/qaa60OEaFLoKVzWtntVw.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/qaa60OEaFLoKVzWtntVw.png?auto=format&w=1600 1600w" width="800" />
    <figcaption>WebPageTest highlighting where the layout shifted.</figcaption>
</figure>
<p>After reviewing each shift across our most visited templates we came up with a
list of ideas as to how we could improve.</p>
<h2 id="reducing-layout-shifts">Reducing layout shifts <a class="w-headline-link" href="https://web.dev/telegraph/#reducing-layout-shifts">#</a></h2>
<p>We focused on four areas where we could reduce layout shifts:</p>
<ul>
<li>adverts</li>
<li>images</li>
<li>headers</li>
<li>embeds</li>
</ul>
<h3 id="adverts">Adverts <a class="w-headline-link" href="https://web.dev/telegraph/#adverts">#</a></h3>
<p>The adverts load after the initial paint via JavaScript. Some of the containers
they loaded in did not have any reserved height on them.</p>
<figure>
<img alt="Animation of the Telegraph website. The list of stories gets pushed down when an ad loads above it." decoding="async" height="438" loading="lazy" sizes="(min-width: 387px) 387px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/klpZyS7okn4DwfPbL5qZ.gif?auto=format" srcset="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/klpZyS7okn4DwfPbL5qZ.gif?auto=format&w=200 200w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/klpZyS7okn4DwfPbL5qZ.gif?auto=format&w=228 228w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/klpZyS7okn4DwfPbL5qZ.gif?auto=format&w=260 260w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/klpZyS7okn4DwfPbL5qZ.gif?auto=format&w=296 296w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/klpZyS7okn4DwfPbL5qZ.gif?auto=format&w=338 338w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/klpZyS7okn4DwfPbL5qZ.gif?auto=format&w=385 385w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/klpZyS7okn4DwfPbL5qZ.gif?auto=format&w=439 439w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/klpZyS7okn4DwfPbL5qZ.gif?auto=format&w=500 500w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/klpZyS7okn4DwfPbL5qZ.gif?auto=format&w=571 571w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/klpZyS7okn4DwfPbL5qZ.gif?auto=format&w=650 650w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/klpZyS7okn4DwfPbL5qZ.gif?auto=format&w=741 741w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/klpZyS7okn4DwfPbL5qZ.gif?auto=format&w=774 774w" width="387" />
    <figcaption>The "More stories" block below the advert is shifted down after the advert loads.</figcaption>
</figure>
<p>Although we don't know the exact height, we're able to reserve space by using
the most common advert size loaded in the slot.</p>
<figure>
    <img alt="Animation of the Telegraph website. A placeholder rectangle for the ad is placed above the list of stories. The ad loads in place of the placeholder without causing a layout shift." decoding="async" height="438" loading="lazy" sizes="(min-width: 387px) 387px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/aA7rq5NGK1f1cA5FkT8n.gif?auto=format" srcset="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/aA7rq5NGK1f1cA5FkT8n.gif?auto=format&w=200 200w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/aA7rq5NGK1f1cA5FkT8n.gif?auto=format&w=228 228w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/aA7rq5NGK1f1cA5FkT8n.gif?auto=format&w=260 260w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/aA7rq5NGK1f1cA5FkT8n.gif?auto=format&w=296 296w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/aA7rq5NGK1f1cA5FkT8n.gif?auto=format&w=338 338w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/aA7rq5NGK1f1cA5FkT8n.gif?auto=format&w=385 385w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/aA7rq5NGK1f1cA5FkT8n.gif?auto=format&w=439 439w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/aA7rq5NGK1f1cA5FkT8n.gif?auto=format&w=500 500w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/aA7rq5NGK1f1cA5FkT8n.gif?auto=format&w=571 571w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/aA7rq5NGK1f1cA5FkT8n.gif?auto=format&w=650 650w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/aA7rq5NGK1f1cA5FkT8n.gif?auto=format&w=741 741w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/aA7rq5NGK1f1cA5FkT8n.gif?auto=format&w=774 774w" width="387" />
    <figcaption>By reserving space for the advert, the "More stories" block below remains static before and after the advert loads.</figcaption>
</figure>
<p>We had misjudged the average height of the advert in some cases. For tablet
readers, the slot was collapsing.</p>
<figure>
<img alt="Animation of a tablet view of the Telegraph website. The placeholder slot is bigger than the ad so the content shifts up after ad loads." decoding="async" height="313" loading="lazy" sizes="(min-width: 600px) 600px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/by1xeAvvBKNjiZTVbQ1v.gif?auto=format" srcset="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/by1xeAvvBKNjiZTVbQ1v.gif?auto=format&w=200 200w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/by1xeAvvBKNjiZTVbQ1v.gif?auto=format&w=228 228w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/by1xeAvvBKNjiZTVbQ1v.gif?auto=format&w=260 260w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/by1xeAvvBKNjiZTVbQ1v.gif?auto=format&w=296 296w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/by1xeAvvBKNjiZTVbQ1v.gif?auto=format&w=338 338w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/by1xeAvvBKNjiZTVbQ1v.gif?auto=format&w=385 385w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/by1xeAvvBKNjiZTVbQ1v.gif?auto=format&w=439 439w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/by1xeAvvBKNjiZTVbQ1v.gif?auto=format&w=500 500w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/by1xeAvvBKNjiZTVbQ1v.gif?auto=format&w=571 571w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/by1xeAvvBKNjiZTVbQ1v.gif?auto=format&w=650 650w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/by1xeAvvBKNjiZTVbQ1v.gif?auto=format&w=741 741w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/by1xeAvvBKNjiZTVbQ1v.gif?auto=format&w=845 845w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/by1xeAvvBKNjiZTVbQ1v.gif?auto=format&w=964 964w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/by1xeAvvBKNjiZTVbQ1v.gif?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/by1xeAvvBKNjiZTVbQ1v.gif?auto=format&w=1200 1200w" width="600" />
<figcaption>The advert slot collapsing after it loaded for readers on tablet sized devices.</figcaption>
</figure>
<p>We revisited the slot and adjusted the height to use the most common size.</p>
<figure>
<img alt="Animation of a tablet view of the Telegraph website. With the placeholder matching the ad size, there&#x27;s no layoutshift when the ad loads." decoding="async" height="205" loading="lazy" sizes="(min-width: 600px) 600px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/arV5fG7O7CUUHb7mdt54.gif?auto=format" srcset="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/arV5fG7O7CUUHb7mdt54.gif?auto=format&w=200 200w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/arV5fG7O7CUUHb7mdt54.gif?auto=format&w=228 228w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/arV5fG7O7CUUHb7mdt54.gif?auto=format&w=260 260w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/arV5fG7O7CUUHb7mdt54.gif?auto=format&w=296 296w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/arV5fG7O7CUUHb7mdt54.gif?auto=format&w=338 338w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/arV5fG7O7CUUHb7mdt54.gif?auto=format&w=385 385w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/arV5fG7O7CUUHb7mdt54.gif?auto=format&w=439 439w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/arV5fG7O7CUUHb7mdt54.gif?auto=format&w=500 500w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/arV5fG7O7CUUHb7mdt54.gif?auto=format&w=571 571w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/arV5fG7O7CUUHb7mdt54.gif?auto=format&w=650 650w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/arV5fG7O7CUUHb7mdt54.gif?auto=format&w=741 741w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/arV5fG7O7CUUHb7mdt54.gif?auto=format&w=845 845w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/arV5fG7O7CUUHb7mdt54.gif?auto=format&w=964 964w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/arV5fG7O7CUUHb7mdt54.gif?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/arV5fG7O7CUUHb7mdt54.gif?auto=format&w=1200 1200w" width="600" />
<figcaption>Ensuring the space we reserved for the advert slot matched the most commonly served height of the advert.
</figcaption>
</figure>
<h3 id="images">Images <a class="w-headline-link" href="https://web.dev/telegraph/#images">#</a></h3>
<p>A lot of the images across the website are lazy loaded and have their space
reserved for them.</p>
<figure>
    <img alt="Animation of article preview cards loading." decoding="async" height="352" loading="lazy" sizes="(min-width: 600px) 600px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/IFeiuIif24EDbbpObx4n.gif?auto=format" srcset="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/IFeiuIif24EDbbpObx4n.gif?auto=format&w=200 200w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/IFeiuIif24EDbbpObx4n.gif?auto=format&w=228 228w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/IFeiuIif24EDbbpObx4n.gif?auto=format&w=260 260w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/IFeiuIif24EDbbpObx4n.gif?auto=format&w=296 296w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/IFeiuIif24EDbbpObx4n.gif?auto=format&w=338 338w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/IFeiuIif24EDbbpObx4n.gif?auto=format&w=385 385w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/IFeiuIif24EDbbpObx4n.gif?auto=format&w=439 439w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/IFeiuIif24EDbbpObx4n.gif?auto=format&w=500 500w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/IFeiuIif24EDbbpObx4n.gif?auto=format&w=571 571w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/IFeiuIif24EDbbpObx4n.gif?auto=format&w=650 650w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/IFeiuIif24EDbbpObx4n.gif?auto=format&w=741 741w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/IFeiuIif24EDbbpObx4n.gif?auto=format&w=845 845w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/IFeiuIif24EDbbpObx4n.gif?auto=format&w=964 964w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/IFeiuIif24EDbbpObx4n.gif?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/IFeiuIif24EDbbpObx4n.gif?auto=format&w=1200 1200w" width="600" />
    <figcaption>Lazy loading images without disrupting the layout.</figcaption>
</figure>
<p>However the inline images at the top of the articles did not have any space
reserved on the container, nor did they have width and height attributes
associated with the tags. This caused the layout to shift as they loaded in.</p>
<figure>
    <img alt="Animation of the article page loading. When the main image loads at the top of the page, the text moves down." decoding="async" height="612" loading="lazy" sizes="(min-width: 360px) 360px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/G7PnNyKZhURv7mpYMx9Q.gif?auto=format" srcset="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/G7PnNyKZhURv7mpYMx9Q.gif?auto=format&w=200 200w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/G7PnNyKZhURv7mpYMx9Q.gif?auto=format&w=228 228w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/G7PnNyKZhURv7mpYMx9Q.gif?auto=format&w=260 260w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/G7PnNyKZhURv7mpYMx9Q.gif?auto=format&w=296 296w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/G7PnNyKZhURv7mpYMx9Q.gif?auto=format&w=338 338w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/G7PnNyKZhURv7mpYMx9Q.gif?auto=format&w=385 385w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/G7PnNyKZhURv7mpYMx9Q.gif?auto=format&w=439 439w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/G7PnNyKZhURv7mpYMx9Q.gif?auto=format&w=500 500w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/G7PnNyKZhURv7mpYMx9Q.gif?auto=format&w=571 571w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/G7PnNyKZhURv7mpYMx9Q.gif?auto=format&w=650 650w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/G7PnNyKZhURv7mpYMx9Q.gif?auto=format&w=720 720w" width="360" />
    <figcaption>A layout shift caused by the article's main image.</figcaption>
</figure>
<p>Simply adding the width and height attributes to the images ensured the layout
did not shift.</p>
<figure>
    <img alt="Animation of the article page loading with placeholder reserved for the main image. When the main image loads at the top of the page, there&#x27;s no layout shift." decoding="async" height="630" loading="lazy" sizes="(min-width: 360px) 360px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/LuYayFKwpXN889Fk3GLG.gif?auto=format" srcset="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/LuYayFKwpXN889Fk3GLG.gif?auto=format&w=200 200w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/LuYayFKwpXN889Fk3GLG.gif?auto=format&w=228 228w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/LuYayFKwpXN889Fk3GLG.gif?auto=format&w=260 260w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/LuYayFKwpXN889Fk3GLG.gif?auto=format&w=296 296w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/LuYayFKwpXN889Fk3GLG.gif?auto=format&w=338 338w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/LuYayFKwpXN889Fk3GLG.gif?auto=format&w=385 385w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/LuYayFKwpXN889Fk3GLG.gif?auto=format&w=439 439w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/LuYayFKwpXN889Fk3GLG.gif?auto=format&w=500 500w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/LuYayFKwpXN889Fk3GLG.gif?auto=format&w=571 571w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/LuYayFKwpXN889Fk3GLG.gif?auto=format&w=650 650w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/LuYayFKwpXN889Fk3GLG.gif?auto=format&w=720 720w" width="360" />
    <figcaption>The main article image loading without causing the layout to shift.</figcaption>
</figure>
<h3 id="header">Header <a class="w-headline-link" href="https://web.dev/telegraph/#header">#</a></h3>
<p>The header was below the content in the markup and was positioned at the top
using CSS. The original idea was to prioritise the content loading before the
navigation however this caused the page to momentarily shift.</p>
<figure>
    <img alt="ALT_TEXT_HERE" decoding="async" height="333" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/ym64zcKRzey40Ov0JYX5.png?auto=format" srcset="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/ym64zcKRzey40Ov0JYX5.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/ym64zcKRzey40Ov0JYX5.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/ym64zcKRzey40Ov0JYX5.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/ym64zcKRzey40Ov0JYX5.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/ym64zcKRzey40Ov0JYX5.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/ym64zcKRzey40Ov0JYX5.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/ym64zcKRzey40Ov0JYX5.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/ym64zcKRzey40Ov0JYX5.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/ym64zcKRzey40Ov0JYX5.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/ym64zcKRzey40Ov0JYX5.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/ym64zcKRzey40Ov0JYX5.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/ym64zcKRzey40Ov0JYX5.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/ym64zcKRzey40Ov0JYX5.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/ym64zcKRzey40Ov0JYX5.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/ym64zcKRzey40Ov0JYX5.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/ym64zcKRzey40Ov0JYX5.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/ym64zcKRzey40Ov0JYX5.png?auto=format&w=1600 1600w" width="800" />
    <figcaption>The header of the page loading inelegantly.</figcaption>
</figure>
<p>Moving the header to the top of the markup allowed the page to render without
this shift.</p>
<figure>
    <img alt="ALT_TEXT_HERE" decoding="async" height="303" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/drYhZauv1oWZyp7mpQz9.png?auto=format" srcset="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/drYhZauv1oWZyp7mpQz9.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/drYhZauv1oWZyp7mpQz9.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/drYhZauv1oWZyp7mpQz9.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/drYhZauv1oWZyp7mpQz9.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/drYhZauv1oWZyp7mpQz9.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/drYhZauv1oWZyp7mpQz9.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/drYhZauv1oWZyp7mpQz9.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/drYhZauv1oWZyp7mpQz9.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/drYhZauv1oWZyp7mpQz9.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/drYhZauv1oWZyp7mpQz9.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/drYhZauv1oWZyp7mpQz9.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/drYhZauv1oWZyp7mpQz9.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/drYhZauv1oWZyp7mpQz9.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/drYhZauv1oWZyp7mpQz9.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/drYhZauv1oWZyp7mpQz9.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/drYhZauv1oWZyp7mpQz9.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/drYhZauv1oWZyp7mpQz9.png?auto=format&w=1600 1600w" width="800" />
    <figcaption>The layout is no longer disrupted by the header of the page loading.</figcaption>
</figure>
<h3 id="embeds">Embeds <a class="w-headline-link" href="https://web.dev/telegraph/#embeds">#</a></h3>
<p>Some of the frequently used embeds have a defined aspect ratio. For example,
YouTube videos. While the player is loading, we pull the thumbnail from YouTube
and use it as a placeholder while the video loads.</p>
<figure>
<img alt="The video player slot loading a low resolution thumbnail while the video player loads." decoding="async" height="612" loading="lazy" sizes="(min-width: 360px) 360px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/BKPbdBJROUIUqoT8coFW.gif?auto=format" srcset="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/BKPbdBJROUIUqoT8coFW.gif?auto=format&w=200 200w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/BKPbdBJROUIUqoT8coFW.gif?auto=format&w=228 228w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/BKPbdBJROUIUqoT8coFW.gif?auto=format&w=260 260w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/BKPbdBJROUIUqoT8coFW.gif?auto=format&w=296 296w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/BKPbdBJROUIUqoT8coFW.gif?auto=format&w=338 338w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/BKPbdBJROUIUqoT8coFW.gif?auto=format&w=385 385w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/BKPbdBJROUIUqoT8coFW.gif?auto=format&w=439 439w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/BKPbdBJROUIUqoT8coFW.gif?auto=format&w=500 500w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/BKPbdBJROUIUqoT8coFW.gif?auto=format&w=571 571w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/BKPbdBJROUIUqoT8coFW.gif?auto=format&w=650 650w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/BKPbdBJROUIUqoT8coFW.gif?auto=format&w=720 720w" width="360" />
    <figcaption>The video player slot loading a low resolution thumbnail while the video player loads.
</figcaption>
</figure>
<h2 id="measuring-the-impact">Measuring the impact <a class="w-headline-link" href="https://web.dev/telegraph/#measuring-the-impact">#</a></h2>
<p>We were able to measure the impact at a feature level quite easily using the
tooling mentioned towards the start of the article. However we wanted to measure
CLS both at a template level and at a site level. Synthetically, we used
<a href="https://speedcurve.com/" rel="noopener">SpeedCurve</a> to validate changes both in pre-production
and production.</p>
<figure>
    <img alt="SpeedCurve chart showing a steep drop in CLS score." decoding="async" height="343" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/kVRCtjeFVTbN7aOV4O0z.png?auto=format" srcset="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/kVRCtjeFVTbN7aOV4O0z.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/kVRCtjeFVTbN7aOV4O0z.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/kVRCtjeFVTbN7aOV4O0z.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/kVRCtjeFVTbN7aOV4O0z.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/kVRCtjeFVTbN7aOV4O0z.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/kVRCtjeFVTbN7aOV4O0z.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/kVRCtjeFVTbN7aOV4O0z.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/kVRCtjeFVTbN7aOV4O0z.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/kVRCtjeFVTbN7aOV4O0z.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/kVRCtjeFVTbN7aOV4O0z.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/kVRCtjeFVTbN7aOV4O0z.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/kVRCtjeFVTbN7aOV4O0z.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/kVRCtjeFVTbN7aOV4O0z.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/kVRCtjeFVTbN7aOV4O0z.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/kVRCtjeFVTbN7aOV4O0z.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/kVRCtjeFVTbN7aOV4O0z.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/kVRCtjeFVTbN7aOV4O0z.png?auto=format&w=1600 1600w" width="800" />
    <figcaption>Tracking CLS progress synthetically using SpeedCurve.</figcaption>
</figure>
<p>We're able to then validate the results in our RUM data (provided by
<a href="https://www.akamai.com/uk/en/products/performance/mpulse-real-user-monitoring.jsp" rel="noopener">mPulse</a>)
once the code reached production.</p>
<figure>
    <img alt="mPulse chart showing a drop in CLS score." decoding="async" height="550" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/Bv8QeCPy9zQ4eru2qrhU.png?auto=format" srcset="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/Bv8QeCPy9zQ4eru2qrhU.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/Bv8QeCPy9zQ4eru2qrhU.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/Bv8QeCPy9zQ4eru2qrhU.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/Bv8QeCPy9zQ4eru2qrhU.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/Bv8QeCPy9zQ4eru2qrhU.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/Bv8QeCPy9zQ4eru2qrhU.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/Bv8QeCPy9zQ4eru2qrhU.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/Bv8QeCPy9zQ4eru2qrhU.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/Bv8QeCPy9zQ4eru2qrhU.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/Bv8QeCPy9zQ4eru2qrhU.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/Bv8QeCPy9zQ4eru2qrhU.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/Bv8QeCPy9zQ4eru2qrhU.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/Bv8QeCPy9zQ4eru2qrhU.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/Bv8QeCPy9zQ4eru2qrhU.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/Bv8QeCPy9zQ4eru2qrhU.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/Bv8QeCPy9zQ4eru2qrhU.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/Bv8QeCPy9zQ4eru2qrhU.png?auto=format&w=1600 1600w" width="800" />
    <figcaption>Validating site-wide CLS improvements with mPulse RUM data before and after making changes.</figcaption>
</figure>
<p>Checking the RUM data provides us with a good level of confidence that the
changes we're making are having a positive impact for our readers.</p>
<p>The final numbers we looked at are for the RUM data Google collects. This is
especially relevant now as they will soon <a href="https://developers.google.com/search/blog/2020/05/evaluating-page-experience#page-experience-ranking" rel="noopener">have an impact on page
ranking</a>.
For starters we used the <a href="https://web.dev/chrome-ux-report/">Chrome UX Report</a>, both in the
monthly origin level data available through the <a href="https://g.co/chromeuxdash" rel="noopener">CrUX
dashboard</a>, as well as by <a href="https://web.dev/chrome-ux-report-bigquery/">querying
BigQuery</a> to retrieve historic p75 data. This way
we were easily able to see that for all of the traffic measured by CrUX, <strong>our
75th percentile CLS improved by 250% from 0.25 to 0.1 and our passing bucket
grew from 57% to 72%</strong>.</p>
<figure>
    <img alt="CrUX dashboard showing p75 CLS for telegraph.co.uk is 0.1." decoding="async" height="449" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/vmmokEtVcn7FJzmOIJB8.png?auto=format" srcset="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/vmmokEtVcn7FJzmOIJB8.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/vmmokEtVcn7FJzmOIJB8.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/vmmokEtVcn7FJzmOIJB8.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/vmmokEtVcn7FJzmOIJB8.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/vmmokEtVcn7FJzmOIJB8.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/vmmokEtVcn7FJzmOIJB8.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/vmmokEtVcn7FJzmOIJB8.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/vmmokEtVcn7FJzmOIJB8.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/vmmokEtVcn7FJzmOIJB8.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/vmmokEtVcn7FJzmOIJB8.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/vmmokEtVcn7FJzmOIJB8.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/vmmokEtVcn7FJzmOIJB8.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/vmmokEtVcn7FJzmOIJB8.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/vmmokEtVcn7FJzmOIJB8.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/vmmokEtVcn7FJzmOIJB8.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/vmmokEtVcn7FJzmOIJB8.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/vmmokEtVcn7FJzmOIJB8.png?auto=format&w=1600 1600w" width="800" />
    <figcaption>Results from the Crux Dashboard.</figcaption>
</figure>
<figure>
    <img alt="BigQuery showing p75 values improving month to month, from 0.25 to 0.1." decoding="async" height="517" loading="lazy" sizes="(min-width: 488px) 488px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/8d8UOEi5GPcIitsTcQMA.png?auto=format" srcset="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/8d8UOEi5GPcIitsTcQMA.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/8d8UOEi5GPcIitsTcQMA.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/8d8UOEi5GPcIitsTcQMA.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/8d8UOEi5GPcIitsTcQMA.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/8d8UOEi5GPcIitsTcQMA.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/8d8UOEi5GPcIitsTcQMA.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/8d8UOEi5GPcIitsTcQMA.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/8d8UOEi5GPcIitsTcQMA.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/8d8UOEi5GPcIitsTcQMA.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/8d8UOEi5GPcIitsTcQMA.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/8d8UOEi5GPcIitsTcQMA.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/8d8UOEi5GPcIitsTcQMA.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/8d8UOEi5GPcIitsTcQMA.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/8d8UOEi5GPcIitsTcQMA.png?auto=format&w=976 976w" width="488" />
    <figcaption>BigQuery run displaying the p75 values of 2021 to date.</figcaption>
</figure>
<p>In addition, we were able to make use of the <a href="https://developer.chrome.com/docs/crux/api/" rel="noopener">Chrome UX Report
API</a>
and create some internal dashboards split into templates.</p>
<figure>
    <img alt="Internal dashboard showing average good score of 76.2, needs improvement of 9.3, and poor score of 14.6." decoding="async" height="402" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/aYW2QPaFucKThXxZfFAD.png?auto=format" srcset="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/aYW2QPaFucKThXxZfFAD.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/aYW2QPaFucKThXxZfFAD.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/aYW2QPaFucKThXxZfFAD.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/aYW2QPaFucKThXxZfFAD.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/aYW2QPaFucKThXxZfFAD.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/aYW2QPaFucKThXxZfFAD.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/aYW2QPaFucKThXxZfFAD.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/aYW2QPaFucKThXxZfFAD.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/aYW2QPaFucKThXxZfFAD.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/aYW2QPaFucKThXxZfFAD.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/aYW2QPaFucKThXxZfFAD.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/aYW2QPaFucKThXxZfFAD.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/aYW2QPaFucKThXxZfFAD.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/aYW2QPaFucKThXxZfFAD.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/aYW2QPaFucKThXxZfFAD.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/aYW2QPaFucKThXxZfFAD.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/aYW2QPaFucKThXxZfFAD.png?auto=format&w=1600 1600w" width="800" />
    <figcaption>Internal dashboards making use of the Chrome UX Report API highlighting our average score and the worst performing pages using that template.</figcaption>
</figure>
<h2 id="avoiding-cls-regressions">Avoiding CLS regressions <a class="w-headline-link" href="https://web.dev/telegraph/#avoiding-cls-regressions">#</a></h2>
<p>An important aspect of making performance improvements is avoiding regressions.
We've set up some basic <a href="https://web.dev/performance-budgets-101/">performance budgets</a> for our
key metrics and included CLS in those.</p>
<figure>
    <img alt="" decoding="async" height="343" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/9ggBNUTAptmnmxVlXZGo.png?auto=format" srcset="https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/9ggBNUTAptmnmxVlXZGo.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/9ggBNUTAptmnmxVlXZGo.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/9ggBNUTAptmnmxVlXZGo.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/9ggBNUTAptmnmxVlXZGo.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/9ggBNUTAptmnmxVlXZGo.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/9ggBNUTAptmnmxVlXZGo.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/9ggBNUTAptmnmxVlXZGo.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/9ggBNUTAptmnmxVlXZGo.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/9ggBNUTAptmnmxVlXZGo.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/9ggBNUTAptmnmxVlXZGo.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/9ggBNUTAptmnmxVlXZGo.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/9ggBNUTAptmnmxVlXZGo.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/9ggBNUTAptmnmxVlXZGo.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/9ggBNUTAptmnmxVlXZGo.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/9ggBNUTAptmnmxVlXZGo.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/9ggBNUTAptmnmxVlXZGo.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/vgdbNJBYHma2o62ZqYmcnkq3j0o1/9ggBNUTAptmnmxVlXZGo.png?auto=format&w=1600 1600w" width="800" />
    <figcaption>A performance budget dashboard which shows synthetic checks measuring CLS on some of our high traffic templates. The budget is currently set at 0.025.</figcaption>
</figure>
<p>If the test exceeds the budget it'll send a message to a Slack channel so we can
investigate the cause. We've also set up weekly reports, so that even if the
templates remain in budget we're aware of any changes that have had a negative
impact.</p>
<p>We're also planning to expand our budgets to use RUM data as well as synthetic
data, using mPulse to set both <a href="https://learn.akamai.com/en-us/webhelp/mpulse/mpulse-help/GUID-CEE8FE75-2CD9-423A-BB3E-26EC9D8735A9.html" rel="noopener">static
alerts</a>
and potentially <a href="https://learn.akamai.com/en-us/webhelp/mpulse/mpulse-help/GUID-C6C446C4-E545-471F-A943-2CE6D885E60C.html" rel="noopener">anomaly
detection</a>
which would make us aware of any changes that are out of the ordinary.</p>
<p>It's important for us to approach new features with CLS in mind. A lot of the
changes I've mentioned are those we've had to fix after they've been released to
our readers. Layout stability will be a consideration for the solution design of
any new feature going forward so that we can avoid any unexpected layout shifts
from the start.</p>
<h2 id="conclusion">Conclusion <a class="w-headline-link" href="https://web.dev/telegraph/#conclusion">#</a></h2>
<p>The improvements we've made so far were quite easy to implement and have had a
significant impact. A lot of changes I've outlined in this article didn't take
much time to deliver and they were applied to all of the most commonly used
templates which means they've had a widespread positive impact for our readers.</p>
<p>There are still areas of the site we need to improve. We're exploring ways we
might be able to do more of our client-side logic server-side which will improve
CLS even more. We will keep tracking and monitoring our metrics with an aim to
constantly improve them and provide our readers with the best user experience
possible.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[How Wix improved website performance by evolving their infrastructure]]></title>
<description><![CDATA[Alon leads the core backend team at Wix. 
Thanks to leveraging industry standards, cloud providers, and CDN capabilities,
combined with a major rewrite of our website runtime, the percentage of Wix
sites reaching good 75th percentile scores on all Core Web Vitals (CWV) metrics
more than tripled y...]]></description>
<link>https://tsecurity.de/de/1725698/it+betriebssysteme/web+tipps/how+wix+improved+website+performance+by+evolving+their+infrastructure/</link>
<pubDate>Thu, 08 Dec 2022 19:45:05 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<aside class="aside flow bg-state-info-bg color-state-info-text"><div class=" flow"> Alon leads the core backend team at <a href="https://www.wix.com/">Wix</a>. </div></aside>
<p>Thanks to leveraging industry standards, cloud providers, and CDN capabilities,
combined with a major rewrite of our website runtime, the percentage of Wix
sites reaching good 75th percentile scores on all Core Web Vitals (CWV) metrics
<strong>more than tripled</strong> year over year, according to data from
<a href="https://developer.chrome.com/docs/crux/" rel="noopener">CrUX</a>
and
<a href="https://httparchive.org/faq#how-do-i-use-bigquery-to-write-custom-queries-over-the-data" rel="noopener">HTTPArchive</a>.</p>
<p>Wix adopted a performance-oriented culture, and further improvements will
continue rolling out to users. As we focus on performance KPIs, we expect to see
the number of sites passing CWV thresholds grow.</p>
<h2 id="overview">Overview <a class="w-headline-link" href="https://web.dev/wix/#overview">#</a></h2>
<p>The world of performance is <a href="https://youtu.be/ctavZT87syI" rel="noopener">beautifully complex</a>,
with many variables and intricacies. Research shows that site <a href="https://web.dev/milliseconds-make-millions">speed has a
direct impact on conversion rates and revenues</a> for
businesses. In recent years, the industry has put more emphasis on performance
visibility and <a href="https://web.dev/fast">making the web faster</a>. Starting in May 2021, <a href="https://developers.google.com/search/blog/2020/11/timing-for-page-experience" rel="noopener">page
experience
signals</a>
will be included in Google Search ranking.</p>
<p>The unique challenge at Wix is supporting <strong>millions</strong> of sites, some of which
were built <em>many years ago</em> and have not been updated since. We have various
<a href="https://support.wix.com/en/performance-and-technical-issues/site-performance" rel="noopener">tools and
articles</a>
to assist our users on what they can do to analyze and improve the performance
of their sites.</p>
<p>Wix is a managed environment and not everything is in the hands of the user.
Sharing common infrastructures presents many challenges for all these sites, but
also opens opportunities for major enhancements across the board, i.e.
leveraging the economies of scale.</p>
<aside class="aside flow bg-state-info-bg color-state-info-text"><div class=" flow"> <em>In this post I will focus on enhancements done around serving the initial HTML, which initiates the page loading process.</em> </div></aside>
<h3 id="speaking-in-a-common-language">Speaking in a common language <a class="w-headline-link" href="https://web.dev/wix/#speaking-in-a-common-language">#</a></h3>
<p>One of the core difficulties with performance is finding a common terminology to
discuss different aspects of the user experience, while considering both the
technical and perceived performance. Using a well-defined, common language
within the organization enabled us to easily discuss and categorize the
different technical parts and trade-offs, clarified our performance reports and
tremendously helped to understand what aspects we should focus on improving
first.</p>
<p>We adjusted all our monitoring and internal discussions to include industry
standard metrics such as <a href="https://web.dev/vitals/">Web Vitals</a>, which include:</p>
<figure>
  <img alt="A diagram of the 2020 Core Web Vitals: LCP, FID, and CLS." decoding="async" height="215" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/PLF62sx8lHkpKbnvYKKR.jpg?auto=format" srcset="https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/PLF62sx8lHkpKbnvYKKR.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/PLF62sx8lHkpKbnvYKKR.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/PLF62sx8lHkpKbnvYKKR.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/PLF62sx8lHkpKbnvYKKR.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/PLF62sx8lHkpKbnvYKKR.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/PLF62sx8lHkpKbnvYKKR.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/PLF62sx8lHkpKbnvYKKR.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/PLF62sx8lHkpKbnvYKKR.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/PLF62sx8lHkpKbnvYKKR.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/PLF62sx8lHkpKbnvYKKR.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/PLF62sx8lHkpKbnvYKKR.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/PLF62sx8lHkpKbnvYKKR.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/PLF62sx8lHkpKbnvYKKR.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/PLF62sx8lHkpKbnvYKKR.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/PLF62sx8lHkpKbnvYKKR.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/PLF62sx8lHkpKbnvYKKR.jpg?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/PLF62sx8lHkpKbnvYKKR.jpg?auto=format&w=1600 1600w" width="800" />
  <figcaption>Core Web Vitals</figcaption>
</figure>
<h3 id="site-complexity-and-performance-scores">Site complexity and performance scores <a class="w-headline-link" href="https://web.dev/wix/#site-complexity-and-performance-scores">#</a></h3>
<p>It's pretty easy to create a site that loads instantly so long as you
<a href="https://justinjackson.ca/words.html" rel="noopener">make it very simple</a> using only
HTML and serve it via a CDN.</p>
<figure data-float="left">
  <img alt="PageSpeed Insights Example" decoding="async" height="647" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/xMUN9CUVvgnHofImPcV5.jpg?auto=format" srcset="https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/xMUN9CUVvgnHofImPcV5.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/xMUN9CUVvgnHofImPcV5.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/xMUN9CUVvgnHofImPcV5.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/xMUN9CUVvgnHofImPcV5.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/xMUN9CUVvgnHofImPcV5.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/xMUN9CUVvgnHofImPcV5.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/xMUN9CUVvgnHofImPcV5.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/xMUN9CUVvgnHofImPcV5.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/xMUN9CUVvgnHofImPcV5.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/xMUN9CUVvgnHofImPcV5.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/xMUN9CUVvgnHofImPcV5.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/xMUN9CUVvgnHofImPcV5.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/xMUN9CUVvgnHofImPcV5.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/xMUN9CUVvgnHofImPcV5.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/xMUN9CUVvgnHofImPcV5.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/xMUN9CUVvgnHofImPcV5.jpg?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/xMUN9CUVvgnHofImPcV5.jpg?auto=format&w=1600 1600w" width="800" />
</figure>
<p>However, the reality is that sites are getting more and more complex and
sophisticated, operating more like applications rather than documents, and
supporting functionalities such as blogs, e-commerce solutions, custom code,
etc.</p>
<p>Wix offers a very large <a href="https://www.wix.com/website/templates" rel="noopener">variety of
templates</a>, enabling its users to easily
build a site with many business capabilities. Those additional features often
come with <em>some</em> performance costs.</p>
<h2 id="the-journey">The journey <a class="w-headline-link" href="https://web.dev/wix/#the-journey">#</a></h2>
<h3 id="in-the-beginning,-there-was-html">In the beginning, there was HTML <a class="w-headline-link" href="https://web.dev/wix/#in-the-beginning,-there-was-html">#</a></h3>
<p>Every time a webpage is loaded, it always starts with an initial request to a
URL in order to retrieve the HTML document. This HTML response triggers all the
additional client requests and browser logic to run and render your site. This
is the most important part of the page loading, because nothing happens until
the beginning of the response arrives (known as TTFB - time to first byte).</p>
<figure>
  <img alt="WebPageTest First View" decoding="async" height="411" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/b1KKSlUQQTuNCDj4ndyJ.jpg?auto=format" srcset="https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/b1KKSlUQQTuNCDj4ndyJ.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/b1KKSlUQQTuNCDj4ndyJ.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/b1KKSlUQQTuNCDj4ndyJ.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/b1KKSlUQQTuNCDj4ndyJ.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/b1KKSlUQQTuNCDj4ndyJ.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/b1KKSlUQQTuNCDj4ndyJ.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/b1KKSlUQQTuNCDj4ndyJ.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/b1KKSlUQQTuNCDj4ndyJ.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/b1KKSlUQQTuNCDj4ndyJ.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/b1KKSlUQQTuNCDj4ndyJ.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/b1KKSlUQQTuNCDj4ndyJ.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/b1KKSlUQQTuNCDj4ndyJ.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/b1KKSlUQQTuNCDj4ndyJ.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/b1KKSlUQQTuNCDj4ndyJ.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/b1KKSlUQQTuNCDj4ndyJ.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/b1KKSlUQQTuNCDj4ndyJ.jpg?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/b1KKSlUQQTuNCDj4ndyJ.jpg?auto=format&w=1600 1600w" width="800" />
  <figcaption>WebPageTest First View</figcaption>
</figure>
<h4 id="the-past-client-side-rendering-csr">The past: client-side rendering (CSR) <a class="w-headline-link" href="https://web.dev/wix/#the-past-client-side-rendering-csr">#</a></h4>
<p>When operating large scale systems, you always have trade-offs you need to
consider, such as performance, reliability and costs. Up to a few years ago, Wix
used client-side rendering (CSR), in which the actual HTML content was generated
via JavaScript on the client side (i.e. in the browser) allowing us to support a
high scale of sites without having huge backend operational costs.</p>
<p>CSR enabled us to use a common HTML document, which was essentially empty. All
it did was trigger the download of the required code and data which was then
used to generate the full HTML on the client device.</p>
<h4 id="today-server-side-rendering-ssr">Today: server-side rendering (SSR) <a class="w-headline-link" href="https://web.dev/wix/#today-server-side-rendering-ssr">#</a></h4>
<p>A few years ago we transitioned to server-side rendering (SSR), as that was
beneficial both to SEO and performance, improving initial page visibility times
and ensuring better indexing for search engines that do not have full support
for running JavaScript.</p>
<p>This approach improved the visibility experience, especially on slower
devices/connections, and opened the door for further performance optimizations.
However, it also meant that for each web page request, a unique HTML response
was generated on the fly, which is <strong>far</strong> from optimal, especially for sites
with a large amount of views.</p>
<h3 id="introducing-caching-in-multiple-locations">Introducing caching in multiple locations <a class="w-headline-link" href="https://web.dev/wix/#introducing-caching-in-multiple-locations">#</a></h3>
<p>The HTML for each site was mostly static, but it had a few caveats:</p>
<ol>
<li>It frequently changes. Each time a user edits their site, or makes changes in site data,
such as on the website store inventory.</li>
<li>It had certain data and cookies that were <strong>visitor specific</strong>,
meaning two people visiting the same site would see somewhat different HTML. For example,
to support products features such as remembering what items a visitor put in the cart,
or the chat the visitor started with the business earlier, and more.</li>
<li>Not all pages are cacheable. For example a page with custom user code on it,
that displays the current time as part of the document, is not eligible for caching.</li>
</ol>
<p>Initially, we took the relatively safe approach of caching the HTML <span style="text-decoration:underline;">without</span> visitor data, and then only
modified specific parts of the HTML response on the fly for each visitor, for
each cache hit.</p>
<h4 id="in-house-cdn-solution">In-house CDN solution <a class="w-headline-link" href="https://web.dev/wix/#in-house-cdn-solution">#</a></h4>
<p>We did this by deploying an in-house solution: Using <a href="https://varnish-cache.org/" rel="noopener">Varnish HTTP
Cache</a> for proxying and caching, Kafka for
invalidation messages, and a Scala/Netty-based service which proxies these HTML
responses, but mutates the HTML and adds visitor-specific data and cookies to
the cached response.</p>
<p>This solution enabled us to deploy these <strong>slim</strong> components in many more
geographic locations and multiple cloud provider regions, which are spread
across the world. In 2019, we introduced <strong>over 15 new regions</strong>, and gradually
enabled caching for over 90% of our page views that were eligible for caching.
Serving sites from additional locations reduced the <a href="https://www.cloudping.co/grid" rel="noopener">network
latency</a> between the clients and the servers
serving the HTML response, by bringing the content closer to the website's
visitors.</p>
<p>We also started caching certain read-only API responses by using the same
solution and invalidating the cache on any change to the site content. For
example, the list of blog posts on the site is cached and invalidated when a
post is published/modified.</p>
<h4 id="reducing-complexities">Reducing complexities <a class="w-headline-link" href="https://web.dev/wix/#reducing-complexities">#</a></h4>
<p>Implementing caching improved performance substantially, mostly on the
<a href="https://web.dev/ttfb/">TTFB</a> and <a href="https://web.dev/fcp/">FCP</a> phases, and improved our
reliability by serving the content from a location closer to the end user.</p>
<p>However, the need to modify the HTML for each response introduced an unnecessary
complexity that, if removed, presented an opportunity for further performance
improvements.</p>
<h3 id="browser-caching-and-preparations-for-cdns">Browser caching (and preparations for CDNs) <a class="w-headline-link" href="https://web.dev/wix/#browser-caching-and-preparations-for-cdns">#</a></h3>
<div>
  <div class="stats">
    <div class="stats__item">
     <p class="stats__figure">~ 13<sub>%</sub></p>
     <p>HTML requests served directly from the browser cache,
     saving much bandwidth and reducing loading times for repeat views</p>
    </div>
  </div>
</div>
<p>The next step was to actually remove this visitor-specific data from the HTML
<span style="text-decoration:underline;">entirely</span>, and retrieve it from a
separate endpoint, called by the client for this purpose, after the HTML has
arrived.</p>
<p>We carefully migrated this data and cookies to a new endpoint, which is called
on each page load, but returns a slim JSON, which is required only for the
<a href="https://reactjs.org/docs/react-dom.html#hydrate" rel="noopener">hydration process</a>, to reach
full page interactivity.</p>
<p>This allowed us to enable browser caching of the HTML, which means that browsers
now save the HTML response for repeating visits, and only call the server to
validate that the content hasn't changed. This is done using <a href="https://en.wikipedia.org/wiki/HTTP_ETag" rel="noopener">HTTP
ETag</a>, which is basically an identifier
assigned to a specific version of an HTML resource. If the content is still the
same, a <a href="https://developer.mozilla.org/docs/Web/HTTP/Status/304" rel="noopener">304 Not
Modified</a> response
is sent by our servers to the client, without a body.</p>
<figure>
  <img alt="ALT_TEXT_HERE" decoding="async" height="410" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/hr1xnQccJEkHTBGxS5wF.jpg?auto=format" srcset="https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/hr1xnQccJEkHTBGxS5wF.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/hr1xnQccJEkHTBGxS5wF.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/hr1xnQccJEkHTBGxS5wF.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/hr1xnQccJEkHTBGxS5wF.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/hr1xnQccJEkHTBGxS5wF.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/hr1xnQccJEkHTBGxS5wF.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/hr1xnQccJEkHTBGxS5wF.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/hr1xnQccJEkHTBGxS5wF.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/hr1xnQccJEkHTBGxS5wF.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/hr1xnQccJEkHTBGxS5wF.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/hr1xnQccJEkHTBGxS5wF.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/hr1xnQccJEkHTBGxS5wF.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/hr1xnQccJEkHTBGxS5wF.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/hr1xnQccJEkHTBGxS5wF.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/hr1xnQccJEkHTBGxS5wF.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/hr1xnQccJEkHTBGxS5wF.jpg?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/hr1xnQccJEkHTBGxS5wF.jpg?auto=format&w=1600 1600w" width="800" />
  <figcaption>WebPageTest Repeat View</figcaption>
</figure>
<p>In addition, this change means that our HTML is no longer visitor-specific and
contains no cookies. In other words it can basically be cached anywhere, opening
the door to using CDN providers that have much better geo presence in hundreds
of locations around the world.</p>
<h3 id="dns,-ssl-and-http2">DNS, SSL and HTTP/2 <a class="w-headline-link" href="https://web.dev/wix/#dns,-ssl-and-http2">#</a></h3>
<p>With caching enabled, wait times were reduced and other important parts of the
initial connection became more substantial. Enhancing our networking
infrastructure and monitoring enabled us to improve our DNS, connection, and SSL
times.</p>
<figure data-float="right">
  <img alt="A response time graph." decoding="async" height="441" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/Uuvh9xTItQ8wMA9s13RP.jpg?auto=format" srcset="https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/Uuvh9xTItQ8wMA9s13RP.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/Uuvh9xTItQ8wMA9s13RP.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/Uuvh9xTItQ8wMA9s13RP.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/Uuvh9xTItQ8wMA9s13RP.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/Uuvh9xTItQ8wMA9s13RP.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/Uuvh9xTItQ8wMA9s13RP.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/Uuvh9xTItQ8wMA9s13RP.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/Uuvh9xTItQ8wMA9s13RP.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/Uuvh9xTItQ8wMA9s13RP.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/Uuvh9xTItQ8wMA9s13RP.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/Uuvh9xTItQ8wMA9s13RP.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/Uuvh9xTItQ8wMA9s13RP.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/Uuvh9xTItQ8wMA9s13RP.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/Uuvh9xTItQ8wMA9s13RP.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/Uuvh9xTItQ8wMA9s13RP.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/Uuvh9xTItQ8wMA9s13RP.jpg?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/Uuvh9xTItQ8wMA9s13RP.jpg?auto=format&w=1600 1600w" width="800" />
</figure>
<p><a href="https://en.wikipedia.org/wiki/HTTP/2" rel="noopener">HTTP/2</a> was enabled for all user domains,
reducing both the amount of connections required and the overhead that comes
with each new connection. This was a relatively easy change to deploy, while
taking advantage of the <a href="https://developers.google.com/web/fundamentals/performance/http2" rel="noopener">performance and resilience
benefits</a> that
come with HTTP/2.</p>
<h3 id="brotli-compression-vs-gzip">Brotli compression (vs. gzip) <a class="w-headline-link" href="https://web.dev/wix/#brotli-compression-vs-gzip">#</a></h3>
<div>
  <div class="stats">
    <div class="stats__item">
     <p class="stats__figure">21 - 25<sub>%</sub></p>
     <p>Reduction of median file transfer size</p>
    </div>
  </div>
</div>
<p>Traditionally, all our files were compressed using <a href="https://en.wikipedia.org/wiki/Gzip" rel="noopener">gzip
compression</a>, which is the most prevalent
HTML compression option on the web. This compression protocol was initially
implemented almost 30 years ago!</p>
<figure data-float="right">
  <img alt="Brotli compression" decoding="async" height="805" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/h7KzeAfg2THMdDGMYvlR.jpg?auto=format" srcset="https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/h7KzeAfg2THMdDGMYvlR.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/h7KzeAfg2THMdDGMYvlR.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/h7KzeAfg2THMdDGMYvlR.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/h7KzeAfg2THMdDGMYvlR.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/h7KzeAfg2THMdDGMYvlR.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/h7KzeAfg2THMdDGMYvlR.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/h7KzeAfg2THMdDGMYvlR.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/h7KzeAfg2THMdDGMYvlR.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/h7KzeAfg2THMdDGMYvlR.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/h7KzeAfg2THMdDGMYvlR.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/h7KzeAfg2THMdDGMYvlR.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/h7KzeAfg2THMdDGMYvlR.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/h7KzeAfg2THMdDGMYvlR.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/h7KzeAfg2THMdDGMYvlR.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/h7KzeAfg2THMdDGMYvlR.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/h7KzeAfg2THMdDGMYvlR.jpg?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/h7KzeAfg2THMdDGMYvlR.jpg?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    <a href="https://tools.paulcalvano.com/compression.php">Brotli Compression Level Estimator</a>
  </figcaption>
</figure>
<p>The newer <a href="https://en.wikipedia.org/wiki/Brotli" rel="noopener">Brotli compression</a> introduces
compression improvements with almost no trade-offs, and is slowly becoming more
popular, as described in the yearly Web Almanac <a href="https://almanac.httparchive.org/en/2020/compression#what-type-of-content-should-we-compress" rel="noopener">Compression
chapter</a>.
It has been supported by <a href="https://caniuse.com/brotli" rel="noopener">all the major browsers</a>
for a while.</p>
<p>We enabled Brotli support on our nginx proxies in the edges, for all clients
that support it.</p>
<p>Moving to use Brotli compression reduced our median file transfer sizes by
<strong>21% to 25%</strong> resulting in a reduced bandwidth usage and improved loading times.</p>
<figure>
  <img alt="Mobile and Desktop Median Response Sizes" decoding="async" height="173" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/392RWYamrwkdFozk91LC.jpg?auto=format" srcset="https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/392RWYamrwkdFozk91LC.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/392RWYamrwkdFozk91LC.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/392RWYamrwkdFozk91LC.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/392RWYamrwkdFozk91LC.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/392RWYamrwkdFozk91LC.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/392RWYamrwkdFozk91LC.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/392RWYamrwkdFozk91LC.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/392RWYamrwkdFozk91LC.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/392RWYamrwkdFozk91LC.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/392RWYamrwkdFozk91LC.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/392RWYamrwkdFozk91LC.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/392RWYamrwkdFozk91LC.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/392RWYamrwkdFozk91LC.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/392RWYamrwkdFozk91LC.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/392RWYamrwkdFozk91LC.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/392RWYamrwkdFozk91LC.jpg?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/392RWYamrwkdFozk91LC.jpg?auto=format&w=1600 1600w" width="800" />
  <figcaption>Median Response Sizes</figcaption>
</figure>
<h2 id="content-delivery-networks-cdns">Content delivery networks (CDNs) <a class="w-headline-link" href="https://web.dev/wix/#content-delivery-networks-cdns">#</a></h2>
<h3 id="dynamic-cdn-selection">Dynamic CDN selection <a class="w-headline-link" href="https://web.dev/wix/#dynamic-cdn-selection">#</a></h3>
<p>At Wix, we have always used <a href="https://web.dev/content-delivery-networks/">CDNs</a> to serve all the
JavaScript code and images on user websites.</p>
<p>Recently, we integrated with a solution by our DNS provider, to automatically
select the best performing CDN according to the client's network and origin.
This enables us to serve the static files from the best location for each
visitor, and avoid availability issues on a certain CDN.</p>
<h3 id="coming-soon-user-domains-served-by-cdns">Coming soon… user domains served by CDNs <a class="w-headline-link" href="https://web.dev/wix/#coming-soon-user-domains-served-by-cdns">#</a></h3>
<p>The final piece of the puzzle is serving the last, and most critical part,
through a CDN: the HTML from the user domain.</p>
<p>As described above, we created our own in-house solution to cache and serve the
site-specific HTML and API results. Maintaining this solution in so many new
regions also has its operational costs, and adding new locations becomes a
process we need to manage and continually optimize.</p>
<p>We are currently integrating with various CDN providers to support serving the
entire Wix site directly from CDN locations to improve the distribution of our
servers across the globe and thus further improve response times. This is a
challenge due to the large amount of domains we serve, which require SSL
termination at the edge.</p>
<p>Integrating with CDNs brings Wix websites closer than ever to the customer and
comes with more improvements to the loading experience, including newer
technologies such as HTTP/3 without added effort on our side.</p>
<hr />
<h3 id="a-few-words-on-performance-monitoring">A few words on performance monitoring <a class="w-headline-link" href="https://web.dev/wix/#a-few-words-on-performance-monitoring">#</a></h3>
<p>If you run a Wix site, you're probably wondering how this translates to your Wix
site performance results, and how we compare against other website platforms.</p>
<p>Most of the work done above has been deployed in the past year, and some is
still being rolled out.</p>
<p>The Web Almanac by HTTPArchive recently published the <a href="https://almanac.httparchive.org/en/2020" rel="noopener">2020
edition</a> which includes an excellent
chapter on <a href="https://almanac.httparchive.org/en/2020/cms" rel="noopener">CMS user experience</a>.
Keep in mind that many of the numbers described in this article are from the
middle of 2020.</p>
<p>We look forward to seeing the updated report in 2021, and are actively
monitoring
<a href="https://developer.chrome.com/docs/crux/" rel="noopener">CrUX</a>
reports for our sites as well as our internal performance metrics.</p>
<p>We are committed to continuously improve loading times and provide our users
with a platform where they can build sites as they imagine, without compromising
on performance.</p>
<figure>
  <img alt="LCP, Speed Index and FCP for a mobile site over time" decoding="async" height="259" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/AADz7d1yVOWZlq0iSb6P.jpg?auto=format" srcset="https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/AADz7d1yVOWZlq0iSb6P.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/AADz7d1yVOWZlq0iSb6P.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/AADz7d1yVOWZlq0iSb6P.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/AADz7d1yVOWZlq0iSb6P.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/AADz7d1yVOWZlq0iSb6P.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/AADz7d1yVOWZlq0iSb6P.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/AADz7d1yVOWZlq0iSb6P.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/AADz7d1yVOWZlq0iSb6P.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/AADz7d1yVOWZlq0iSb6P.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/AADz7d1yVOWZlq0iSb6P.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/AADz7d1yVOWZlq0iSb6P.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/AADz7d1yVOWZlq0iSb6P.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/AADz7d1yVOWZlq0iSb6P.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/AADz7d1yVOWZlq0iSb6P.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/AADz7d1yVOWZlq0iSb6P.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/AADz7d1yVOWZlq0iSb6P.jpg?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/AADz7d1yVOWZlq0iSb6P.jpg?auto=format&w=1600 1600w" width="800" />
  <figcaption>LCP, Speed Index and FCP for a mobile site over time</figcaption>
</figure>
<p>DebugBear recently released a very interesting <a href="https://www.debugbear.com/blog/website-builder-performance-review" rel="noopener">Website Builder Performance
Review</a>,
which touches on some of the areas I mentioned above and examines the
performance of very simple sites built on each platform. This
<a href="https://matt05041.wixsite.com/bizsolutions" rel="noopener">site</a> was built almost two years
ago, and not modified since, but the platform is continually improving, and the
site performance along with it, which can be witnessed by <a href="https://www.debugbear.com/project/175/pageLoad/873/overview?dateRange=2019-03-31T21%3A00Z-to-2021-03-31T21%3A59Z" rel="noopener">viewing its
data</a>
over the past year and a half.</p>
<h2 id="conclusion">Conclusion <a class="w-headline-link" href="https://web.dev/wix/#conclusion">#</a></h2>
<p>We hope our experience inspires you to adopt a performance-oriented culture at
your organisation and that the details above are helpful and applicable to your
platform or site.</p>
<p>To sum up:</p>
<ul>
<li>Pick a set of metrics that you can track consistently using tools endorsed by
the industry. We recommend Core Web Vitals.</li>
<li>Leverage browser caching and CDNs.</li>
<li>Migrate to HTTP/2 (or HTTP/3 if possible).</li>
<li>Use Brotli compression.</li>
</ul>
<p>Thanks for learning our story and we invite you to ask questions, share ideas on
<a href="https://twitter.com/alonkochba" rel="noopener">Twitter</a> and
<a href="https://github.com/alonkochba" rel="noopener">GitHub</a> and join the web performance
conversation on your favorite channels.</p>
<h2 id="so,-how-does-your-recent-wix-site-performance-look-like">So, how does <strong>your</strong> recent Wix site performance look like? <a class="w-headline-link" href="https://web.dev/wix/#so,-how-does-your-recent-wix-site-performance-look-like">#</a></h2>]]></content:encoded>
</item>
<item>
<title><![CDATA[Cómo Wix mejoró el rendimiento de su sitio web mediante la evolución de su infraestructura]]></title>
<description><![CDATA[Alon lidera el equipo central de backend en Wix. 
Gracias al aprovechamiento de los estándares de la industria, los proveedores de nube y las capacidades de CDN, combinado con una reescritura importante del tiempo de ejecución de nuestro sitio web, el porcentaje de sitios Wix que alcanzaron buena...]]></description>
<link>https://tsecurity.de/de/1725699/it+betriebssysteme/web+tipps/cmo+wix+mejor+el+rendimiento+de+su+sitio+web+mediante+la+evolucin+de+su+infraestructura/</link>
<pubDate>Thu, 08 Dec 2022 19:45:05 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<aside class="aside flow bg-state-info-bg color-state-info-text"><div class=" flow"> Alon lidera el equipo central de backend en <a href="https://www.wix.com/">Wix</a>. </div></aside>
<p>Gracias al aprovechamiento de los estándares de la industria, los proveedores de nube y las capacidades de CDN, combinado con una reescritura importante del tiempo de ejecución de nuestro sitio web, el porcentaje de sitios Wix que alcanzaron buenas puntuaciones del percentil 75 en todas las métricas de Core Web Vitals (CWV) se <strong>triplicó</strong> año tras año, según a los datos de <a href="https://developer.chrome.com/docs/crux/" rel="noopener">CrUX</a> y <a href="https://httparchive.org/faq#how-do-i-use-bigquery-to-write-custom-queries-over-the-data" rel="noopener">HTTPArchive</a>.</p>
<p>Wix adoptó una cultura orientada al rendimiento y se seguirán implementando nuevas mejoras para los usuarios. A medida que nos centramos en los KPI de rendimiento, esperamos ver crecer el número de sitios que superan los umbrales de CWV.</p>
<h2 id="descripcion-general">Descripción general <a class="w-headline-link" href="https://web.dev/i18n/es/wix/#descripcion-general">#</a></h2>
<p>El mundo del desempeño es <a href="https://youtu.be/ctavZT87syI" rel="noopener">maravillosamente complejo</a>, con muchas variables y cosas muy rebuscadas. Las investigaciones muestran que la <a href="https://web.dev/milliseconds-make-millions">velocidad del sitio tiene un impacto directo en las tasas de conversión y los ingresos</a> de las empresas. En los últimos años, la industria ha puesto más énfasis en la visibilidad del rendimiento y en <a href="https://web.dev/fast">hacer que la web sea más rápida</a>. A partir de mayo de 2021, las <a href="https://developers.google.com/search/blog/2020/11/timing-for-page-experience" rel="noopener">señales de experiencia de la página</a> se incluirán en el ranking de búsqueda de Google.</p>
<p>El desafío único en Wix es dar su apoyo a <strong>millones</strong> de sitios, algunos de los cuales se crearon hace <em>muchos años</em> y no se han actualizado desde entonces. Contamos con varias <a href="https://support.wix.com/en/performance-and-technical-issues/site-performance" rel="noopener">herramientas y artículos</a> para ayudar a nuestros usuarios sobre lo que pueden hacer para analizar y mejorar el rendimiento de sus sitios.</p>
<p>Wix es un entorno gestionado y no todo está en manos del usuario. Compartir infraestructuras comunes presenta muchos desafíos para todos estos sitios, pero también abre oportunidades para mejoras importantes en todos los ámbitos, es decir, aprovechar las economías de escala.</p>
<aside class="aside flow bg-state-info-bg color-state-info-text"><div class=" flow"> <em>En esta publicación, me centraré en las mejoras realizadas en torno al servicio del HTML inicial, que inicia el proceso de carga de la página.</em> </div></aside>
<h3 id="hablar-en-un-idioma-comun">Hablar en un idioma común <a class="w-headline-link" href="https://web.dev/i18n/es/wix/#hablar-en-un-idioma-comun">#</a></h3>
<p>Una de las principales dificultades del desempeño es encontrar una terminología común para discutir diferentes aspectos de la experiencia del usuario, considerando tanto el desempeño técnico como el percibido. El uso de un lenguaje común bien definido dentro de la organización nos permitió discutir y categorizar fácilmente las diferentes partes técnicas y sus intercambios, clarificó nuestros informes de desempeño y ayudó enormemente a comprender en qué aspectos deberíamos enfocarnos en mejorar primero.</p>
<p>Ajustamos todo nuestro monitoreo y discusiones internas para incluir métricas estándar de la industria como <a href="https://web.dev/vitals/">Web Vitals</a>, que incluyen:</p>
<figure><img alt="Un diagrama de 2020 Core Web Vitals: LCP, FID y CLS." decoding="async" height="215" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/PLF62sx8lHkpKbnvYKKR.jpg?auto=format" srcset="https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/PLF62sx8lHkpKbnvYKKR.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/PLF62sx8lHkpKbnvYKKR.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/PLF62sx8lHkpKbnvYKKR.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/PLF62sx8lHkpKbnvYKKR.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/PLF62sx8lHkpKbnvYKKR.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/PLF62sx8lHkpKbnvYKKR.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/PLF62sx8lHkpKbnvYKKR.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/PLF62sx8lHkpKbnvYKKR.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/PLF62sx8lHkpKbnvYKKR.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/PLF62sx8lHkpKbnvYKKR.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/PLF62sx8lHkpKbnvYKKR.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/PLF62sx8lHkpKbnvYKKR.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/PLF62sx8lHkpKbnvYKKR.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/PLF62sx8lHkpKbnvYKKR.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/PLF62sx8lHkpKbnvYKKR.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/PLF62sx8lHkpKbnvYKKR.jpg?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/PLF62sx8lHkpKbnvYKKR.jpg?auto=format&w=1600 1600w" width="800" /> <figcaption>Core Web Vitals</figcaption></figure>
<h3 id="puntajes-de-rendimiento-y-complejidad-del-sitio">Puntajes de rendimiento y complejidad del sitio <a class="w-headline-link" href="https://web.dev/i18n/es/wix/#puntajes-de-rendimiento-y-complejidad-del-sitio">#</a></h3>
<p>Es bastante fácil crear un sitio que se cargue instantáneamente siempre que lo <a href="https://justinjackson.ca/words.html" rel="noopener">hagas muy simple</a> usando solo HTML y lo sirvas a través de un CDN.</p>
<figure data-float="left"><img alt="Ejemplo de PageSpeed Insights" decoding="async" height="647" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/xMUN9CUVvgnHofImPcV5.jpg?auto=format" srcset="https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/xMUN9CUVvgnHofImPcV5.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/xMUN9CUVvgnHofImPcV5.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/xMUN9CUVvgnHofImPcV5.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/xMUN9CUVvgnHofImPcV5.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/xMUN9CUVvgnHofImPcV5.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/xMUN9CUVvgnHofImPcV5.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/xMUN9CUVvgnHofImPcV5.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/xMUN9CUVvgnHofImPcV5.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/xMUN9CUVvgnHofImPcV5.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/xMUN9CUVvgnHofImPcV5.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/xMUN9CUVvgnHofImPcV5.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/xMUN9CUVvgnHofImPcV5.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/xMUN9CUVvgnHofImPcV5.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/xMUN9CUVvgnHofImPcV5.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/xMUN9CUVvgnHofImPcV5.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/xMUN9CUVvgnHofImPcV5.jpg?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/xMUN9CUVvgnHofImPcV5.jpg?auto=format&w=1600 1600w" width="800" /></figure>
<p>Sin embargo, la realidad es que los sitios son cada vez más complejos y sofisticados, funcionan más como aplicaciones que como documentos y soportan funcionalidades como blogs, soluciones de comercio electrónico, código personalizado, etc.</p>
<p>Wix ofrece una gran <a href="https://www.wix.com/website/templates" rel="noopener">variedad de plantillas</a>, lo que permite a sus usuarios crear fácilmente un sitio con muchas capacidades comerciales. Esas características adicionales a menudo incluyen <em>algunos</em> costos de rendimiento.</p>
<h2 id="el-viaje">El viaje <a class="w-headline-link" href="https://web.dev/i18n/es/wix/#el-viaje">#</a></h2>
<h3 id="al-principio,-existia-html">Al principio, existía HTML <a class="w-headline-link" href="https://web.dev/i18n/es/wix/#al-principio,-existia-html">#</a></h3>
<p>Cada vez que se carga una página web, siempre comienza con una solicitud inicial a una URL para recuperar el documento HTML. Esta respuesta HTML activa todas las solicitudes de clientes adicionales y la lógica del navegador para ejecutar y renderizar tu sitio. Esta es la parte más importante de la carga de la página, porque no sucede nada hasta que llega el comienzo de la respuesta (conocido como Time to First Byte (TTFB): Tiempo para el primer byte).</p>
<figure><img alt="Primera vista de WebPageTest" decoding="async" height="411" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/b1KKSlUQQTuNCDj4ndyJ.jpg?auto=format" srcset="https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/b1KKSlUQQTuNCDj4ndyJ.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/b1KKSlUQQTuNCDj4ndyJ.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/b1KKSlUQQTuNCDj4ndyJ.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/b1KKSlUQQTuNCDj4ndyJ.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/b1KKSlUQQTuNCDj4ndyJ.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/b1KKSlUQQTuNCDj4ndyJ.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/b1KKSlUQQTuNCDj4ndyJ.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/b1KKSlUQQTuNCDj4ndyJ.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/b1KKSlUQQTuNCDj4ndyJ.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/b1KKSlUQQTuNCDj4ndyJ.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/b1KKSlUQQTuNCDj4ndyJ.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/b1KKSlUQQTuNCDj4ndyJ.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/b1KKSlUQQTuNCDj4ndyJ.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/b1KKSlUQQTuNCDj4ndyJ.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/b1KKSlUQQTuNCDj4ndyJ.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/b1KKSlUQQTuNCDj4ndyJ.jpg?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/b1KKSlUQQTuNCDj4ndyJ.jpg?auto=format&w=1600 1600w" width="800" /><figcaption> Primera vista de WebPageTest</figcaption></figure>
<h4 id="el-pasado-renderizacion-del-lado-del-cliente-csr">El pasado: renderización del lado del cliente (CSR) <a class="w-headline-link" href="https://web.dev/i18n/es/wix/#el-pasado-renderizacion-del-lado-del-cliente-csr">#</a></h4>
<p>Cuando se opera sistemas a gran escala, siempre hay compensaciones que debes considerar, como el rendimiento, la confiabilidad y los costos. Hasta hace unos años, Wix utilizaba la renderización del lado del cliente (CSR), en la que el contenido HTML real se generaba a través de JavaScript en el lado del cliente (es decir, en el navegador), lo que nos permite admitir una gran escala de sitios sin tener costos operativos de un backend enorme.</p>
<p>CSR nos permitió usar un documento HTML común, que estaba esencialmente vacío. Todo lo que hizo fue activar la descarga del código y los datos requeridos que luego se utilizaron para generar el HTML completo en el dispositivo cliente.</p>
<h4 id="hoy-renderizado-del-lado-del-servidor-ssr">Hoy: renderizado del lado del servidor (SSR) <a class="w-headline-link" href="https://web.dev/i18n/es/wix/#hoy-renderizado-del-lado-del-servidor-ssr">#</a></h4>
<p>Hace unos años hicimos la transición a la renderización del lado del servidor (SSR), ya que fue beneficioso tanto para el SEO como para el rendimiento, mejorando los tiempos de visibilidad inicial de la página y asegurando una mejor indexación para los motores de búsqueda que no tienen soporte completo para ejecutar JavaScript.</p>
<p>Este enfoque mejoró la experiencia de visibilidad, especialmente en dispositivos y conexiones más lentos, y abrió la puerta a más optimizaciones de rendimiento. Sin embargo, también significó que para cada solicitud de página web, se generó una respuesta HTML única sobre la marcha, lo que está <strong>lejos</strong> de ser óptima, especialmente para sitios con una gran cantidad de visitas.</p>
<h3 id="introduccion-al-almacenamiento-en-cache-en-varias-ubicaciones">Introducción al almacenamiento en caché en varias ubicaciones <a class="w-headline-link" href="https://web.dev/i18n/es/wix/#introduccion-al-almacenamiento-en-cache-en-varias-ubicaciones">#</a></h3>
<p>El HTML de cada sitio era en su mayoría estático, pero tenía algunas advertencias:</p>
<ol>
<li>Con frecuencia cambia. Por ejemplo, cada vez que un usuario edita su sitio o realiza cambios en los datos del sitio, como en el inventario de la tienda del sitio web.</li>
<li>Tenía ciertos datos y cookies que eran <strong>específicos del visitante</strong>, lo que significa que dos personas que visitan el mismo sitio verían el HTML algo diferente. Por ejemplo, para respaldar las características de los productos, como recordar qué elementos colocó un visitante en el carrito, o el chat que el visitante inició con el negocio antes, y más.</li>
<li>No todas las páginas se pueden almacenar en caché. Por ejemplo, una página con un código de usuario personalizado, que muestra la hora actual como parte del documento, no es elegible para el almacenamiento en caché.</li>
</ol>
<p>Inicialmente, tomamos el enfoque relativamente seguro de almacenar en caché el HTML <span style="text-decoration:underline;">sin</span> datos de visitantes y luego solo modificamos partes específicas de la respuesta HTML sobre la marcha para cada visitante, para cada visita de caché.</p>
<h4 id="solucion-cdn-interna">Solución CDN interna <a class="w-headline-link" href="https://web.dev/i18n/es/wix/#solucion-cdn-interna">#</a></h4>
<p>Hicimos esto mediante la implementación de una solución interna: utilizando <a href="https://varnish-cache.org/" rel="noopener">Varnish HTTP Cache</a> para proxy y almacenamiento en caché, Kafka para mensajes de invalidación y un servicio basado en Scala/Netty que procesa estas respuestas HTML, pero muta el HTML y agrega datos específicos del visitante y cookies a la respuesta en caché.</p>
<p>Esta solución nos permitió implementar estos <strong>componentes delgados</strong> en muchas más ubicaciones geográficas y múltiples regiones de proveedores de nube, que se encuentran repartidas por todo el mundo. En 2019, presentamos <strong>más de 15 regiones nuevas</strong> y, gradualmente, habilitamos el almacenamiento en caché para más del 90% de nuestras páginas vistas que eran elegibles para el almacenamiento en caché. El servicio de sitios desde ubicaciones adicionales redujo la <a href="https://www.cloudping.co/grid" rel="noopener">latencia de la red</a> entre los clientes y los servidores que sirven la respuesta HTML, al acercar el contenido a los visitantes del sitio web.</p>
<p>También comenzamos a almacenar en caché ciertas respuestas de API de solo lectura utilizando la misma solución e invalidando la caché en cualquier cambio en el contenido del sitio. Por ejemplo, la lista de publicaciones de blog en el sitio se almacena en caché y se invalida cuando se publica y/o modifica una publicación.</p>
<h4 id="reducir-las-complejidades">Reducir las complejidades <a class="w-headline-link" href="https://web.dev/i18n/es/wix/#reducir-las-complejidades">#</a></h4>
<p>La implementación del almacenamiento en caché mejoró sustancialmente el rendimiento, principalmente en las <a href="https://web.dev/ttfb/">fases TTFB</a> y <a href="https://web.dev/fcp/">First Contentful Paint (FCP): Despliegue del primer contenido</a> y mejoró nuestra confiabilidad al ofrecer el contenido desde una ubicación más cercana al usuario final.</p>
<p>Sin embargo, la necesidad de modificar el HTML para cada respuesta introdujo una complejidad innecesaria que, si se eliminaba, presentaba una oportunidad para mejorar el rendimiento.</p>
<h3 id="almacenamiento-en-cache-del-navegador-y-preparativos-para-cdn">Almacenamiento en caché del navegador (y preparativos para CDN) <a class="w-headline-link" href="https://web.dev/i18n/es/wix/#almacenamiento-en-cache-del-navegador-y-preparativos-para-cdn">#</a></h3>
<div>
  <div class="stats">
    <div class="stats__item">
     <p class="stats__figure">~ 13 <sub>%</sub></p>
     <p>Las solicitudes HTML se sirven directamente desde la memoria caché del navegador, lo que ahorra mucho ancho de banda y reduce los tiempos de carga para las vistas repetidas.</p>
    </div>
  </div>
</div>
<p>El siguiente paso fue eliminar por <span style="text-decoration:underline;">completo estos</span> datos específicos del visitante del HTML y recuperarlos de un punto final separado, llamado por el cliente para este propósito, después de que haya llegado el HTML.</p>
<p>Migramos cuidadosamente estos datos y cookies a un nuevo punto final, que se llama en cada carga de página, pero devuelve un JSON delgado, que se requiere solo para el <a href="https://reactjs.org/docs/react-dom.html#hydrate" rel="noopener">proceso de hidratación</a>, para alcanzar la interactividad completa de la página.</p>
<p>Esto nos permitió habilitar el almacenamiento en caché del HTML del navegador, lo que significa que los navegadores ahora guardan la respuesta HTML para visitas repetidas y solo llaman al servidor para validar que el contenido no haya cambiado. Esto se hace usando <a href="https://en.wikipedia.org/wiki/HTTP_ETag" rel="noopener">HTTP ETag</a>, que es básicamente un identificador asignado a una versión específica de un recurso HTML. Si el contenido sigue siendo el mismo, nuestros servidores envían una respuesta <a href="https://developer.mozilla.org/docs/Web/HTTP/Status/304" rel="noopener">304 Not Modified</a> al cliente, sin un cuerpo.</p>
<figure><img alt="ALT_TEXT_HERE" decoding="async" height="410" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/hr1xnQccJEkHTBGxS5wF.jpg?auto=format" srcset="https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/hr1xnQccJEkHTBGxS5wF.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/hr1xnQccJEkHTBGxS5wF.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/hr1xnQccJEkHTBGxS5wF.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/hr1xnQccJEkHTBGxS5wF.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/hr1xnQccJEkHTBGxS5wF.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/hr1xnQccJEkHTBGxS5wF.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/hr1xnQccJEkHTBGxS5wF.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/hr1xnQccJEkHTBGxS5wF.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/hr1xnQccJEkHTBGxS5wF.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/hr1xnQccJEkHTBGxS5wF.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/hr1xnQccJEkHTBGxS5wF.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/hr1xnQccJEkHTBGxS5wF.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/hr1xnQccJEkHTBGxS5wF.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/hr1xnQccJEkHTBGxS5wF.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/hr1xnQccJEkHTBGxS5wF.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/hr1xnQccJEkHTBGxS5wF.jpg?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/hr1xnQccJEkHTBGxS5wF.jpg?auto=format&w=1600 1600w" width="800" /> <figcaption> Vista de repetición de WebPageTest</figcaption></figure>
<p>Además, este cambio significa que nuestro HTML ya no es específico del visitante y no contiene cookies. En otras palabras, básicamente se puede almacenar en caché en cualquier lugar, lo que abre la puerta al uso de proveedores de CDN que tienen una presencia geográfica mucho mejor en cientos de ubicaciones en todo el mundo.</p>
<h3 id="dns,-ssl-y-http2">DNS, SSL y HTTP/2 <a class="w-headline-link" href="https://web.dev/i18n/es/wix/#dns,-ssl-y-http2">#</a></h3>
<p>Con el almacenamiento en caché habilitado, los tiempos de espera se redujeron y otras partes importantes de la conexión inicial se volvieron más sustanciales. Mejorar nuestra infraestructura de red y monitoreo nos permitió mejorar nuestros tiempos de DNS, conexión y SSL.</p>
<figure data-float="right"><img alt="Un gráfico de tiempo de respuesta" decoding="async" height="441" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/Uuvh9xTItQ8wMA9s13RP.jpg?auto=format" srcset="https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/Uuvh9xTItQ8wMA9s13RP.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/Uuvh9xTItQ8wMA9s13RP.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/Uuvh9xTItQ8wMA9s13RP.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/Uuvh9xTItQ8wMA9s13RP.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/Uuvh9xTItQ8wMA9s13RP.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/Uuvh9xTItQ8wMA9s13RP.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/Uuvh9xTItQ8wMA9s13RP.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/Uuvh9xTItQ8wMA9s13RP.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/Uuvh9xTItQ8wMA9s13RP.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/Uuvh9xTItQ8wMA9s13RP.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/Uuvh9xTItQ8wMA9s13RP.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/Uuvh9xTItQ8wMA9s13RP.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/Uuvh9xTItQ8wMA9s13RP.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/Uuvh9xTItQ8wMA9s13RP.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/Uuvh9xTItQ8wMA9s13RP.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/Uuvh9xTItQ8wMA9s13RP.jpg?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/Uuvh9xTItQ8wMA9s13RP.jpg?auto=format&w=1600 1600w" width="800" /></figure>
<p><a href="https://en.wikipedia.org/wiki/HTTP/2" rel="noopener">HTTP/2</a> se habilitó para todos los dominios de usuario, lo que redujo tanto la cantidad de conexiones necesarias como la sobrecarga que conlleva cada nueva conexión. Este fue un cambio relativamente fácil de implementar, mientras se aprovechaban los beneficios de <a href="https://developers.google.com/web/fundamentals/performance/http2" rel="noopener">rendimiento y resistencia</a> que vienen con HTTP/2.</p>
<h3 id="compresion-brotli-contra-gzip">Compresión Brotli (contra gzip) <a class="w-headline-link" href="https://web.dev/i18n/es/wix/#compresion-brotli-contra-gzip">#</a></h3>
<div>
  <div class="stats">
    <div class="stats__item">
     <p class="stats__figure">21 - 25 <sub>%</sub></p>
     <p>Reducción del tamaño de la mediana de transferencia de archivos</p>
    </div>
  </div>
</div>
<p>Tradicionalmente, todos nuestros archivos se comprimían mediante la compresión <a href="https://en.wikipedia.org/wiki/Gzip" rel="noopener">gzip</a>, que es la opción de compresión HTML más común en la web. ¡Este protocolo de compresión se implementó inicialmente hace casi 30 años!</p>
<figure data-float="right"><img alt="Compresión Brotli" decoding="async" height="805" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/h7KzeAfg2THMdDGMYvlR.jpg?auto=format" srcset="https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/h7KzeAfg2THMdDGMYvlR.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/h7KzeAfg2THMdDGMYvlR.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/h7KzeAfg2THMdDGMYvlR.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/h7KzeAfg2THMdDGMYvlR.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/h7KzeAfg2THMdDGMYvlR.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/h7KzeAfg2THMdDGMYvlR.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/h7KzeAfg2THMdDGMYvlR.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/h7KzeAfg2THMdDGMYvlR.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/h7KzeAfg2THMdDGMYvlR.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/h7KzeAfg2THMdDGMYvlR.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/h7KzeAfg2THMdDGMYvlR.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/h7KzeAfg2THMdDGMYvlR.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/h7KzeAfg2THMdDGMYvlR.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/h7KzeAfg2THMdDGMYvlR.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/h7KzeAfg2THMdDGMYvlR.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/h7KzeAfg2THMdDGMYvlR.jpg?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/h7KzeAfg2THMdDGMYvlR.jpg?auto=format&w=1600 1600w" width="800" /><figcaption> <a href="https://tools.paulcalvano.com/compression.php">Estimador de nivel de compresión Brotli</a></figcaption></figure>
<p>La más reciente <a href="https://en.wikipedia.org/wiki/Brotli" rel="noopener">compresión Brotli</a> introduce mejoras de compresión casi sin concesiones y poco a poco se está volviendo más popular, como se describe en el anual <a href="https://almanac.httparchive.org/en/2020/compression#what-type-of-content-should-we-compress" rel="noopener">Compression chapter</a> de Web Almanac. Ha sido compatible con <a href="https://caniuse.com/brotli" rel="noopener">todos los principales navegadores</a> durante un tiempo.</p>
<p>Habilitamos el soporte de Brotli en nuestros proxies nginx en los bordes, para todos los clientes que sean compatibles.</p>
<p>Al pasar a utilizar la compresión Brotli, redujo nuestro tamaño mediano de transferencia de archivos entre un <strong>21% y un 25%</strong>, lo que resultó en un uso reducido del ancho de banda y tiempos de carga mejorados.</p>
<figure><img alt="Tamaños de respuesta de la mediana para dispositivos móviles y computadoras de escritorio" decoding="async" height="173" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/392RWYamrwkdFozk91LC.jpg?auto=format" srcset="https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/392RWYamrwkdFozk91LC.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/392RWYamrwkdFozk91LC.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/392RWYamrwkdFozk91LC.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/392RWYamrwkdFozk91LC.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/392RWYamrwkdFozk91LC.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/392RWYamrwkdFozk91LC.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/392RWYamrwkdFozk91LC.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/392RWYamrwkdFozk91LC.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/392RWYamrwkdFozk91LC.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/392RWYamrwkdFozk91LC.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/392RWYamrwkdFozk91LC.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/392RWYamrwkdFozk91LC.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/392RWYamrwkdFozk91LC.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/392RWYamrwkdFozk91LC.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/392RWYamrwkdFozk91LC.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/392RWYamrwkdFozk91LC.jpg?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/392RWYamrwkdFozk91LC.jpg?auto=format&w=1600 1600w" width="800" /><figcaption> Tamaños de respuesta de la mediana</figcaption></figure>
<h2 id="redes-de-entrega-de-contenido-cdn">Redes de entrega de contenido (CDN) <a class="w-headline-link" href="https://web.dev/i18n/es/wix/#redes-de-entrega-de-contenido-cdn">#</a></h2>
<h3 id="seleccion-de-cdn-dinamica">Selección de CDN dinámica <a class="w-headline-link" href="https://web.dev/i18n/es/wix/#seleccion-de-cdn-dinamica">#</a></h3>
<p>En Wix, siempre hemos utilizado <a href="https://web.dev/content-delivery-networks/">CDN</a> para servir todo el código JavaScript y las imágenes en los sitios web de los usuarios.</p>
<p>Recientemente, nos integramos con una solución de nuestro proveedor de DNS, para seleccionar automáticamente la CDN con mejor desempeño según la red y el origen del cliente. Esto nos permite servir los archivos estáticos desde la mejor ubicación para cada visitante y evitar problemas de disponibilidad en una determinada CDN.</p>
<h3 id="proximamente-dominios-de-usuario-servidos-por-cdn">Próximamente… dominios de usuario servidos por CDN <a class="w-headline-link" href="https://web.dev/i18n/es/wix/#proximamente-dominios-de-usuario-servidos-por-cdn">#</a></h3>
<p>La última pieza del rompecabezas servira la última y parte más crítica a través de un CDN: el HTML del dominio del usuario.</p>
<p>Como se describió anteriormente, creamos nuestra propia solución interna para almacenar en caché y entregar los resultados de API y HTML específicos del sitio. Mantener esta solución en tantas regiones nuevas también tiene sus costos operativos y agregar nuevas ubicaciones se convierte en un proceso que debemos administrar y optimizar continuamente.</p>
<p>Actualmente nos estamos integrando con varios proveedores de CDN para respaldar el servicio de todo el sitio de Wix directamente desde las ubicaciones de CDN para mejorar la distribución de nuestros servidores en todo el mundo y así mejorar aún más los tiempos de respuesta. Este es un desafío debido a la gran cantidad de dominios que atendemos, que requieren terminación SSL en el borde.</p>
<p>La integración con CDN acerca los sitios web de Wix al cliente más que nunca y viene con más mejoras en la experiencia de carga, incluidas tecnologías más nuevas como HTTP/3 sin un esfuerzo adicional de nuestra parte.</p>
<hr />
<h3 id="algunas-palabras-sobre-el-monitoreo-del-desempeno">Algunas palabras sobre el monitoreo del desempeño <a class="w-headline-link" href="https://web.dev/i18n/es/wix/#algunas-palabras-sobre-el-monitoreo-del-desempeno">#</a></h3>
<p>Si ejecutas un sitio Wix, probablemente te estés preguntando cómo esto se traduce en los resultados de rendimiento de tu sitio Wix y cómo lo comparamos con otras plataformas de sitios web.</p>
<p>La mayor parte del trabajo realizado anteriormente se implementó el año pasado y cierta parte aún se está implementando.</p>
<p>El Web Almanac de HTTPArchive publicó recientemente la <a href="https://almanac.httparchive.org/en/2020" rel="noopener">edición 2020</a> que incluye un excelente capítulo sobre la <a href="https://almanac.httparchive.org/en/2020/cms" rel="noopener">experiencia del usuario de CMS</a>. Ten en cuenta que muchos de los números descritos en este artículo son a mediados del 2020.</p>
<p>Esperamos ver el informe actualizado en 2021 y estamos monitoreando activamente los informes de <a href="https://developer.chrome.com/docs/crux/" rel="noopener">CrUX</a> para nuestros sitios, así como nuestras métricas de rendimiento internas.</p>
<p>Estamos comprometidos a mejorar continuamente los tiempos de carga y proporcionar a nuestros usuarios una plataforma en la que puedan crear sitios como ellos lo imaginen, sin comprometer el rendimiento.</p>
<figure><img alt="La LCP, Speed Index y FCP para un sitio móvil a lo largo del tiempo" decoding="async" height="259" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/AADz7d1yVOWZlq0iSb6P.jpg?auto=format" srcset="https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/AADz7d1yVOWZlq0iSb6P.jpg?auto=format&w=200 200w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/AADz7d1yVOWZlq0iSb6P.jpg?auto=format&w=228 228w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/AADz7d1yVOWZlq0iSb6P.jpg?auto=format&w=260 260w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/AADz7d1yVOWZlq0iSb6P.jpg?auto=format&w=296 296w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/AADz7d1yVOWZlq0iSb6P.jpg?auto=format&w=338 338w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/AADz7d1yVOWZlq0iSb6P.jpg?auto=format&w=385 385w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/AADz7d1yVOWZlq0iSb6P.jpg?auto=format&w=439 439w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/AADz7d1yVOWZlq0iSb6P.jpg?auto=format&w=500 500w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/AADz7d1yVOWZlq0iSb6P.jpg?auto=format&w=571 571w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/AADz7d1yVOWZlq0iSb6P.jpg?auto=format&w=650 650w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/AADz7d1yVOWZlq0iSb6P.jpg?auto=format&w=741 741w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/AADz7d1yVOWZlq0iSb6P.jpg?auto=format&w=845 845w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/AADz7d1yVOWZlq0iSb6P.jpg?auto=format&w=964 964w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/AADz7d1yVOWZlq0iSb6P.jpg?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/AADz7d1yVOWZlq0iSb6P.jpg?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/AADz7d1yVOWZlq0iSb6P.jpg?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/BrQidfK9jaQyIHwdw91aVpkPiib2/AADz7d1yVOWZlq0iSb6P.jpg?auto=format&w=1600 1600w" width="800" /> <figcaption>La LCP, Speed Index y FCP para un sitio móvil a lo largo del tiempo</figcaption></figure>
<p>DebugBear lanzó recientemente una <a href="https://www.debugbear.com/blog/website-builder-performance-review" rel="noopener">revisión de rendimiento del Website Builder (creador de sitios web)</a> muy interesante, que toca algunas de las áreas que mencioné anteriormente y examina el rendimiento de sitios muy simples construidos en cada plataforma. Este <a href="https://matt05041.wixsite.com/bizsolutions" rel="noopener">sitio</a> se construyó hace casi dos años y no se modificó desde entonces, pero la plataforma está mejorando continuamente y el rendimiento del sitio junto con él, lo que se puede observar al <a href="https://www.debugbear.com/project/175/pageLoad/873/overview?dateRange=2019-03-31T21%3A00Z-to-2021-03-31T21%3A59Z" rel="noopener">ver sus datos</a> durante el último año y medio.</p>
<h2 id="conclusion">Conclusión <a class="w-headline-link" href="https://web.dev/i18n/es/wix/#conclusion">#</a></h2>
<p>Esperamos que nuestra experiencia te inspire a adoptar una cultura orientada al desempeño en tu organización y que los detalles anteriores sean útiles y aplicables a tu plataforma o sitio.</p>
<p>Para resumir:</p>
<ul>
<li>Elije un conjunto de métricas de las que puedas realizar un seguimiento de forma constante mediante el uso de herramientas respaldadas por la industria. Recomendamos Core Web Vitals.</li>
<li>Aprovecha el almacenamiento en caché del navegador y las CDN.</li>
<li>Migra a HTTP/2 (o HTTP/3 si es posible).</li>
<li>Utiliza la compresión Brotli.</li>
</ul>
<p>Gracias por conocer nuestra historia y te invitamos a hacer preguntas, compartir ideas en <a href="https://twitter.com/alonkochba" rel="noopener">Twitter</a> y <a href="https://github.com/alonkochba" rel="noopener">GitHub</a> y unirte a la conversación sobre rendimiento web en tus canales favoritos.</p>
<h2 id="entonces,-¿como-se-ve-el-rendimiento-de-tu-sitio-wix-reciente">Entonces, ¿cómo se ve <strong>el</strong> rendimiento de tu sitio Wix reciente? <a class="w-headline-link" href="https://web.dev/i18n/es/wix/#entonces,-%C2%BFcomo-se-ve-el-rendimiento-de-tu-sitio-wix-reciente">#</a></h2>]]></content:encoded>
</item>
<item>
<title><![CDATA[Clipchamp's video editor PWA installs see a 97% monthly growth]]></title>
<description><![CDATA[97%
    Monthly growth in PWA installations
  
  
    2.3x
    Performance improvement
  
  
    9%
    Higher retention in PWA users
  

Clipchamp is the in-browser online video
editor that empowers anyone to tell
stories worth sharing through video. Around the world, over 12 million creators
us...]]></description>
<link>https://tsecurity.de/de/1725700/it+betriebssysteme/web+tipps/clipchamps+video+editor+pwa+installs+see+a+97+monthly+growth/</link>
<pubDate>Thu, 08 Dec 2022 19:45:05 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div class="stats">
  <div class="stats__item">
    <p class="stats__figure">97<sub>%</sub></p>
    <p>Monthly growth in PWA installations</p>
  </div>
  <div class="stats__item">
    <p class="stats__figure">2.3<sub>x</sub></p>
    <p>Performance improvement</p>
  </div>
  <div class="stats__item">
    <p class="stats__figure">9<sub>%</sub></p>
    <p>Higher retention in PWA users</p>
  </div>
</div>
<p>Clipchamp is the in-browser online <a href="https://clipchamp.com/en/video-editor/" rel="noopener">video
editor</a> that empowers anyone to tell
stories worth sharing through video. Around the world, over 12 million creators
use Clipchamp to easily edit videos. We offer simple solutions for making videos,
from intuitive tools like crop and trim, to practical features like our screen
recorder, and even a <a href="https://clipchamp.com/en/video-meme-generator/" rel="noopener">meme maker</a>.</p>
<h2 id="who-uses-clipchamp">Who uses Clipchamp? <a class="w-headline-link" href="https://web.dev/clipchamp/#who-uses-clipchamp">#</a></h2>
<p>Our users (or everyday editors as we call them) are diverse. No expertise is
necessary to be a video editor with Clipchamp. Specifically, we're currently
noticing sales, support training, and product marketing teams using our webcam
and screen recorder for quick explainer content with added text and GIFs to make
it engaging. We're also observing a lot of small businesses edit and post social
videos while on the move.</p>
<h3 id="what-challenges-do-they-face">What challenges do they face? <a class="w-headline-link" href="https://web.dev/clipchamp/#what-challenges-do-they-face">#</a></h3>
<p>We recognise that video editing can be intimidating at first. The assumption is
that it's hard, probably due to previous frustrating experiences with complex
editing software. In contrast, Clipchamp focuses on ease and simplicity,
providing support with text overlays, stock video and music, templates, and
more.</p>
<p>We find most everyday editors aren't wanting to create motion picture
masterpieces. We talk to our users a lot and are continually reminded that
they're busy and just want to get their story out to the world as quickly and
easily as possible, so this is a focus for us.</p>
<h2 id="developing-a-clipchamp-pwa">Developing a Clipchamp PWA <a class="w-headline-link" href="https://web.dev/clipchamp/#developing-a-clipchamp-pwa">#</a></h2>
<p>At Clipchamp, we're all about empowering people to tell their stories through
video. To live up to this vision, we soon realised that allowing our users to
use their own footage when putting together a video project is important.</p>
<p>That insight put the pressure on Clipchamp's engineering team to come up with a
technology that can efficiently process Gigabyte-scale media files in a web
application. Having network bandwidth constraints in mind, we were quick to rule
out a traditional cloud-based solution. Uploading large media files from a
retail internet connection would invariably introduce massive wait times
before editing could even begin, effectively resulting in a poor user
experience.</p>
<p>That made us switch to a fully in-browser solution, where all the &quot;heavy
lifting&quot; of video processing is done locally using hardware resources available
on the end user's device. We strategically bet on the Chrome browser and, by
extension, the ChromeOS platform to help us overcome the inevitable challenges
of building an in-browser video creation platform.</p>
<p>Video processing is enormously resource hungry, affecting computer and storage
resources alike. We started out building the first version of Clipchamp on top
of Google's (Portable) Native Client (PNaCl). While eventually phased out, PNaCl
was a great confirmation for our team that web apps can be fast and low latency,
while still running on end user hardware.</p>
<p>When later switching to WebAssembly, we were glad to see Chrome taking the lead
in incorporating post-MVP features such as bulk memory operations, threading,
and most recently: fixed-width vector operations. The latter has been hotly
anticipated by our engineering team, offering us the ability to optimize our
video processing stack to take advantage of <a href="https://v8.dev/features/simd" rel="noopener">SIMD</a>
operations, prevalent on contemporary CPUs. Taking advantage of Chrome's
WebAssembly SIMD support, we were able to speed up some particularly demanding
workloads such as 4K video decoding and video encoding.</p>
<img alt="Encoder performance (1080p, 8.33 sec @ 30 fps). Default preset without SIMD: 25 seconds. Default preset with SIMD: ~13 seconds. Compression preset without SIMD: ~83 seconds. Compression preset with SIMD: ~33 seconds. Quality preset (new!) without SIMD: ~75 seconds. Quality preset with SIMD: ~30 seconds." decoding="async" height="495" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/9NFi12YDG360SlfMl1OP.png?auto=format" srcset="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/9NFi12YDG360SlfMl1OP.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/9NFi12YDG360SlfMl1OP.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/9NFi12YDG360SlfMl1OP.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/9NFi12YDG360SlfMl1OP.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/9NFi12YDG360SlfMl1OP.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/9NFi12YDG360SlfMl1OP.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/9NFi12YDG360SlfMl1OP.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/9NFi12YDG360SlfMl1OP.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/9NFi12YDG360SlfMl1OP.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/9NFi12YDG360SlfMl1OP.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/9NFi12YDG360SlfMl1OP.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/9NFi12YDG360SlfMl1OP.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/9NFi12YDG360SlfMl1OP.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/9NFi12YDG360SlfMl1OP.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/9NFi12YDG360SlfMl1OP.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/9NFi12YDG360SlfMl1OP.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/9NFi12YDG360SlfMl1OP.png?auto=format&w=1600 1600w" width="800" />
<p>With little prior experience and in less than a month of effort for one of our
engineers, we managed to improve performance by 2.3x. While still limited to a
Chrome origin trial, we were already able to roll out these SIMD enhancements to
the majority of our users. While our users run wildly different hardware setups,
we were able to confirm a matching performance uplift in production without
seeing any detrimental effects in failure rates.</p>
<p>More recently, we integrated the emerging WebCodecs API, currently available
under another Chrome origin trial. Using this new capability, we will be able to
further improve performance of video decoding on low-spec hardware as found
in many popular Chromebooks.</p>
<p>With a PWA created, it's important to encourage its adoption. As with many web
apps, we've focused on ease of access which includes things like social logins
including Google, quickly getting the user into a place where they can edit
video and then making it easy to export the video. Additionally, we promoted
our PWA install prompts in the toolbar and as a pop-up notice in our menu
navigation.</p>
<h2 id="results">Results <a class="w-headline-link" href="https://web.dev/clipchamp/#results">#</a></h2>
<p>Our installable Chrome PWA has been doing really well. We've been so pleased to
see 9% higher retention with PWA users than with our standard desktop users.
Installation of the PWA has been massive, increasing at a rate of 97% a month
since we launched five months ago. And, as mentioned before, the WebAssembly
SIMD enhancements improved performance 2.3x.</p>
<figure>
  <img alt="June 2020: ~1K installs. July 2020: ~5K installs. August 2020: ~12K installs. September 2020: ~20K installs. October 2020: ~30K installs." decoding="async" height="266" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/MR7YUGQ4r99r3oG4w0Jx.png?auto=format" srcset="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/MR7YUGQ4r99r3oG4w0Jx.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/MR7YUGQ4r99r3oG4w0Jx.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/MR7YUGQ4r99r3oG4w0Jx.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/MR7YUGQ4r99r3oG4w0Jx.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/MR7YUGQ4r99r3oG4w0Jx.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/MR7YUGQ4r99r3oG4w0Jx.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/MR7YUGQ4r99r3oG4w0Jx.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/MR7YUGQ4r99r3oG4w0Jx.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/MR7YUGQ4r99r3oG4w0Jx.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/MR7YUGQ4r99r3oG4w0Jx.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/MR7YUGQ4r99r3oG4w0Jx.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/MR7YUGQ4r99r3oG4w0Jx.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/MR7YUGQ4r99r3oG4w0Jx.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/MR7YUGQ4r99r3oG4w0Jx.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/MR7YUGQ4r99r3oG4w0Jx.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/MR7YUGQ4r99r3oG4w0Jx.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/MR7YUGQ4r99r3oG4w0Jx.png?auto=format&w=1600 1600w" width="800" />
  <figcaption>
    Clipchamp PWA installs over the last 6 months.
  </figcaption>
</figure>
<h2 id="future">Future <a class="w-headline-link" href="https://web.dev/clipchamp/#future">#</a></h2>
<p>We're pleasantly surprised by the engagement and uptake of our PWA. We think
Clipchamp user retention benefited because the PWA is installed and easier to
get to. We also noted the PWA performs better for the editor, which makes it
more compelling and keeps people coming back.</p>
<p>Looking to the future, we're excited about the opportunity ChromeOS provides
for even more users to get more done with less fuss. Specifically, we're excited
about some of the convenience integrations with the local OS when working with
files. We think this will help speed up workflows for our busy everyday editors,
and that's one of our highest priorities.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[How focusing on web performance improved Tokopedia's click-through rate by 35%]]></title>
<description><![CDATA[Tokopedia is one of the largest e-commerce companies in Indonesia. With 2.7M+ nationwide merchant
networks, 18M+ product listings, and 50M+ monthly visitors, the web team knew  that investment in
web performance was essential. By building a performance-first culture, they achieved a 35% increase
...]]></description>
<link>https://tsecurity.de/de/1725701/it+betriebssysteme/web+tipps/how+focusing+on+web+performance+improved+tokopedias+click-through+rate+by+35/</link>
<pubDate>Thu, 08 Dec 2022 19:45:05 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Tokopedia is one of the largest e-commerce companies in Indonesia. With 2.7M+ nationwide merchant
networks, 18M+ product listings, and 50M+ monthly visitors, the web team knew  that investment in
web performance was essential. By building a performance-first culture, they achieved a 35% increase
in click-through rates (CTR) and an 8% increase in conversions (CVR).</p>
<div class="stats">
  <div class="stats__item">
    <p class="stats__figure">35<sub>%</sub></p>
    <p>Increase in CTR</p>
  </div>
  <div class="stats__item">
    <p class="stats__figure">8<sub>%</sub></p>
    <p>Increase in CVR</p>
  </div>
  <div class="stats__item">
    <p class="stats__figure">4<sub>sec</sub></p>
    <p>Improvement in TTI</p>
  </div>
</div>
<h2 id="highlighting-the-opportunity">Highlighting the opportunity <a class="w-headline-link" href="https://web.dev/tokopedia/#highlighting-the-opportunity">#</a></h2>
<p>The web team talked to their leadership team on the importance of investing in web performance to
improve user experience and engagement, and also showed the impact of performance using advanced
patterns and APIs.</p>
<aside class="aside flow bg-state-info-bg color-state-info-text"><div class=" flow"> Check out web.dev's <a href="https://web.dev/fast/#build-a-performance-culture">Build a performance culture</a> collection for tips on how to persuade your cross-functional stakeholders to focus on website performance. </div></aside>
<h2 id="the-approach-they-used">The approach they used <a class="w-headline-link" href="https://web.dev/tokopedia/#the-approach-they-used">#</a></h2>
<h3 id="javascript-and-resource-optimization">JavaScript and resource optimization <a class="w-headline-link" href="https://web.dev/tokopedia/#javascript-and-resource-optimization">#</a></h3>
<div class="switcher">
  <div>
    <p>
      Render-blocking or long-running <a href="https://web.dev/fast/#optimize-your-javascript">JavaScript</a>
      is a common cause of performance issues. The team took several steps to minimize this:
    </p>
    <ul>
      <li>
        Built a script controller library to selectively load third-party scripts to optimize for
        critical rendering path.
      </li>
      <li>
        Replaced heavier libraries with lighter ones.
      </li>
      <li>
        Implemented <a href="https://web.dev/reduce-javascript-payloads-with-code-splitting/">code splitting</a>
        and optimized for above-the-fold content.
      </li>
      <li>
        Implemented <a href="https://web.dev/adaptive-loading-cds-2019/">adaptive loading</a>, e.g. only
        loading high-quality images for devices on fast networks and using lower-quality images for
        devices on slow networks.
      </li>
      <li>
        <a href="https://web.dev/lazy-loading-images/">Lazy-loaded</a> below-the-fold images.
      </li>
      <li>
        Deferred loading of non-critical JavaScript.
      </li>
    </ul>
  </div>
  <figure>
    <img alt="Script controller library improved TTI by 4 seconds" decoding="async" height="707" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/G8s0LNl7BwXuNJkCsPwV.png?auto=format" srcset="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/G8s0LNl7BwXuNJkCsPwV.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/G8s0LNl7BwXuNJkCsPwV.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/G8s0LNl7BwXuNJkCsPwV.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/G8s0LNl7BwXuNJkCsPwV.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/G8s0LNl7BwXuNJkCsPwV.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/G8s0LNl7BwXuNJkCsPwV.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/G8s0LNl7BwXuNJkCsPwV.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/G8s0LNl7BwXuNJkCsPwV.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/G8s0LNl7BwXuNJkCsPwV.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/G8s0LNl7BwXuNJkCsPwV.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/G8s0LNl7BwXuNJkCsPwV.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/G8s0LNl7BwXuNJkCsPwV.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/G8s0LNl7BwXuNJkCsPwV.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/G8s0LNl7BwXuNJkCsPwV.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/G8s0LNl7BwXuNJkCsPwV.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/G8s0LNl7BwXuNJkCsPwV.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/G8s0LNl7BwXuNJkCsPwV.png?auto=format&w=1600 1600w" width="800" />
  </figure>
</div>
<h3 id="homepage-optimization">Homepage optimization <a class="w-headline-link" href="https://web.dev/tokopedia/#homepage-optimization">#</a></h3>
<div class="switcher">
  <p>
    The team used <a href="https://svelte.dev/">Svelte</a> to build a lite version of the homepage
    for first-time visitors, ensuring a fast website experience. This version also used a service
    worker to cache the non-lite assets in the background.
  </p>
  <figure>
    <img alt="Reduced app JavaScript size by 88% (from 320 KB to 37 KB). Boosted Lighthouse score by 90 points. Achieved FCP of less than 1 second. 35% CTR increase. 8% CVR increase." decoding="async" height="657" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gSJXd2GT8nT7Uzsth4Gg.png?auto=format" srcset="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gSJXd2GT8nT7Uzsth4Gg.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gSJXd2GT8nT7Uzsth4Gg.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gSJXd2GT8nT7Uzsth4Gg.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gSJXd2GT8nT7Uzsth4Gg.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gSJXd2GT8nT7Uzsth4Gg.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gSJXd2GT8nT7Uzsth4Gg.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gSJXd2GT8nT7Uzsth4Gg.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gSJXd2GT8nT7Uzsth4Gg.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gSJXd2GT8nT7Uzsth4Gg.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gSJXd2GT8nT7Uzsth4Gg.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gSJXd2GT8nT7Uzsth4Gg.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gSJXd2GT8nT7Uzsth4Gg.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gSJXd2GT8nT7Uzsth4Gg.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gSJXd2GT8nT7Uzsth4Gg.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gSJXd2GT8nT7Uzsth4Gg.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gSJXd2GT8nT7Uzsth4Gg.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gSJXd2GT8nT7Uzsth4Gg.png?auto=format&w=1600 1600w" width="800" />
  </figure>
</div>
<h3 id="performance-budgeting-and-monitoring">Performance budgeting and monitoring <a class="w-headline-link" href="https://web.dev/tokopedia/#performance-budgeting-and-monitoring">#</a></h3>
<div class="switcher">
  <div>
    <p>
      The team built a performance monitoring dashboard using
      <a href="https://web.dev/lighthouse-whats-new-6.0/">Lighthouse</a>
      and other tools to improve the quality of web pages:
    </p>
    <ul>
      <li>
        Measures network quality, infrastructure monitoring, frontend performance, and server
        performance.
      </li>
      <li>
        Uses a combination of web platform APIs (such as the
        <a href="https://developer.mozilla.org/docs/Web/API/Resource_Timing_API/Using_the_Resource_Timing_API">
          Resource Timing API
        </a> and the
        <code><a href="https://developer.mozilla.org/docs/Web/HTTP/Headers/Server-Timing">Server-Timing</a></code>
        header), the <a href="https://developers.google.com/speed/docs/insights/v5/get-started">
          PageSpeed Insights (PSI) API</a>, and
        <a href="https://developer.chrome.com/docs/crux/">
          Chrome User Experience Report</a> data to monitor field and lab metrics.
      </li>
      <li>
        Analyzes images from Lighthouse to help identify image optimization opportunities.
      </li>
      <li>
        Enforces a bundle-size budget during continuous integration (CI). The CI run fails if the
        bundle size is over budget.
      </li>
    </ul>
  </div>
  <figure>
    <img alt="2.2 second TTI score on the homepage (Lighthouse score: 88). 1.9 second TTI score on product pages (Lighthouse score: 86)." decoding="async" height="1097" loading="lazy" sizes="(min-width: 800px) 800px, calc(100vw - 48px)" src="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gObv2y7p7ozM190w61M3.png?auto=format" srcset="https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gObv2y7p7ozM190w61M3.png?auto=format&w=200 200w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gObv2y7p7ozM190w61M3.png?auto=format&w=228 228w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gObv2y7p7ozM190w61M3.png?auto=format&w=260 260w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gObv2y7p7ozM190w61M3.png?auto=format&w=296 296w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gObv2y7p7ozM190w61M3.png?auto=format&w=338 338w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gObv2y7p7ozM190w61M3.png?auto=format&w=385 385w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gObv2y7p7ozM190w61M3.png?auto=format&w=439 439w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gObv2y7p7ozM190w61M3.png?auto=format&w=500 500w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gObv2y7p7ozM190w61M3.png?auto=format&w=571 571w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gObv2y7p7ozM190w61M3.png?auto=format&w=650 650w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gObv2y7p7ozM190w61M3.png?auto=format&w=741 741w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gObv2y7p7ozM190w61M3.png?auto=format&w=845 845w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gObv2y7p7ozM190w61M3.png?auto=format&w=964 964w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gObv2y7p7ozM190w61M3.png?auto=format&w=1098 1098w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gObv2y7p7ozM190w61M3.png?auto=format&w=1252 1252w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gObv2y7p7ozM190w61M3.png?auto=format&w=1428 1428w, https://web-dev.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/gObv2y7p7ozM190w61M3.png?auto=format&w=1600 1600w" width="800" />
  </figure>
</div>
<blockquote>
  <p style="font-style: italic; font-size: 1.5rem;">
    Being an e-commerce business, user acquisition is at the heart of our success. We acknowledge
    the importance of the web and thus we are passionate about investing in all
    the tools and features that will give the best user experience to our users.
  </p>
  <cite>Dendi Sunardi, Engineering Manager, Web Platform, Tokopedia</cite>
</blockquote>
<p>Check out the <a href="https://web.dev/scale-on-web">Scale on web case studies</a> page for more success
stories from India and Southeast Asia.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Überwachungskamera Livestream am Raspberry Pi einrichten (mit USB Webcam)]]></title>
<description><![CDATA[Überwachungskamera Livestream mit einem Raspberry Pi? Natürlich! Mit wenigen Hilfsmitteln ist das ganz einfach möglich und funktioniert super. Überwachungskameras sind häufig sehr teuer und manchmal […]
The post Überwachungskamera Livestream am Raspberry Pi einrichten (mit USB Webcam) appeared fi...]]></description>
<link>https://tsecurity.de/de/1709270/it+betriebssysteme/web+tipps/ueberwachungskamera+livestream+am+raspberry+pi+einrichten+mit+usb+webcam/</link>
<pubDate>Mon, 28 Nov 2022 11:30:07 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Überwachungskamera Livestream mit einem Raspberry Pi? Natürlich! Mit wenigen Hilfsmitteln ist das ganz einfach möglich und funktioniert super. Überwachungskameras sind häufig sehr teuer und manchmal […]</p>
<p>The post <a rel="nofollow" href="https://webdeasy.de/raspberry-pi-ueberwachungskamera-livestream/">Überwachungskamera Livestream am Raspberry Pi einrichten (mit USB Webcam)</a> appeared first at <a rel="nofollow" href="https://webdeasy.de/">webdeasy.de</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[XvideoStudio Video Editor Apk – Latest App￼￼￼]]></title>
<description><![CDATA[Xvideostudio.video Editor App io Download Apk is a video editing app that was released by Apple. Xvideostudio is the most recent version. In this article you will come to know…
The post XvideoStudio Video Editor Apk – Latest App￼￼￼ appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1700137/it+betriebssysteme/web+tipps/xvideostudio+video+editor+apk+-+latest+app/</link>
<pubDate>Fri, 18 Nov 2022 19:30:33 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Xvideostudio.video Editor App io Download Apk is a video editing app that was released by Apple. Xvideostudio is the most recent version. In this article you will come to know…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/xvideostudio-video-editor-apk-latest-app%EF%BF%BC%EF%BF%BC%EF%BF%BC/">XvideoStudio Video Editor Apk – Latest App￼￼￼</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[MANGAKAKALOT App Free Download – Latest Apk]]></title>
<description><![CDATA[To watch manga online, install “Mangakakalot Apk” for Android phones and tablets. Manga is a kind of Japanese graphic novel (fiction) that includes various topics and styles. All Free Manga…
The post MANGAKAKALOT App Free Download – Latest Apk appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1696986/it+betriebssysteme/web+tipps/mangakakalot+app+free+download+-+latest+apk/</link>
<pubDate>Wed, 16 Nov 2022 13:45:17 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>To watch manga online, install “Mangakakalot Apk” for Android phones and tablets. Manga is a kind of Japanese graphic novel (fiction) that includes various topics and styles. All Free Manga…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/mangakakalot-app-free-download-latest-apk/">MANGAKAKALOT App Free Download – Latest Apk</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Yowhatsapp App Download – Latest Whatsapp Application [2023]]]></title>
<description><![CDATA[YoWhatsApp Apk v9.30 For Android was created by Yousef. However, he stopped working on it after a while. Yousef gave Fouad Mokdad (creator of FMWhatsApp) permission to take over the…
The post Yowhatsapp App Download – Latest Whatsapp Application [2023] appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1694863/it+betriebssysteme/web+tipps/yowhatsapp+app+download+-+latest+whatsapp+application+2023/</link>
<pubDate>Mon, 14 Nov 2022 19:30:21 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>YoWhatsApp Apk v9.30 For Android was created by Yousef. However, he stopped working on it after a while. Yousef gave Fouad Mokdad (creator of FMWhatsApp) permission to take over the…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/yowhatsapp-app-download-latest-whatsapp-application-2023/">Yowhatsapp App Download – Latest Whatsapp Application [2023]</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Need of Security in Online Gaming [2023]]]></title>
<description><![CDATA[Online gaming has grown tremendously in the recent past. With this heightened interest has come greater security challenges for operators and gamers alike. A lot can go wrong, from a…
The post Need of Security in Online Gaming [2023] appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1679589/it+betriebssysteme/web+tipps/need+of+securityinonlinegaming+2023/</link>
<pubDate>Sun, 30 Oct 2022 12:00:14 +0100</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Online gaming has grown tremendously in the recent past. With this heightened interest has come greater security challenges for operators and gamers alike. A lot can go wrong, from a…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/need-of-security-in-online-gaming-2023/">Need of Security in Online Gaming [2023]</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[VPN mit DynDNS an der FRITZ!Box einrichten]]></title>
<description><![CDATA[VPNs sind beliebter denn je. Aber wusstest du, dass du auch deine FRITZX!Box als VPN-Server verwenden kannst? Im Zusammenspiel mit DynDNS eine unschlagbare Kombination. In […]
The post VPN mit DynDNS an der FRITZ!Box einrichten appeared first at webdeasy.de.]]></description>
<link>https://tsecurity.de/de/1644928/it+betriebssysteme/web+tipps/vpn+mit+dyndns+an+der+fritzbox+einrichten/</link>
<pubDate>Wed, 28 Sep 2022 11:30:16 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>VPNs sind beliebter denn je. Aber wusstest du, dass du auch deine FRITZX!Box als VPN-Server verwenden kannst? Im Zusammenspiel mit DynDNS eine unschlagbare Kombination. In […]</p>
<p>The post <a rel="nofollow" href="https://webdeasy.de/fritzbox-vpn-mit-dyndns/">VPN mit DynDNS an der FRITZ!Box einrichten</a> appeared first at <a rel="nofollow" href="https://webdeasy.de/">webdeasy.de</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Live Charts & Diagramme mit Google Chart API erstellen (HTML + JavaScript)]]></title>
<description><![CDATA[Mit Live Charts und Diagrammen kannst du dein Dashboard oder Infoboard aufwerten und die neusten Daten in Echtzeit abrufen und darstellen. Eine nette Funktion, um […]
The post Live Charts & Diagramme mit Google Chart API erstellen (HTML + JavaScript) appeared first at webdeasy.de.]]></description>
<link>https://tsecurity.de/de/1639542/it+betriebssysteme/web+tipps/live+charts+diagramme+mit+google+chart+api+erstellen+html+javascript/</link>
<pubDate>Thu, 22 Sep 2022 18:00:11 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Mit Live Charts und Diagrammen kannst du dein Dashboard oder Infoboard aufwerten und die neusten Daten in Echtzeit abrufen und darstellen. Eine nette Funktion, um […]</p>
<p>The post <a rel="nofollow" href="https://webdeasy.de/javascript-live-charts/">Live Charts &amp; Diagramme mit Google Chart API erstellen (HTML + JavaScript)</a> appeared first at <a rel="nofollow" href="https://webdeasy.de/">webdeasy.de</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[FM Whatsapp Apk – Download Latest Chatting App]]></title>
<description><![CDATA[WhatsApp is among the most popular social networking tools of all ages, with lots of current users and those who downloads all over the earth. As a such scenario, it…
The post FM Whatsapp Apk – Download Latest Chatting App appeared first on CSHAWK.]]></description>
<link>https://tsecurity.de/de/1636963/it+betriebssysteme/web+tipps/fm+whatsapp+apk+-+download+latest+chatting+app/</link>
<pubDate>Tue, 20 Sep 2022 18:15:15 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>WhatsApp is among the most popular social networking tools of all ages, with lots of current users and those who downloads all over the earth. As a such scenario, it…</p>
<p>The post <a rel="nofollow" href="https://cyberspacehawk.com/fm-whatsapp-apk-download-latest-chatting-app/">FM Whatsapp Apk – Download Latest Chatting App</a> appeared first on <a rel="nofollow" href="https://cyberspacehawk.com/">CSHAWK</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[How to Star an Email to Mark Important Emails]]></title>
<description><![CDATA[How to star an email is a common query among email users. Though we receive numerous emails every day, not all of them are important. By starring emails, you can categorize the crucial ones separately and access them quickly. Read on to know how to star an email. In this blog, we’ll focus on top ...]]></description>
<link>https://tsecurity.de/de/1635130/it+betriebssysteme/web+tipps/how+to+star+an+email+to+mark+important+emails/</link>
<pubDate>Mon, 19 Sep 2022 09:30:12 +0200</pubDate>
<category>Web Tipps</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>How to star an email is a common query among email users. Though we receive numerous emails every day, not all of them are important. By starring emails, you can categorize the crucial ones separately and access them quickly. Read on to know how to star an email. In this blog, we’ll focus on top […]</p>
<p>The post <a rel="nofollow" href="https://www.addictivetips.com/web/how-to-star-an-email/">How to Star an Email to Mark Important Emails</a> appeared first on <a rel="nofollow" href="https://www.addictivetips.com/">AddictiveTips</a>.</p>]]></content:encoded>
</item>
</channel>
</rss>
<!-- Generated in 0,13ms -->