From a8c602eb6f8a87148177dd7afbf02a22078668a0 Mon Sep 17 00:00:00 2001 From: mariospr Date: Wed, 31 Jan 2024 12:56:13 +0000 Subject: [PATCH] deploy: 7abbbfd62bab86614da22402a62544162394a71e --- use-case-ssrendering/.stamp | 2 +- use-case-ssrendering/about/a-good-choice.html | 2 +- use-case-ssrendering/about/architecture.html | 2 +- use-case-ssrendering/about/builds.html | 2 +- use-case-ssrendering/about/faq.html | 2 +- use-case-ssrendering/about/get-wpe.html | 2 +- use-case-ssrendering/about/index.html | 2 +- .../about/supported-hardware.html | 2 +- .../about/what-is-embedded.html | 2 +- .../assets/img/logo-server-side-rendering.png | Bin 0 -> 2844 bytes .../img/logo-server-side-rendering@2x.png | Bin 0 -> 6227 bytes use-case-ssrendering/blog.xml | 74 +-- use-case-ssrendering/blog/1/index.html | 7 +- .../2024-use-case-server-side-rendering.html | 298 ++++++++++++ use-case-ssrendering/blog/index.html | 12 +- use-case-ssrendering/developers/index.html | 2 +- use-case-ssrendering/feed.xml | 48 +- use-case-ssrendering/release/index.html | 2 +- .../release/schedule/index.html | 2 +- .../release/verify/index.html | 2 +- use-case-ssrendering/security/index.html | 2 +- use-case-ssrendering/sitemap.xml | 433 +++++++++--------- 22 files changed, 588 insertions(+), 312 deletions(-) create mode 100644 use-case-ssrendering/assets/img/logo-server-side-rendering.png create mode 100644 use-case-ssrendering/assets/img/logo-server-side-rendering@2x.png create mode 100644 use-case-ssrendering/blog/2024-use-case-server-side-rendering.html diff --git a/use-case-ssrendering/.stamp b/use-case-ssrendering/.stamp index 5a806edd3..d6369aaf2 100644 --- a/use-case-ssrendering/.stamp +++ b/use-case-ssrendering/.stamp @@ -1 +1 @@ -Wed Jan 31 11:47:07 UTC 2024 +Wed Jan 31 12:56:11 UTC 2024 diff --git a/use-case-ssrendering/about/a-good-choice.html b/use-case-ssrendering/about/a-good-choice.html index a87d0267d..66b9b0809 100644 --- a/use-case-ssrendering/about/a-good-choice.html +++ b/use-case-ssrendering/about/a-good-choice.html @@ -22,7 +22,7 @@ - + diff --git a/use-case-ssrendering/about/architecture.html b/use-case-ssrendering/about/architecture.html index ba7c2aa01..464703a71 100644 --- a/use-case-ssrendering/about/architecture.html +++ b/use-case-ssrendering/about/architecture.html @@ -22,7 +22,7 @@ - + diff --git a/use-case-ssrendering/about/builds.html b/use-case-ssrendering/about/builds.html index dd9e54109..b31ca0d60 100644 --- a/use-case-ssrendering/about/builds.html +++ b/use-case-ssrendering/about/builds.html @@ -22,7 +22,7 @@ - + diff --git a/use-case-ssrendering/about/faq.html b/use-case-ssrendering/about/faq.html index a9c7fc12a..80d91c1eb 100644 --- a/use-case-ssrendering/about/faq.html +++ b/use-case-ssrendering/about/faq.html @@ -22,7 +22,7 @@ - + diff --git a/use-case-ssrendering/about/get-wpe.html b/use-case-ssrendering/about/get-wpe.html index d7f66ec0e..459e7814e 100644 --- a/use-case-ssrendering/about/get-wpe.html +++ b/use-case-ssrendering/about/get-wpe.html @@ -22,7 +22,7 @@ - + diff --git a/use-case-ssrendering/about/index.html b/use-case-ssrendering/about/index.html index 07ed831e4..75d205823 100644 --- a/use-case-ssrendering/about/index.html +++ b/use-case-ssrendering/about/index.html @@ -22,7 +22,7 @@ - + diff --git a/use-case-ssrendering/about/supported-hardware.html b/use-case-ssrendering/about/supported-hardware.html index e3c272410..161b1cee0 100644 --- a/use-case-ssrendering/about/supported-hardware.html +++ b/use-case-ssrendering/about/supported-hardware.html @@ -22,7 +22,7 @@ - + diff --git a/use-case-ssrendering/about/what-is-embedded.html b/use-case-ssrendering/about/what-is-embedded.html index f2d22c43f..f224f2201 100644 --- a/use-case-ssrendering/about/what-is-embedded.html +++ b/use-case-ssrendering/about/what-is-embedded.html @@ -22,7 +22,7 @@ - + diff --git a/use-case-ssrendering/assets/img/logo-server-side-rendering.png b/use-case-ssrendering/assets/img/logo-server-side-rendering.png new file mode 100644 index 0000000000000000000000000000000000000000..ed3dbfa96967c9d5dd8f0af0dcf7015a98adfbc4 GIT binary patch literal 2844 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 Qe+Ym8Q(O4kt6q=)58>z3vj6}9 literal 0 HcmV?d00001 diff --git a/use-case-ssrendering/blog.xml b/use-case-ssrendering/blog.xml index 5f5330304..79fb96f22 100644 --- a/use-case-ssrendering/blog.xml +++ b/use-case-ssrendering/blog.xml @@ -4,9 +4,30 @@ News related to WPE WebKit. - 2024-01-29T06:00:00Z + 2024-02-01T00:00:00Z https://wpewebkit.org/blog/ + + Use Case: Server-side headless rendering + + 2024-02-01T00:00:00Z + https://wpewebkit.org/wpewebkit.org/use-case-ssrendering/blog/2024-use-case-server-side-rendering.html + <div class="success-top"> +<img alt="WPE and server-side headless rendering" align="center" src="https://wpewebkit.org/assets/img/logo-server-side-rendering.png" srcset="https://wpewebkit.org/assets/img/logo-server-side-rendering@2x.png 2x" /> +<img alt="WPE" align="center" src="https://wpewebkit.org/assets/img/logo-blue.svg" /> +</div> +<p>In many distributed applications, it can be useful to run a light web browser on the server side to render some HTML content or process images, video and/or audio using javascript.</p> +<p>Some concrete use-cases can be:</p> +<ul> +<li>Video post-production using HTML overlays.</li> +<li>Easy 3D rendering with WebGL that can be broadcasted as a video stream.</li> +<li>Reusing the same javascript code between a frontend web application and the backend processing.</li> +</ul> +<p>WPE WebKit is the perfect solution for all those use cases as it offers a lightweight solution which can run on low-end hardware or even within a container. It provides a lot of flexibility at the moment of choosing the backend infrastructure as WPE WebKit can, for instance, run from within a container with a very minimal Linux configuration (no need for any windowing system) and with full hardware acceleration and zero-copy of the video buffers between the GPU and the CPU.</p> +<p>Additionally, the fact that WPE WebKit is optimized for lower-powered devices, makes it also the perfect option for server-side rendering when scaling commercial deployments while keeping cost under control, which is yet another important factor to take into account when considering cloud rendering.</p> + + + A New WPE Backend Using EGLStream @@ -849,57 +870,6 @@ Note that these implementations are already complete in LBSE downstream and do n <p>WPE WebKit brought <strong>RDK (Reference Design Kit)</strong>, a modern, performant web browser, to millions of screens. It enables operators to manage devices and easily customize their UIs and apps and provides analytics to improve the customer experience and drive business results.</p> <p>Delivering a fast and memory-efficient browser for embedded systems is a challenging task, so Igalia helped Metrological build a new full-screen browser engine which stripped away all unnecessary toolkit elements.</p> <p>With years of experience around WebKit platform integration, Igalia worked to produce a new WebKit port, WPE, which interfaced directly with Wayland and the graphics driver. Additionally, Igalia pushed forward the implementation of a multi-platform multi-threaded compositor, enabling better performance on low-end multicore processors. WPE is an official port of WebKit.</p> - - - - - WPE Networking Overview - - 2022-09-29T00:00:00Z - https://wpewebkit.org/wpewebkit.org/use-case-ssrendering/blog/04-wpe-networking-overview.html - <p>At the heart of any browser engine is networking: Connecting with services and other users. Unlike other engines, WebKit approaches this more abstractly by leaving a large portion of the networking up to individual ports. This includes network protocols such as HTTP, WebSockets, and WebRTC. The upside to this approach is a higher level of integration with the system-provided libraries and features so WebKit will behave similarly to other software on the platform often with more centralized configuration.</p> -<p>Due to this abstraction there are a few independent layers that make up the networking stack of WPE. In this post, I’ll break down what each layer accomplishes as well as give some insight into the codebase’s structure.</p> -<h2 id="networking-layers" tabindex="-1">Networking Layers</h2> -<div align="center"> - <img alt="WebKit Network Layers" src="https://wpewebkit.org/assets/networking-layers.svg" /> -</div> -<h3 id="webkit" tabindex="-1">WebKit</h3> -<p>Before we get into the libraries used for WPE, let’s discuss WebKit itself. Despite abstracting out a lot of the protocol handling, WebKit itself still needs to understand a lot of fundamentals of HTTP.</p> -<p>WebCore (discussed in <a href="https://wpewebkit.org/blog/02-overview-of-wpe.html">WPE Overview</a>) understands HTTP requests, headers, and cookies, as they are required to implement many higher-level features. What it does not do is the network operations, most parsing, or on-disk storage. In the codebase, these are represented by <code>ResourceRequest</code> and <code>ResourceResponse</code> objects, which map to general HTTP functionality.</p> -<h4 id="networkprocess" tabindex="-1">NetworkProcess</h4> -<p>A core part of modern web engine security is the multi-process model. In order to defend against exploits, each website runs in its own isolated process that does not have network access. In order to allow for network access, they must talk over IPC to a dedicated NetworkProcess, typically one per browser instance. The NetworkProcess receives a <code>ResourceRequest</code>, creates a <code>NetworkDataTask</code> with it to download the data, and responds with a <code>ResourceResponse</code> to the WebProcess which looks like this:</p> -<div align="center"> - <img alt="WebKit Network Flowchart" src="https://wpewebkit.org/assets/networking-flow.svg" /> -</div> -<h3 id="wpe" tabindex="-1">WPE</h3> -<p>WPE implements the platform-specific versions of the classes above as <code>ResourceRequestSoup</code> and <code>NetworkDataTaskSoup</code>, primarily using a library called libsoup.</p> -<p>The <a href="https://libsoup.org/">libsoup</a> library was originally created for the GNOME project’s email client and has since grown to be a very featureful HTTP implementation, now maintained by Igalia.</p> -<p>At a high level, the main task that libsoup does is manage connections and queued requests to websites and then efficiently streams the responses back to WPE. Properly implementing HTTP is a fairly large task, and this is a non-exhaustive list of features it implements: HTTP/1.1, HTTP/2, WebSockets, cookies, decompression, multiple authentication standards, HSTS, and HTTP proxies.</p> -<p>On its own, libsoup is really focused on the HTTP layer and uses the <a href="https://gitlab.gnome.org/GNOME/glib">GLib</a> library to implement many of its networking features in a portable way. This is where TCP, DNS, and TLS are handled. It is also directly used by WebKit for URI parsing and DNS pre-caching.</p> -<p>Using GLib also helps standardize behavior across modern Linux systems. It allows configuration of a global proxy resolver that WebKit, along with other applications, can use.</p> -<h4 id="tls" tabindex="-1">TLS</h4> -<p>Another unique detail of our stack is that TLS is fully abstracted inside of GLib by a project called <a href="https://gitlab.gnome.org/GNOME/glib-networking">GLib-Networking</a>. This project provides multiple implementations of TLS that can be chosen at runtime, including OpenSSL and gnutls on Linux. The benefit here is that clients can choose the implementation they prefer—whether for licensing, certification, or technical reasons.</p> -<h3 id="usage" tabindex="-1">Usage</h3> -<p>Let’s go step by step to see some real world usage. If we call <code>webkit_web_view_load_uri()</code> for a new domain it will:</p> -<ol> -<li>Create a <code>ResourceRequest</code> in WebCore that represents an HTTP request with a few basic headers set. -<ul> -<li><code>ResourceRequestSoup</code> will create its own internal representation for the request using <code>soup_message_new_for_uri()</code>.</li> -</ul> -</li> -<li>This is passed to the <code>NetworkProcess</code> to load this request as a <code>NetworkDataTask</code>.</li> -<li><code>NetworkDataTaskSoup</code> will send/receive the request/response with <code>soup_session_send()</code> which queues the message to be sent.</li> -<li>libsoup will connect to the host using <code>GSocketClient</code> which does a DNS lookup and TCP connection. -<ul> -<li>If this is a TLS connection <code>GTlsClientConnection</code> will use a library such as gnutls to do a TLS handshake.</li> -</ul> -</li> -<li>libsoup will write the HTTP request and read from the socket parsing the HTTP responses eventually returning the data to WebKit.</li> -<li>WebKit receives this data, along with periodic updates about the state of the request, and sends it out of the <code>NetworkProcess</code> back to the main process as a <code>ResourceResponse</code> eventually loading the data in the <code>WebProcess</code>.</li> -</ol> -<h2 id="summary" tabindex="-1">Summary</h2> -<p>In conclusion, WebKit provides a very flexible abstraction for platforms, and WPE leverages mature system libraries to provide a portable implementation. It has many layers, but they are all well organized and suited to their tasks.</p> -<p>If you are working with WPE and are interested in collaborating, feel free to <a href="https://www.igalia.com/contact/">contact us</a>. If you are interested in working with Igalia, you can <a href="https://www.igalia.com/jobs/browsers_webkit_position">apply here</a>.</p> diff --git a/use-case-ssrendering/blog/1/index.html b/use-case-ssrendering/blog/1/index.html index 2b4254dcb..1fbad580f 100644 --- a/use-case-ssrendering/blog/1/index.html +++ b/use-case-ssrendering/blog/1/index.html @@ -22,7 +22,7 @@ - + @@ -116,6 +116,11 @@

