import argparse import sys import time import types from django.conf import settings if not settings.configured: settings.configure(SECRET_KEY="aaa") from django.http import HttpResponseRedirect def build_url(n: int) -> str: host = "\uff21" * n host = "A" * n url = "https://" + host + "/" return url def measure_redirect(url: str, reps: int) -> float: start = time.perf_counter() for _ in range(reps): # Instantiates HttpResponseRedirect, which calls urlsplit() on url. HttpResponseRedirect(url) return (time.perf_counter() - start) / reps def main() -> None: reps = 5 sizes = [25_000, 250_000, 2_500_000, 25_000_000] print("combining_count\turl_length\tavg_seconds") measurements: list[tuple[int, int, float]] = [] for n in sizes: url = build_url(n) avg = measure_redirect(url, reps) measurements.append((n, len(url), avg)) print(f"{n:>14}\t{len(url):>10}\t{avg:.4f}") if len(measurements) >= 2: print("\nTime ratios (successive sizes):") for (n1, l1, t1), (n2, l2, t2) in zip(measurements, measurements[1:]): ratio = (t2 / t1) if t1 else float("inf") print(f"{n1:>14} -> {n2:>14} (len {l1} -> {l2}): {ratio:.2f}x") if __name__ == "__main__": main()