Skip to content

Commit

Permalink
Merge branch 'main' into anlexN
Browse files Browse the repository at this point in the history
  • Loading branch information
camillobruni committed Apr 4, 2024
2 parents 2ab6b9c + a832a13 commit b3b00c9
Show file tree
Hide file tree
Showing 237 changed files with 1,243 additions and 25 deletions.
1 change: 1 addition & 0 deletions .eleventy.js
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,7 @@ module.exports = (eleventyConfig) => {

// Copy assets that don’t require a build step.
eleventyConfig.addPassthroughCopy('src/favicon.ico');
eleventyConfig.addPassthroughCopy('src/favicon.png');
eleventyConfig.addPassthroughCopy('src/robots.txt');
eleventyConfig.addPassthroughCopy('src/_img');
eleventyConfig.addPassthroughCopy('src/_css/img');
Expand Down
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,7 @@ dist/
firebase-debug.log
node_modules/
package-lock.json
.DS_Store
Desktop.ini
._*
Thumbs.db
12 changes: 4 additions & 8 deletions firebase.json
Original file line number Diff line number Diff line change
Expand Up @@ -78,17 +78,13 @@
{
"source": "/sw.js",
"headers": [
{
"key": "Cache-Control",
"value": "no-cache"
},
{
"key": "Content-Type",
"value": "text/javascript;charset=utf-8"
},
{
"key": "Cache-Control",
"value": "max-age=31557600"
"value": "public, max-age=600, stale-while-revalidate=3600"
}
]
},
Expand All @@ -101,7 +97,7 @@
},
{
"key": "Cache-Control",
"value": "max-age=31557600"
"value": "max-age=604800"
}
]
},
Expand All @@ -128,7 +124,7 @@
"headers": [
{
"key": "Cache-Control",
"value": "max-age=31557600"
"value": "max-age=604800"
}
]
},
Expand All @@ -137,7 +133,7 @@
"headers": [
{
"key": "Cache-Control",
"value": "max-age=31557600"
"value": "max-age=604800"
}
]
}
Expand Down
Binary file removed src/_css/img/safari.png
Binary file not shown.
8 changes: 7 additions & 1 deletion src/_css/main.css
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,13 @@ hr {
font-size: 0.8em;
}
.footnote-item:target {
background: var(--lightyellow);
background-color: var(--lightyellow);
--html-color: var(--black);
--main-background: var(--white);
--main-and-footer-link-color: var(--darkblue);
}
.footnote-item:target > * {
color: var(--html-color);
}
.retweet {
display: inline-block;
Expand Down
5 changes: 5 additions & 0 deletions src/_img/avatars/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Avatar Images

This folder contains 192x192px avif files.
You can generate them easily on <https://squoosh.app> using AVIF encoder with
a low quality settings of around 40.
Binary file modified src/_img/avatars/adam-klein.avif
Binary file not shown.
Binary file removed src/_img/avatars/adam-klein.jpg
Binary file not shown.
Binary file removed src/_img/avatars/adam-klein@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/adam-klein@2x.jpg
Binary file not shown.
Binary file modified src/_img/avatars/addy-osmani.avif
Binary file not shown.
Binary file removed src/_img/avatars/addy-osmani.jpg
Binary file not shown.
Binary file removed src/_img/avatars/addy-osmani@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/addy-osmani@2x.jpg
Binary file not shown.
Binary file modified src/_img/avatars/alon-zakai.avif
Binary file not shown.
Binary file removed src/_img/avatars/alon-zakai.jpg
Binary file not shown.
Binary file removed src/_img/avatars/alon-zakai@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/alon-zakai@2x.jpg
Binary file not shown.
Binary file modified src/_img/avatars/ana-pesko.avif
Binary file not shown.
Binary file removed src/_img/avatars/ana-pesko.jpg
Binary file not shown.
Binary file removed src/_img/avatars/ana-pesko@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/ana-pesko@2x.jpg
Binary file not shown.
Binary file modified src/_img/avatars/andreas-haas.avif
Binary file not shown.
Binary file removed src/_img/avatars/andreas-haas.jpg
Binary file not shown.
Binary file removed src/_img/avatars/andreas-haas@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/andreas-haas@2x.jpg
Binary file not shown.
Binary file modified src/_img/avatars/anton-bikineev.avif
Binary file not shown.
Binary file removed src/_img/avatars/anton-bikineev.jpg
Binary file not shown.
Binary file removed src/_img/avatars/anton-bikineev@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/anton-bikineev@2x.jpg
Binary file not shown.
Binary file modified src/_img/avatars/ben-titzer.avif
Binary file not shown.
Binary file removed src/_img/avatars/ben-titzer.jpg
Binary file not shown.
Binary file removed src/_img/avatars/ben-titzer@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/ben-titzer@2x.jpg
Binary file not shown.
Binary file modified src/_img/avatars/benedikt-meurer.avif
Binary file not shown.
Binary file removed src/_img/avatars/benedikt-meurer.jpg
Binary file not shown.
Binary file removed src/_img/avatars/benedikt-meurer@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/benedikt-meurer@2x.jpg
Binary file not shown.
Binary file modified src/_img/avatars/bill-budge.avif
Binary file not shown.
Binary file removed src/_img/avatars/bill-budge.jpg
Binary file not shown.
Binary file removed src/_img/avatars/bill-budge@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/bill-budge@2x.jpg
Binary file not shown.
Binary file modified src/_img/avatars/camillo-bruni.avif
Binary file not shown.
Binary file removed src/_img/avatars/camillo-bruni.jpg
Binary file not shown.
Binary file removed src/_img/avatars/camillo-bruni@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/camillo-bruni@2x.jpg
Binary file not shown.
Binary file modified src/_img/avatars/clemens-backes.avif
Binary file not shown.
Binary file removed src/_img/avatars/clemens-backes.jpg
Binary file not shown.
Binary file removed src/_img/avatars/clemens-backes@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/clemens-backes@2x.jpg
Binary file not shown.
Binary file modified src/_img/avatars/dan-clark.avif
Binary file not shown.
Binary file removed src/_img/avatars/dan-clark.jpg
Binary file not shown.
Binary file removed src/_img/avatars/dan-clark@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/dan-clark@2x.jpg
Binary file not shown.
Binary file modified src/_img/avatars/dan-elphick.avif
Binary file not shown.
Binary file removed src/_img/avatars/dan-elphick.jpg
Diff not rendered.
Binary file removed src/_img/avatars/dan-elphick@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/dan-elphick@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/darius-mercadier.avif
Binary file not shown.
Binary file removed src/_img/avatars/darius-mercadier.jpg
Diff not rendered.
Binary file removed src/_img/avatars/darius-mercadier@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/darius-mercadier@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/domenic-denicola.avif
Binary file not shown.
Binary file removed src/_img/avatars/domenic-denicola.jpg
Diff not rendered.
Binary file removed src/_img/avatars/domenic-denicola@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/domenic-denicola@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/dominik-infuehr.avif
Binary file not shown.
Binary file removed src/_img/avatars/dominik-infuehr.jpg
Diff not rendered.
Binary file removed src/_img/avatars/dominik-infuehr@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/dominik-infuehr@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/frank-tang.avif
Binary file not shown.
Binary file removed src/_img/avatars/frank-tang.jpg
Diff not rendered.
Binary file removed src/_img/avatars/frank-tang@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/frank-tang@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/hannes-payer.avif
Binary file not shown.
Binary file removed src/_img/avatars/hannes-payer.jpg
Diff not rendered.
Binary file removed src/_img/avatars/hannes-payer@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/hannes-payer@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/igor-sheludko.avif
Binary file not shown.
Binary file removed src/_img/avatars/igor-sheludko.jpg
Diff not rendered.
Binary file removed src/_img/avatars/igor-sheludko@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/igor-sheludko@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/ingvar-stepanyan.avif
Binary file not shown.
Binary file removed src/_img/avatars/ingvar-stepanyan.jpg
Diff not rendered.
Binary file removed src/_img/avatars/ingvar-stepanyan@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/ingvar-stepanyan@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/jakob-gruber.avif
Binary file not shown.
Binary file removed src/_img/avatars/jakob-gruber.jpg
Diff not rendered.
Binary file removed src/_img/avatars/jakob-gruber@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/jakob-gruber@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/jakob-kummerow.avif
Binary file not shown.
Binary file removed src/_img/avatars/jakob-kummerow.jpg
Diff not rendered.
Binary file removed src/_img/avatars/jakob-kummerow@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/jakob-kummerow@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/jaroslav-sevcik.avif
Binary file not shown.
Binary file removed src/_img/avatars/jaroslav-sevcik.jpg
Diff not rendered.
Binary file removed src/_img/avatars/jaroslav-sevcik@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/jaroslav-sevcik@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/joyee-cheung.avif
Binary file not shown.
Binary file removed src/_img/avatars/joyee-cheung.jpg
Diff not rendered.
Binary file removed src/_img/avatars/joyee-cheung@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/joyee-cheung@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/justin-ridgewell.avif
Binary file not shown.
Binary file removed src/_img/avatars/justin-ridgewell.jpg
Diff not rendered.
Binary file removed src/_img/avatars/justin-ridgewell@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/justin-ridgewell@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/leszek-swirski.avif
Binary file not shown.
Binary file removed src/_img/avatars/leszek-swirski.jpg
Diff not rendered.
Binary file removed src/_img/avatars/leszek-swirski@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/leszek-swirski@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/marja-holtta.avif
Binary file not shown.
Binary file removed src/_img/avatars/marja-holtta.jpg
Diff not rendered.
Binary file removed src/_img/avatars/marja-holtta@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/marja-holtta@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/mark-davis.avif
Binary file not shown.
Binary file removed src/_img/avatars/mark-davis.jpg
Diff not rendered.
Binary file removed src/_img/avatars/mark-davis@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/mark-davis@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/markus-scherer.avif
Binary file not shown.
Binary file removed src/_img/avatars/markus-scherer.jpg
Diff not rendered.
Binary file removed src/_img/avatars/markus-scherer@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/markus-scherer@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/mathias-bynens.avif
Binary file not shown.
Binary file removed src/_img/avatars/mathias-bynens.jpg
Diff not rendered.
Binary file removed src/_img/avatars/mathias-bynens@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/mathias-bynens@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/maya-armyanova.avif
Binary file not shown.
Binary file removed src/_img/avatars/maya-armyanova.jpg
Diff not rendered.
Binary file removed src/_img/avatars/maya-armyanova@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/maya-armyanova@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/michael-hablich.avif
Binary file not shown.
Binary file removed src/_img/avatars/michael-hablich.jpg
Diff not rendered.
Binary file removed src/_img/avatars/michael-hablich@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/michael-hablich@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/michael-lippautz.avif
Binary file not shown.
Binary file removed src/_img/avatars/michael-lippautz.jpg
Diff not rendered.
Binary file removed src/_img/avatars/michael-lippautz@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/michael-lippautz@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/michael-stanton.avif
Binary file not shown.
Binary file removed src/_img/avatars/michael-stanton.jpg
Diff not rendered.
Binary file removed src/_img/avatars/michael-stanton@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/michael-stanton@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/myles-borins.avif
Binary file not shown.
Binary file removed src/_img/avatars/myles-borins.jpg
Diff not rendered.
Binary file removed src/_img/avatars/myles-borins@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/myles-borins@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/mythri-alle.avif
Binary file not shown.
Binary file removed src/_img/avatars/mythri-alle.jpg
Diff not rendered.
Binary file removed src/_img/avatars/mythri-alle@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/mythri-alle@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/olivier-flueckiger.avif
Binary file not shown.
Binary file removed src/_img/avatars/olivier-flueckiger.jpg
Diff not rendered.
Binary file removed src/_img/avatars/olivier-flueckiger@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/olivier-flueckiger@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/omer-katz.avif
Binary file not shown.
Binary file removed src/_img/avatars/omer-katz.jpg
Diff not rendered.
Binary file removed src/_img/avatars/omer-katz@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/omer-katz@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/patrick-thier.avif
Binary file not shown.
Binary file removed src/_img/avatars/patrick-thier.jpg
Diff not rendered.
Binary file removed src/_img/avatars/patrick-thier@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/patrick-thier@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/peter-marshall.avif
Binary file not shown.
Binary file removed src/_img/avatars/peter-marshall.jpg
Diff not rendered.
Binary file removed src/_img/avatars/peter-marshall@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/peter-marshall@2x.jpg
Diff not rendered.
Binary file added src/_img/avatars/rezvan-mahdavi-hezaveh.avif
Binary file not shown.
Binary file modified src/_img/avatars/ross-mcilroy.avif
Binary file not shown.
Binary file removed src/_img/avatars/ross-mcilroy.jpg
Diff not rendered.
Binary file removed src/_img/avatars/ross-mcilroy@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/ross-mcilroy@2x.jpg
Diff not rendered.
Binary file added src/_img/avatars/samuel-gross.avif
Binary file not shown.
Binary file modified src/_img/avatars/santiago-aboy-solanes.avif
Binary file not shown.
Binary file removed src/_img/avatars/santiago-aboy-solanes.jpg
Diff not rendered.
Binary file removed src/_img/avatars/santiago-aboy-solanes@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/santiago-aboy-solanes@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/sathya-gunasekaran.avif
Binary file not shown.
Binary file removed src/_img/avatars/sathya-gunasekaran.jpg
Diff not rendered.
Binary file removed src/_img/avatars/sathya-gunasekaran@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/sathya-gunasekaran@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/shane-carr.avif
Binary file not shown.
Binary file removed src/_img/avatars/shane-carr.jpg
Diff not rendered.
Binary file removed src/_img/avatars/shane-carr@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/shane-carr@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/shu-yu-guo.avif
Binary file not shown.
Binary file removed src/_img/avatars/shu-yu-guo.jpg
Diff not rendered.
Binary file removed src/_img/avatars/shu-yu-guo@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/shu-yu-guo@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/simon-zuend.avif
Binary file not shown.
Binary file removed src/_img/avatars/simon-zuend.jpg
Diff not rendered.
Binary file removed src/_img/avatars/simon-zuend@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/simon-zuend@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/stephan-herhut.avif
Binary file not shown.
Binary file removed src/_img/avatars/stephan-herhut.jpg
Diff not rendered.
Binary file removed src/_img/avatars/stephan-herhut@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/stephan-herhut@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/toon-verwaest.avif
Binary file not shown.
Binary file removed src/_img/avatars/toon-verwaest.jpg
Diff not rendered.
Binary file removed src/_img/avatars/toon-verwaest@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/toon-verwaest@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/ulan-degenbaev.avif
Binary file not shown.
Binary file removed src/_img/avatars/ulan-degenbaev.jpg
Diff not rendered.
Binary file removed src/_img/avatars/ulan-degenbaev@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/ulan-degenbaev@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/victor-gomes.avif
Binary file not shown.
Binary file removed src/_img/avatars/victor-gomes.jpg
Diff not rendered.
Binary file removed src/_img/avatars/victor-gomes@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/victor-gomes@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/wouter-van-oortmerssen.avif
Binary file not shown.
Binary file removed src/_img/avatars/wouter-van-oortmerssen.jpg
Diff not rendered.
Binary file removed src/_img/avatars/wouter-van-oortmerssen@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/wouter-van-oortmerssen@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/yang-guo.avif
Binary file not shown.
Binary file removed src/_img/avatars/yang-guo.jpg
Diff not rendered.
Binary file removed src/_img/avatars/yang-guo@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/yang-guo@2x.jpg
Diff not rendered.
Binary file modified src/_img/avatars/zeynep-cankara.avif
Binary file not shown.
Binary file removed src/_img/avatars/zeynep-cankara.jpg
Diff not rendered.
Binary file removed src/_img/avatars/zeynep-cankara@2x.avif
Binary file not shown.
Binary file removed src/_img/avatars/zeynep-cankara@2x.jpg
Diff not rendered.
1 change: 1 addition & 0 deletions src/_img/sandbox/sandbox.svg

Large diffs are not rendered by default.

262 changes: 262 additions & 0 deletions src/_img/static-roots/static-roots1.svg

Large diffs are not rendered by default.

409 changes: 409 additions & 0 deletions src/_img/static-roots/static-roots2.svg

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions src/_includes/layouts/base.njk
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
{% if '/features' in page.url %}
<link rel="stylesheet" href="/_css/feature-support.css">
{% endif %}
<link rel="icon" href="/favicon.png" sizes="48x48">
<link rel="manifest" href="/.webmanifest">
<meta name="theme-color" content="#4285F4">
<link rel="alternate" href="{{ metadata.feed.path | url }}" type="application/atom+xml" title="V8 Atom feed">
Expand Down
5 changes: 1 addition & 4 deletions src/_includes/layouts/feature.njk
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,7 @@ layout: layouts/base.njk
<div>
{% if avatars %}
{% for avatar in avatars %}
<picture>
<source srcset="/_img/avatars/{{ avatar }}.avif, /_img/avatars/{{ avatar }}@2x.avif 2x" type="image/avif"></source>
<img src="/_img/avatars/{{ avatar }}.jpg" srcset="/_img/avatars/{{ avatar }}@2x.jpg 2x" alt="" width="96" height="96" loading="lazy">
</picture>
<img src="/_img/avatars/{{ avatar }}.avif" alt="" width="96" height="96" loading="lazy">
{% endfor %}
{% endif %}
<p>Posted by {{ author | markdown | safe }}.</p>
Expand Down
5 changes: 1 addition & 4 deletions src/_includes/layouts/post.njk
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,7 @@ layout: layouts/base.njk
<div>
{% if avatars %}
{% for avatar in avatars %}
<picture>
<source srcset="/_img/avatars/{{ avatar }}.avif, /_img/avatars/{{ avatar }}@2x.avif 2x" type="image/avif"></source>
<img src="/_img/avatars/{{ avatar }}.jpg" srcset="/_img/avatars/{{ avatar }}@2x.jpg 2x" alt="" width="96" height="96" loading="lazy">
</picture>
<img src="/_img/avatars/{{ avatar }}.avif" alt="" width="96" height="96" loading="lazy">
{% endfor %}
{% endif %}
<p
Expand Down
4 changes: 4 additions & 0 deletions src/blog/fast-async.md
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,10 @@ We’ve also been working on a new garbage collector, called Orinoco, which move

And last but not least, there was a handy bug in Node.js 8 that caused `await` to skip microticks in some cases, resulting in better performance. The bug started out as an unintended spec violation, but it later gave us the idea for an optimization. Let’s start by explaining the buggy behavior:

:::note
**Note:** The following behavior was correct according to the JavaScript spec at the time of writing. Since then, our spec proposal was accepted, and the following "buggy" behavior is now correct.
:::

```js
const p = Promise.resolve();

Expand Down
40 changes: 40 additions & 0 deletions src/blog/jspi-ot.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
---
title: 'WebAssembly JSPI is going to origin trial'
description: 'We explain the start of the origin trial for JSPI'
author: 'Francis McCabe, Thibaud Michaud, Ilya Rezvov, Brendan Dahl'
date: 2024-03-06
tags:
- WebAssembly
---
WebAssembly’s JavaScript Promise Integration (JSPI) API is entering an origin trial, with Chrome release M123. What that means is that you can test whether you and your users can benefit from this new API.

JSPI is an API that allows so-called sequential code – that has been compiled to WebAssembly – to access Web APIs that are _asynchronous_. Many Web APIs are crafted in terms of JavaScript `Promise`s: instead of immediately performing the requested operation they return a `Promise` to do so. When the action is finally performed, the browser’s task runner invokes any callbacks with the Promise. JSPI hooks into this architecture to allow a WebAssembly application to be suspended when the `Promise` is returned and resumed when the `Promise` is resolved.

You can find out more about JSPI and how to use it [here](https://v8.dev/blog/jspi) and the specification itself is [here](https://github.com/WebAssembly/js-promise-integration).

## Requirements

Apart from registering for an origin trial, you will also need to generate the appropriate WebAssembly and JavaScript. If you are using Emscripten, then this is straightforward. You should ensure that you are using at least version 3.1.47.

## Registering for the origin trial

JSPI is still pre-release; it is going through a standardization process and will not be fully released until we get to phase 4 of that process. To use it today, you can set a flag in the Chrome browser; or, you can apply for an origin trial token that will allow your users to access it without having to set the flag themselves.

To register you can go [here](https://developer.chrome.com/origintrials/#/register_trial/1603844417297317889), make sure to follow the registration signup process. To find out more about origin trials in general, [this](https://developer.chrome.com/docs/web-platform/origin-trials) is a good starting place.

## Some potential caveats

There have been some [discussions](https://github.com/WebAssembly/js-promise-integration/issues) in the WebAssembly community about some aspects of the JSPI API. As a result, there are some changes indicated, which will take time to fully work their way through the system. We anticipate that these changes will be *soft launched*: we will share the changes as they become available, however, the existing API will be maintained until at least the end of the origin trial.

In addition, there are some known issues that are unlikely to be fully addressed during the origin trial period:

For applications that intensively create spawned-off computations, the performance of a wrapped sequence (i.e., using JSPI to access an asynchronous API) may suffer. This is because the resources used when creating the wrapped call are not cached between calls; we rely on garbage collection to clear up the stacks that are created.
We currently allocate a fixed size stack for each wrapped call. This stack is necessarily large in order to accommodate complex applications. However, it also means that an application that has a large number of simple wrapped calls _in flight_ may experience memory pressure.

Neither of these issues are likely to impede experimentation with JSPI; we expect them to be addressed before JSPI is officially released.

## Feedback

Since JSPI is a standards-track effort, we prefer that any issues and feedback be shared [here](https://github.com/WebAssembly/js-promise-integration/issues). However, bug reports can be raised at the standard Chrome bug reporting [site](https://issues.chromium.org/new). If you suspect a problem with code generation, use [this](https://github.com/emscripten-core/emscripten/issues) to report an issue.

Finally, we would like to hear about any benefits that you uncovered. Use the [issue tracker](https://github.com/WebAssembly/js-promise-integration/issues) to share your experience.

0 comments on commit b3b00c9

Please sign in to comment.