Redesign BP tracker with lightweight views and unobtrusive save confirmations

This commit is contained in:
Peter Stockings
2026-09-08 15:07:57 +10:00
parent 25d1774e53
commit 87b60aac9b
40 changed files with 2693 additions and 2553 deletions
+48
View File
@@ -0,0 +1,48 @@
"""Measure compressed page bodies using only an isolated synthetic database."""
import gzip
import json
import os
import sys
from datetime import datetime, timedelta
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(ROOT))
os.environ['FLASK_CONFIG'] = 'TestingConfig'
from app.config import TestingConfig
TestingConfig.SQLALCHEMY_DATABASE_URI = 'sqlite:///:memory:'
from app import create_app, db
from app.models import User, Profile, Reading
app = create_app()
results = {}
with app.app_context():
db.create_all()
db.session.add(User(id=1, username='size-fixture', password_hash='unused', profile=Profile(timezone='Australia/Sydney')))
db.session.commit()
client = app.test_client()
with client.session_transaction() as session:
session['_user_id'] = '1'
session['_fresh'] = True
for filename in ('css/tailwind.css', 'js/diy-turbo.min.js', 'images/favicon.svg'):
payload = (ROOT / 'app/static' / filename).read_bytes()
results[filename] = {'raw_bytes': len(payload), 'gzip_bytes': len(gzip.compress(payload))}
for name, count in [('empty', 0), ('typical', 120), ('large', 10000)]:
db.session.query(Reading).filter_by(user_id=1).delete()
anchor = datetime(2026, 9, 8, 0, 0)
db.session.bulk_save_objects([Reading(user_id=1, timestamp=anchor - timedelta(hours=i * 5),
systolic=110 + i % 40, diastolic=65 + i % 25, heart_rate=60 + i % 30) for i in range(count)])
db.session.commit()
for view in ('overview', 'history', 'trends'):
dates = 'start_date=2020-01-01&end_date=2026-09-08' if name == 'large' and view == 'trends' else 'start_date=2026-09-02&end_date=2026-09-08'
payload = client.get(f'/dashboard?view={view}&{dates}')
assert payload.status_code == 200
size = len(gzip.compress(payload.data))
assert size <= 20000, (name, view, size)
results[f'{name}_{view}'] = {'raw_bytes': len(payload.data), 'gzip_bytes': size}
shared = sum(results[key]['gzip_bytes'] for key in ('css/tailwind.css', 'js/diy-turbo.min.js', 'images/favicon.svg'))
results['typical_cold_overview_bytes'] = shared + results['typical_overview']['gzip_bytes']
assert results['typical_cold_overview_bytes'] <= 40000
db.session.remove()
db.drop_all()
print(json.dumps(results, indent=2))