Redesign BP tracker with lightweight views and unobtrusive save confirmations
This commit is contained in:
@@ -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))
|
||||
Reference in New Issue
Block a user