Fix smaller performance issues
This commit is contained in:
@@ -4,7 +4,7 @@ from pathlib import Path
|
|||||||
|
|
||||||
from fastapi import FastAPI
|
from fastapi import FastAPI
|
||||||
from fastapi.staticfiles import StaticFiles
|
from fastapi.staticfiles import StaticFiles
|
||||||
from fastapi.responses import RedirectResponse
|
from fastapi.responses import FileResponse, RedirectResponse
|
||||||
from starlette.middleware.base import BaseHTTPMiddleware
|
from starlette.middleware.base import BaseHTTPMiddleware
|
||||||
from starlette.middleware.gzip import GZipMiddleware
|
from starlette.middleware.gzip import GZipMiddleware
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
@@ -104,6 +104,15 @@ app.add_middleware(GZipMiddleware, minimum_size=500)
|
|||||||
# Static files
|
# Static files
|
||||||
app.mount("/static", StaticFiles(directory=Path(__file__).parent / "static"), name="static")
|
app.mount("/static", StaticFiles(directory=Path(__file__).parent / "static"), name="static")
|
||||||
|
|
||||||
|
|
||||||
|
@app.get("/sw.js", include_in_schema=False)
|
||||||
|
async def service_worker():
|
||||||
|
"""Serve Service Worker from root scope so it can intercept all page requests."""
|
||||||
|
response = FileResponse(Path(__file__).parent / "static/sw.js", media_type="application/javascript")
|
||||||
|
response.headers["Service-Worker-Allowed"] = "/"
|
||||||
|
response.headers["Cache-Control"] = "no-cache"
|
||||||
|
return response
|
||||||
|
|
||||||
# Include admin router (always available)
|
# Include admin router (always available)
|
||||||
app.include_router(admin_router)
|
app.include_router(admin_router)
|
||||||
|
|
||||||
|
|||||||
48
src/web/static/sw.js
Normal file
48
src/web/static/sw.js
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
const CACHE_NAME = 'linkedin-shell-v1';
|
||||||
|
const PRECACHE_URLS = [
|
||||||
|
'/static/tailwind.css',
|
||||||
|
'/static/tailwind-employee.css',
|
||||||
|
'/static/logo.png',
|
||||||
|
'/static/favicon.png',
|
||||||
|
];
|
||||||
|
|
||||||
|
self.addEventListener('install', function(event) {
|
||||||
|
event.waitUntil(
|
||||||
|
caches.open(CACHE_NAME).then(function(cache) {
|
||||||
|
return cache.addAll(PRECACHE_URLS);
|
||||||
|
}).then(function() {
|
||||||
|
return self.skipWaiting();
|
||||||
|
})
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
self.addEventListener('activate', function(event) {
|
||||||
|
event.waitUntil(
|
||||||
|
caches.keys().then(function(cacheNames) {
|
||||||
|
return Promise.all(
|
||||||
|
cacheNames
|
||||||
|
.filter(function(name) { return name !== CACHE_NAME; })
|
||||||
|
.map(function(name) { return caches.delete(name); })
|
||||||
|
);
|
||||||
|
}).then(function() {
|
||||||
|
return self.clients.claim();
|
||||||
|
})
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
self.addEventListener('fetch', function(event) {
|
||||||
|
if (!event.request.url.includes('/static/')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
event.respondWith(
|
||||||
|
caches.match(event.request).then(function(cached) {
|
||||||
|
return cached || fetch(event.request).then(function(response) {
|
||||||
|
var clone = response.clone();
|
||||||
|
caches.open(CACHE_NAME).then(function(cache) {
|
||||||
|
cache.put(event.request, clone);
|
||||||
|
});
|
||||||
|
return response;
|
||||||
|
});
|
||||||
|
})
|
||||||
|
);
|
||||||
|
});
|
||||||
@@ -5,6 +5,7 @@
|
|||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>{% block title %}LinkedIn Posts{% endblock %}</title>
|
<title>{% block title %}LinkedIn Posts{% endblock %}</title>
|
||||||
<link rel="icon" type="image/png" href="/static/favicon.png">
|
<link rel="icon" type="image/png" href="/static/favicon.png">
|
||||||
|
<link rel="preload" href="/static/tailwind.css" as="style">
|
||||||
<link rel="stylesheet" href="/static/tailwind.css">
|
<link rel="stylesheet" href="/static/tailwind.css">
|
||||||
<style>
|
<style>
|
||||||
body { background-color: #3d4848; }
|
body { background-color: #3d4848; }
|
||||||
@@ -362,5 +363,12 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
{% block scripts %}{% endblock %}
|
{% block scripts %}{% endblock %}
|
||||||
|
<script>
|
||||||
|
if ('serviceWorker' in navigator) {
|
||||||
|
window.addEventListener('load', function() {
|
||||||
|
navigator.serviceWorker.register('/sw.js').catch(function() {});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>{% block title %}{{ session.company_name or 'Unternehmen' }} - LinkedIn Posts{% endblock %}</title>
|
<title>{% block title %}{{ session.company_name or 'Unternehmen' }} - LinkedIn Posts{% endblock %}</title>
|
||||||
<link rel="icon" type="image/png" href="/static/favicon.png">
|
<link rel="icon" type="image/png" href="/static/favicon.png">
|
||||||
|
<link rel="preload" href="/static/tailwind.css" as="style">
|
||||||
<link rel="stylesheet" href="/static/tailwind.css">
|
<link rel="stylesheet" href="/static/tailwind.css">
|
||||||
<style>
|
<style>
|
||||||
body { background-color: #3d4848; }
|
body { background-color: #3d4848; }
|
||||||
@@ -206,5 +207,12 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
{% block scripts %}{% endblock %}
|
{% block scripts %}{% endblock %}
|
||||||
|
<script>
|
||||||
|
if ('serviceWorker' in navigator) {
|
||||||
|
window.addEventListener('load', function() {
|
||||||
|
navigator.serviceWorker.register('/sw.js').catch(function() {});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
Reference in New Issue
Block a user