You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.0 KiB
72 lines
2.0 KiB
# quick format unescaped |
|
|
|
Solves a problem with util.format |
|
|
|
## unescaped ? |
|
|
|
Sometimes you want to embed the results of quick-format into another string, |
|
and then escape the whole string. |
|
|
|
## usage |
|
|
|
```js |
|
var format = require('quick-format') |
|
var options = {lowres: false} // <--default |
|
format(['hello %s %j %d', 'world', {obj: true}, 4, {another: 'obj'}], options) |
|
``` |
|
|
|
## options |
|
|
|
### lowres |
|
|
|
Passing an options object with `lowres: true` will cause quick-format any object with a circular as a string with the value '"[Circular]"'. The default behaviour is to label |
|
circular references in an object, instead of abandoning the entire object. Naturally, |
|
`lowres` is a faster mode, and assumes you have made the decision to ensure the objects |
|
you're passing have no circular references. |
|
|
|
## caveats |
|
|
|
We use `JSON.stringify` instead of `util.inspect`, this means object |
|
methods (functions) *will not be serialized*. |
|
|
|
## util.format |
|
|
|
In `util.format` for Node 5.9, performance is significantly affected |
|
when we pass in more arguments than interpolation characters, e.g |
|
|
|
```js |
|
util.format('hello %s %j %d', 'world', {obj: true}, 4, {another: 'obj'}) |
|
``` |
|
|
|
This is mostly due to the use of `util.inspect`. Use `JSON.stringify` |
|
(safely) instead which is significantly faster. |
|
|
|
It also takes an array instead of arguments, which helps us |
|
avoid the use of `apply` in some cases. |
|
|
|
Also - for speed purposes, we ignore symbol. |
|
|
|
## Benchmarks |
|
|
|
Whilst exact matching of objects to interpolation characters is slower, |
|
the case of additional objects is 3x faster. Further, using `lowres` mode |
|
brings us closer to `util.inspect` speeds. |
|
|
|
``` |
|
util*100000: 205.978ms |
|
quickLowres*100000: 236.337ms |
|
quick*100000: 292.018ms |
|
utilWithTailObj*100000: 1054.592ms |
|
quickWithTailObjLowres*100000: 267.992ms |
|
quickWithTailObj*100000: 343.048ms |
|
util*100000: 212.011ms |
|
quickLowres*100000: 226.441ms |
|
quick*100000: 296.600ms |
|
utilWithTailObj*100000: 1020.195ms |
|
quickWithTailObjLowres*100000: 267.331ms |
|
quickWithTailObj*100000: 343.867ms |
|
``` |
|
|
|
## Acknowledgements |
|
|
|
Sponsored by nearForm
|
|
|