#32568: Prefer SafeString to mark_safe where possible
------------------------------------------------+--------------------------
Reporter: Tim McCurrach | Owner: nobody
Type: Cleanup/optimization | Status: assigned
Component: Uncategorized | Version: 3.1
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
------------------------------------------------+--------------------------
`mark_safe` takes roughly twice as long as simply creating a `SafeString`
- using pyperf:
{{{
mark_safe: Mean +- std dev: 296 ns +- 12 ns
SafeString: Mean +- std dev: 158 ns +- 7 ns
}}}
There are many places in the django codebase where we know the thing we
are marking as safe to be a normal string. In such cases it makes sense to
use `SafeString` instead of `mark_safe`.
To play devils advocate, you could definitely argue that this is an
unnecessary micro-optimisation. Following a brief search for `mark_safe`,
there are some situations where we have something like `mark_safe(X)` and
where evaluating `X` will take sufficiently long that any savings made
marking the string as safe would be rendered insignificant.
Having said that, there are other places where we end up calling
`mark_safe` a very large number of times. In such situations a small
saving in time will add up to a larger saving. There are also places where
we even have `mark_safe("some string literal")`.
Furthermore, since this change is literally just replacing one word with
an equally clear word, it would have no effect on complexity or
readability, and so for a slight performance boost, why not?
--
Ticket URL: <https://code.djangoproject.com/ticket/32568>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/056.2f63618dd393442204e835a523764994%40djangoproject.com.