ul-fmf / urnik

Spletna storitev za prikaz in urejanje urnika
https://urnik.fmf.uni-lj.si/
MIT License
8 stars 10 forks source link

Bolj pametno iskanje trenutnega semestra #102

Closed jO-Osko closed 3 years ago

jO-Osko commented 3 years ago

Trenutno iskanje aktivnega semestra vzame najkasnejši aktivni semester. Če urnik vsebuje javno objavljen urnik za celotno leto, potem je tudi recimo oktobra avtomatično izbran poletni semester.

Po tem PR-ju se trenutni semester določi kot tisti, ki vsebuje današnji dan, ali pa najbližji objavljen semester (tisti ki se konča ali začne najbližje). Za vsak slučaj, če se semestri čudno prekrivajo, kot fallback vzame najkasnejši aktivni semester.

Za FMF to trenutno ni problematično, saj urniki niso objavljeni vnaprej, bi pa to lahko prišlo prav v prihodnosti.

Testi potrebujejo #101

matijapretnar commented 3 years ago

A imamo kakšne ocene, koliko je to kaj časovno potratno? Ker semester se poišče za vsako stran.

jO-Osko commented 3 years ago

Benchmarkov nimam V najslabšem primeru je 7x lookup po bazi glede na semester_od ali do, v običajnem primeru še to samo na objavljenih, ki jih je relativno malo (trenutno 7). Potem pa še nekaj računanja z datumi. Bom malo potestiral

jO-Osko commented 3 years ago

Tak hitri benchmark s silk in 1000 naključnimi semestri da okoli 0.01 s na klic v najslabšem primeru:

         52957 function calls (49959 primitive calls) in 0.050 seconds

   Ordered by: cumulative time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
     .....................................................................................................
        1    0.000    0.000    0.012    0.012 .../urnik/context_preprocessors.py:13(izbrani_semester)
        1    0.000    0.000    0.012    0.012 .../urnik/views.py:21(izbrani_semester)
        2    0.000    0.000    0.010    0.005 .../venv/lib/python3.7/site-packages/django/template/engine.py:121(find_template)
        4    0.000    0.000    0.010    0.003 .../venv/lib/python3.7/site-packages/django/template/loaders/base.py:9(get_template)
       26    0.000    0.000    0.010    0.000 .../venv/lib/python3.7/site-packages/django/db/models/sql/compiler.py:464(as_sql)
       13    0.000    0.000    0.010    0.001 /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/traceback.py:193(format_stack)
        1    0.000    0.000    0.010    0.010 .../urnik/models.py:248(najblizji_semester)
..............................................................................................................................

sqlite na disku, in python3.7 virtualenvironment v DEBUG mode.

Če se doda indekse zadeva ostane pod 0.015 tudi z 10000 semestri (worst case)