Opened 5 years ago
Last modified 5 years ago
#30772 closed Cleanup/optimization
Template Cache "make_template_fragment_key" function speed up & switch to SHA256 — at Initial Version
Reported by: | Daniel | Owned by: | nobody |
---|---|---|---|
Component: | Core (Cache system) | Version: | dev |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Ready for checkin | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
The make_template_fragment_key
function in django.core.cache.utils
has the following (minor) issues:
- Using
urllib.quote
forvary_on
args, is not needed any more - it was originally added to make the unhashed strings safe to send to memcached and similar restricted systems. But since the value is hashed, this is now adding nothing. (See https://github.com/django/django/commit/ebc1325721e43808cef4334edaffc23a43f86614#diff-702b69be0100a594fd6fea1e4ab2feb1).
- Use of the MD5 hashing function is disallowed on certain (odd) systems, not being FIPS compliant. See (https://github.com/django/django/pull/10605).
- Creates a string of all joined
vary_on
args to send to the hashing function, rather than using the hashlib.update()
method.
Here is a version solving these, switching to SHA256, and speeding up the function quite a bit:
https://github.com/danthedeckie/django/tree/simplified_make_template_fragment_key
And here's the repo showing performance improvement:
https://github.com/danthedeckie/make_template_fragment_key_test
Which seems to be faster in every case.
The downside of this is that the cache key is now different from before. The tests have been updated to the new values.
Thoughts?