Skip to content

Commit 04ad772

Browse files
authored
Frontend - Webnode Caching mechanism (#889)
1 parent b2b291c commit 04ad772

File tree

3 files changed

+21
-8
lines changed

3 files changed

+21
-8
lines changed

frontend/docker/startup.sh

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,8 @@ download_wasm_files() {
105105

106106
# Inject caching logic into openmina_node_web.js
107107
OPENMINA_JS="$TARGET_DIR/openmina_node_web.js"
108-
inject_caching_logic "$OPENMINA_JS"
108+
INDEX_HTML="/usr/local/apache2/htdocs/index.html"
109+
inject_caching_logic "$OPENMINA_JS" "$INDEX_HTML"
109110
fi
110111
fi
111112

@@ -114,13 +115,28 @@ download_wasm_files() {
114115

115116
inject_caching_logic() {
116117
local js_file="$1"
118+
local index_html="$2"
117119
if [ -f "$js_file" ]; then
118120
echo "Injecting caching logic into $js_file"
119121

120122
# Generate a unique hash
121123
local hash=$(openssl rand -hex 8)
122124

125+
# replace openmina_node_web_bg.wasm with openmina_node_web_bg.$hash.wasm
126+
sed -i "s/openmina_node_web_bg.wasm/openmina_node_web_bg.$hash.wasm/g" "$js_file"
127+
128+
# add cache headers to fetch calls
123129
sed -i 's/module_or_path = fetch(module_or_path);/module_or_path = fetch(module_or_path, { cache: "force-cache", headers: { "Cache-Control": "max-age=31536000, immutable" } });/' "$js_file"
130+
131+
# rename openmina_node_web_bg.wasm to openmina_node_web_bg.$hash.wasm
132+
mv "$TARGET_DIR/openmina_node_web_bg.wasm" "$TARGET_DIR/openmina_node_web_bg.$hash.wasm"
133+
134+
# rename openmina_node_web.js to openmina_node_web.$hash.js
135+
mv "$TARGET_DIR/openmina_node_web.js" "$TARGET_DIR/openmina_node_web.$hash.js"
136+
137+
# replace openmina_node_web.js with openmina_node_web.$hash.js in index.html
138+
sed -i "s/openmina_node_web.js/openmina_node_web.$hash.js/g" "$index_html"
139+
124140
if [[ $? -ne 0 ]]; then
125141
echo "Failed to inject caching logic into $js_file"
126142
else

frontend/httpd.conf

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -229,13 +229,10 @@ SSLProxyEngine On
229229

230230
<IfModule unixd_module>
231231

232-
# Cache rules for WebNode assets
233-
<LocationMatch "/assets/webnode/pkg/openmina_node_web\.js">
232+
# Cache rules
233+
<FilesMatch "\.(js|wasm)$">
234234
Header set Cache-Control "public, max-age=31536000, immutable"
235-
</LocationMatch>
236-
<LocationMatch "/assets/webnode/pkg/openmina_node_web_bg\.wasm">
237-
Header set Cache-Control "public, max-age=31536000, immutable"
238-
</LocationMatch>
235+
</FilesMatch>
239236

240237
# Make sure mod_headers is enabled
241238
<IfModule !mod_headers.c>

frontend/src/app/core/services/web-node.service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ export class WebNodeService {
5454
startWasm$(): Observable<any> {
5555
return of(any(window).webnode)
5656
.pipe(
57-
switchMap((wasm: any) => from(wasm.default('assets/webnode/pkg/openmina_node_web_bg.wasm')).pipe(map(() => wasm))),
57+
switchMap((wasm: any) => from(wasm.default()).pipe(map(() => wasm))),
5858
switchMap((wasm) => {
5959
this.webnodeProgress$.next('Loaded');
6060
return from(wasm.run(this.webNodeKeyPair.privateKey));

0 commit comments

Comments
 (0)