#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.

Reply via email to