Blog

  1. + + +

    WPE Networking Overview

    +

    In this post we'll cover the many layers of the networking stack that WPE uses including libsoup and glib.

    +
  2. WPE QA and tooling

    diff --git a/use-case-ssrendering/blog/2024-use-case-server-side-rendering.html b/use-case-ssrendering/blog/2024-use-case-server-side-rendering.html new file mode 100644 index 000000000..97f25dd49 --- /dev/null +++ b/use-case-ssrendering/blog/2024-use-case-server-side-rendering.html @@ -0,0 +1,298 @@ + + + + + + + + + + + + Use Case: Server-side headless rendering + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + +
    +

    Use Case: Server-side headless rendering

    + + + + + +
    + +
    + +
    +WPE and server-side headless rendering +WPE +
    +

    In many distributed applications, it can be useful to run a light web browser on the server side to render some HTML content or process images, video and/or audio using javascript.

    +

    Some concrete use-cases can be:

    +
      +
    • Video post-production using HTML overlays.
    • +
    • Easy 3D rendering with WebGL that can be broadcasted as a video stream.
    • +
    • Reusing the same javascript code between a frontend web application and the backend processing.
    • +
    +

    WPE WebKit is the perfect solution for all those use cases as it offers a lightweight solution which can run on low-end hardware or even within a container. It provides a lot of flexibility at the moment of choosing the backend infrastructure as WPE WebKit can, for instance, run from within a container with a very minimal Linux configuration (no need for any windowing system) and with full hardware acceleration and zero-copy of the video buffers between the GPU and the CPU.

    +

    Additionally, the fact that WPE WebKit is optimized for lower-powered devices, makes it also the perfect option for server-side rendering when scaling commercial deployments while keeping cost under control, which is yet another important factor to take into account when considering cloud rendering.

    + + + + +
    + +
    +

    + If you’re using WPE WebKit, or are considering doing so, please take our brief user survey. Your input will help us make WPE WebKit better for you! +

    +
    + + +
    + + +

    If you’re using WPE WebKit, or are considering doing so, please take our brief user survey! Your input will help us make WPE WebKit better for you.

    +
    + + + +
    +
    + + + + + + + diff --git a/use-case-ssrendering/blog/index.html b/use-case-ssrendering/blog/index.html index 0a306afb2..9b5f8c89a 100644 --- a/use-case-ssrendering/blog/index.html +++ b/use-case-ssrendering/blog/index.html @@ -22,7 +22,7 @@ - + @@ -116,6 +116,11 @@

    Blog

    1. + + +

      Use Case: Server-side headless rendering

      +

      Server-side rendering is another interesting use case for WPE that can unleash the potential of the Web platform for different use cases.

      +
    2. A New WPE Backend Using EGLStream

      @@ -144,11 +149,6 @@

      Success Story: Metrological

      WPE WebKit brought RDK (Reference Design Kit), a modern, performant web browser, to millions of screens.

      -
    3. - - -

      WPE Networking Overview

      -

      In this post we'll cover the many layers of the networking stack that WPE uses including libsoup and glib.