Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use string concatenation to build the output string #470

Merged
merged 1 commit into from Nov 1, 2019

Conversation

nwoltman
Copy link
Contributor

@nwoltman nwoltman commented Oct 31, 2019

Switching from pushing to an array and using .join() to using simple string concatenation yields performance gains up to 260%.

Before (Node 12)

name:                          avg        med        med/avg    min        max                  loops
single tmpl compile:           0.671      0.66       0.663      0.651      0.728                20000
single tmpl compile (debug):   0.726      0.722      0.721      0.711      0.767                20000
large tmpl compile:            2.055      2.04       2.04       2.022      2.142                 1000
include-1 compile:             0.445      0.44       0.44       0.438      0.465                20000
-
single tmpl cached:            0.108      0.104      0.104      0.101      0.12                 50000
single tmpl cached (debug):    0.172      0.171      0.17       0.166      0.184                50000
large tmpl cached:             0.775      0.773      0.773      0.766      0.79                  4000
include-1 cached:              0.207      0.204      0.204      0.199      0.236                20000
include-2 cached:              0.235      0.231      0.232      0.227      0.265                20000
locals tmpl cached "with":     0.51       0.509      0.509      0.505      0.52                 30000
locals tmpl cached NO-"with":  0.097      0.097      0.096      0.095      0.102                30000
-
single tmpl NO-cache:          0.365      0.362      0.363      0.356      0.384                10000
single tmpl NO-cache (debug):  0.409      0.408      0.409      0.403      0.416                10000
large tmpl NO-cache:           2.243      2.236      2.238      2.226      2.271                 1000
include-1 NO-cache:            0.935      0.933      0.932      0.928      0.958                10000
include-2 NO-cache:            1.363      1.362      1.361      1.318      1.444                10000

After (Node 12)

name:                          avg        med        med/avg    min        max                  loops
single tmpl compile:           0.649      0.654      0.651      0.623      0.675                20000
single tmpl compile (debug):   0.721      0.715      0.717      0.709      0.75                 20000
large tmpl compile:            2.056      2.021      2.021      2.008      2.252                 1000
include-1 compile:             0.447      0.444      0.443      0.44       0.472                20000
-
single tmpl cached:            0.088      0.085      0.085      0.083      0.098                50000
single tmpl cached (debug):    0.13       0.127      0.128      0.125      0.142                50000
large tmpl cached:             0.635      0.631      0.631      0.627      0.654                 4000
include-1 cached:              0.186      0.181      0.181      0.178      0.215                20000
include-2 cached:              0.222      0.204      0.214      0.2        0.263                20000
locals tmpl cached "with":     0.461      0.451      0.451      0.445      0.502                30000
locals tmpl cached NO-"with":  0.027      0.026      0.026      0.024      0.039                30000
-
single tmpl NO-cache:          0.366      0.36       0.36       0.353      0.404                10000
single tmpl NO-cache (debug):  0.403      0.402      0.403      0.398      0.409                10000
large tmpl NO-cache:           2.291      2.28       2.28       2.265      2.344                 1000
include-1 NO-cache:            0.917      0.915      0.915      0.908      0.939                10000
include-2 NO-cache:            1.309      1.305      1.304      1.296      1.343                10000

Performance improvements are fairly small when using with, but without using with (i.e. strict mode), this change improves performance by ~260%.

Before:
locals tmpl cached NO-"with":  0.097      0.097      0.096      0.095      0.102                30000
After:
locals tmpl cached NO-"with":  0.027      0.026      0.026      0.024      0.039                30000

Other Node Versions

Node 10

Before

name:                          avg        med        med/avg    min        max                  loops
single tmpl cached:            0.087      0.084      0.084      0.083      0.103                50000
single tmpl cached (debug):    0.116      0.113      0.113      0.113      0.127                50000
large tmpl cached:             0.606      0.603      0.603      0.601      0.634                 4000
include-1 cached:              0.169      0.167      0.168      0.164      0.179                20000
include-2 cached:              0.191      0.19       0.19       0.186      0.207                20000
locals tmpl cached "with":     0.417      0.415      0.415      0.412      0.433                30000
locals tmpl cached NO-"with":  0.092      0.091      0.091      0.091      0.098                30000
-
single tmpl NO-cache:          0.324      0.318      0.318      0.316      0.342                10000
single tmpl NO-cache (debug):  0.371      0.368      0.368      0.366      0.384                10000
large tmpl NO-cache:           2.196      2.182      2.183      2.178      2.243                 1000
include-1 NO-cache:            0.868      0.855      0.863      0.852      0.893                10000
include-2 NO-cache:            1.188      1.178      1.184      1.168      1.217                10000

After

name:                          avg        med        med/avg    min        max                  loops
single tmpl cached:            0.073      0.071      0.071      0.068      0.087                50000
single tmpl cached (debug):    0.115      0.113      0.113      0.112      0.127                50000
large tmpl cached:             0.522      0.519      0.519      0.518      0.547                 4000
include-1 cached:              0.143      0.141      0.141      0.141      0.158                20000
include-2 cached:              0.159      0.157      0.157      0.156      0.174                20000
locals tmpl cached "with":     0.358      0.357      0.357      0.353      0.372                30000
locals tmpl cached NO-"with":  0.023      0.022      0.022      0.021      0.03                 30000
-
single tmpl NO-cache:          0.317      0.31       0.31       0.308      0.333                10000
single tmpl NO-cache (debug):  0.366      0.362      0.363      0.361      0.379                10000
large tmpl NO-cache:           2.2        2.191      2.189      2.181      2.256                 1000
include-1 NO-cache:            0.836      0.828      0.832      0.807      0.866                10000
include-2 NO-cache:            1.156      1.145      1.15       1.133      1.183                10000
Node 8

Before

name:                          avg        med        med/avg    min        max                  loops
single tmpl cached:            0.096      0.091      0.091      0.091      0.116                50000
single tmpl cached (debug):    0.125      0.123      0.123      0.122      0.141                50000
large tmpl cached:             0.633      0.631      0.631      0.628      0.653                 4000
include-1 cached:              0.19       0.188      0.188      0.187      0.202                20000
include-2 cached:              0.207      0.204      0.204      0.203      0.224                20000
locals tmpl cached "with":     0.439      0.437      0.437      0.434      0.459                30000
locals tmpl cached NO-"with":  0.114      0.113      0.113      0.113      0.124                30000
-
single tmpl NO-cache:          0.394      0.4        0.396      0.379      0.408                10000
single tmpl NO-cache (debug):  0.439      0.438      0.437      0.434      0.447                10000
large tmpl NO-cache:           2.741      2.733      2.732      2.726      2.802                 1000
include-1 NO-cache:            0.953      0.945      0.951      0.931      0.974                10000
include-2 NO-cache:            1.315      1.307      1.311      1.302      1.335                10000

After

name:                          avg        med        med/avg    min        max                  loops
single tmpl cached:            0.076      0.075      0.075      0.073      0.086                50000
single tmpl cached (debug):    0.115      0.113      0.113      0.112      0.125                50000
large tmpl cached:             0.529      0.526      0.526      0.525      0.553                 4000
include-1 cached:              0.166      0.165      0.165      0.163      0.179                20000
include-2 cached:              0.178      0.175      0.175      0.175      0.196                20000
locals tmpl cached "with":     0.373      0.366      0.371      0.364      0.387                30000
locals tmpl cached NO-"with":  0.025      0.023      0.023      0.022      0.039                30000
-
single tmpl NO-cache:          0.39       0.385      0.385      0.379      0.422                10000
single tmpl NO-cache (debug):  0.441      0.439      0.439      0.437      0.451                10000
large tmpl NO-cache:           2.785      2.77       2.77       2.764      2.887                 1000
include-1 NO-cache:            0.949      0.942      0.947      0.93       0.971                10000
include-2 NO-cache:            1.322      1.318      1.317      1.306      1.347                10000
Node 6

Before

name:                          avg        med        med/avg    min        max                  loops
single tmpl cached:            0.117      0.115      0.115      0.114      0.133                50000
single tmpl cached (debug):    0.153      0.153      0.153      0.151      0.158                50000
large tmpl cached:             0.667      0.655      0.659      0.652      0.715                 4000
include-1 cached:              0.239      0.238      0.238      0.236      0.247                20000
include-2 cached:              0.257      0.256      0.256      0.253      0.267                20000
locals tmpl cached "with":     0.469      0.467      0.467      0.465      0.479                30000
locals tmpl cached NO-"with":  0.131      0.13       0.13       0.129      0.142                30000
-
single tmpl NO-cache:          0.389      0.388      0.388      0.378      0.407                10000
single tmpl NO-cache (debug):  0.46       0.461      0.46       0.457      0.465                10000
large tmpl NO-cache:           2.301      2.29       2.29       2.285      2.361                 1000
include-1 NO-cache:            1.107      1.105      1.105      1.098      1.115                10000
include-2 NO-cache:            1.447      1.446      1.446      1.441      1.461                10000

After

name:                          avg        med        med/avg    min        max                  loops
single tmpl cached:            0.077      0.076      0.076      0.075      0.083                50000
single tmpl cached (debug):    0.122      0.121      0.121      0.12       0.127                50000
large tmpl cached:             0.533      0.522      0.524      0.517      0.614                 4000
include-1 cached:              0.148      0.148      0.148      0.145      0.16                 20000
include-2 cached:              0.171      0.171      0.171      0.168      0.181                20000
locals tmpl cached "with":     0.355      0.354      0.354      0.352      0.368                30000
locals tmpl cached NO-"with":  0.043      0.042      0.042      0.042      0.053                30000
-
single tmpl NO-cache:          0.37       0.372      0.37       0.362      0.38                 10000
single tmpl NO-cache (debug):  0.419      0.419      0.419      0.414      0.425                10000
large tmpl NO-cache:           2.273      2.265      2.266      2.252      2.343                 1000
include-1 NO-cache:            0.912      0.91       0.911      0.906      0.927                10000
include-2 NO-cache:            1.232      1.231      1.231      1.227      1.241                10000
Node 4

Before

name:                          avg        med        med/avg    min        max                  loops
single tmpl cached:            0.352      0.352      0.352      0.345      0.358                50000
single tmpl cached (debug):    0.384      0.384      0.384      0.373      0.391                50000
large tmpl cached:             1.556      1.549      1.55       1.544      1.61                  4000
include-1 cached:              0.549      0.547      0.548      0.544      0.561                20000
include-2 cached:              0.614      0.613      0.613      0.607      0.625                20000
locals tmpl cached "with":     1.189      1.187      1.187      1.183      1.201                30000
locals tmpl cached NO-"with":  0.81       0.809      0.809      0.804      0.827                30000
-
single tmpl NO-cache:          0.544      0.544      0.544      0.538      0.549                10000
single tmpl NO-cache (debug):  0.615      0.608      0.608      0.599      0.648                10000
large tmpl NO-cache:           2.461      2.459      2.46       2.453      2.472                 1000
include-1 NO-cache:            1.647      1.645      1.645      1.634      1.665                10000
include-2 NO-cache:            2.034      2.034      2.032      2.021      2.05                 10000

After

name:                          avg        med        med/avg    min        max                  loops
single tmpl cached:            0.111      0.111      0.111      0.11       0.112                50000
single tmpl cached (debug):    0.125      0.124      0.124      0.123      0.13                 50000
large tmpl cached:             0.593      0.587      0.587      0.582      0.646                 4000
include-1 cached:              0.233      0.233      0.233      0.232      0.235                20000
include-2 cached:              0.25       0.251      0.251      0.247      0.252                20000
locals tmpl cached "with":     0.434      0.433      0.433      0.432      0.439                30000
locals tmpl cached NO-"with":  0.059      0.058      0.058      0.057      0.066                30000
-
single tmpl NO-cache:          0.454      0.454      0.453      0.445      0.462                10000
single tmpl NO-cache (debug):  0.509      0.509      0.509      0.501      0.515                10000
large tmpl NO-cache:           2.228      2.223      2.223      2.216      2.256                 1000
include-1 NO-cache:            1.339      1.334      1.336      1.33       1.357                10000
include-2 NO-cache:            1.743      1.73       1.733      1.724      1.808                10000

Switching from pushing to an array and using .join() to using simple string concatenation yields performance gains up to 260%.
@mde
Copy link
Owner

mde commented Oct 31, 2019

This is hilarious, because string concat with the + operator used to be cripplingly slow in all the JS runtimes. What version of Node is this for? Does it make things horribly slow in pre-v12?

@nwoltman
Copy link
Contributor Author

Ah I should have mentioned, I ran the benchmarks with Node v12 (V8 v7.7). I'll run the benchmarks on earlier versions and post the results.

@nwoltman
Copy link
Contributor Author

nwoltman commented Nov 1, 2019

I added benchmark results to the PR description for all LTS Node versions back to v4 (i.e. all the Node versions that this package is test on with Travis). The results show similar performance gains in all Node versions.

@mde
Copy link
Owner

mde commented Nov 1, 2019

People also run EJS in the browser, but that's a minor-market use case. Thanks for doing this!

@mde mde merged commit 8cdf646 into mde:master Nov 1, 2019
@ExE-Boss
Copy link
Collaborator

ExE-Boss commented Nov 1, 2019

Here’s the whole thing reformatted to use tables:

Before (Node 12)

name: avg med med/avg min max loops
single tmpl compile: 0.671 0.66 0.663 0.651 0.728 20000
single tmpl compile (debug): 0.726 0.722 0.721 0.711 0.767 20000
large tmpl compile: 2.055 2.04 2.04 2.022 2.142 1000
include-1 compile: 0.445 0.44 0.44 0.438 0.465 20000
-
single tmpl cached: 0.108 0.104 0.104 0.101 0.12 50000
single tmpl cached (debug): 0.172 0.171 0.17 0.166 0.184 50000
large tmpl cached: 0.775 0.773 0.773 0.766 0.79 4000
include-1 cached: 0.207 0.204 0.204 0.199 0.236 20000
include-2 cached: 0.235 0.231 0.232 0.227 0.265 20000
locals tmpl cached "with": 0.51 0.509 0.509 0.505 0.52 30000
locals tmpl cached NO-"with": 0.097 0.097 0.096 0.095 0.102 30000
-
single tmpl NO-cache: 0.365 0.362 0.363 0.356 0.384 10000
single tmpl NO-cache (debug): 0.409 0.408 0.409 0.403 0.416 10000
large tmpl NO-cache: 2.243 2.236 2.238 2.226 2.271 1000
include-1 NO-cache: 0.935 0.933 0.932 0.928 0.958 10000
include-2 NO-cache: 1.363 1.362 1.361 1.318 1.444 10000

After (Node 12)

name: avg med med/avg min max loops
single tmpl compile: 0.649 0.654 0.651 0.623 0.675 20000
single tmpl compile (debug): 0.721 0.715 0.717 0.709 0.75 20000
large tmpl compile: 2.056 2.021 2.021 2.008 2.252 1000
include-1 compile: 0.447 0.444 0.443 0.44 0.472 20000
-
single tmpl cached: 0.088 0.085 0.085 0.083 0.098 50000
single tmpl cached (debug): 0.13 0.127 0.128 0.125 0.142 50000
large tmpl cached: 0.635 0.631 0.631 0.627 0.654 4000
include-1 cached: 0.186 0.181 0.181 0.178 0.215 20000
include-2 cached: 0.222 0.204 0.214 0.2 0.263 20000
locals tmpl cached "with": 0.461 0.451 0.451 0.445 0.502 30000
locals tmpl cached NO-"with": 0.027 0.026 0.026 0.024 0.039 30000
-
single tmpl NO-cache: 0.366 0.36 0.36 0.353 0.404 10000
single tmpl NO-cache (debug): 0.403 0.402 0.403 0.398 0.409 10000
large tmpl NO-cache: 2.291 2.28 2.28 2.265 2.344 1000
include-1 NO-cache: 0.917 0.915 0.915 0.908 0.939 10000
include-2 NO-cache: 1.309 1.305 1.304 1.296 1.343 10000

Performance improvements are fairly small when using with, but without using with (i.e. strict mode), this change improves performance by ~260%.

Before:
locals tmpl cached NO-"with": 0.097 0.097 0.096 0.095 0.102 30000
After:
locals tmpl cached NO-"with": 0.027 0.026 0.026 0.024 0.039 30000

Other Node Versions

Node 10

Before

name: avg med med/avg min max loops
single tmpl cached: 0.087 0.084 0.084 0.083 0.103 50000
single tmpl cached (debug): 0.116 0.113 0.113 0.113 0.127 50000
large tmpl cached: 0.606 0.603 0.603 0.601 0.634 4000
include-1 cached: 0.169 0.167 0.168 0.164 0.179 20000
include-2 cached: 0.191 0.19 0.19 0.186 0.207 20000
locals tmpl cached "with": 0.417 0.415 0.415 0.412 0.433 30000
locals tmpl cached NO-"with": 0.092 0.091 0.091 0.091 0.098 30000
-
single tmpl NO-cache: 0.324 0.318 0.318 0.316 0.342 10000
single tmpl NO-cache (debug): 0.371 0.368 0.368 0.366 0.384 10000
large tmpl NO-cache: 2.196 2.182 2.183 2.178 2.243 1000
include-1 NO-cache: 0.868 0.855 0.863 0.852 0.893 10000
include-2 NO-cache: 1.188 1.178 1.184 1.168 1.217 10000

After

name: avg med med/avg min max loops
single tmpl cached: 0.073 0.071 0.071 0.068 0.087 50000
single tmpl cached (debug): 0.115 0.113 0.113 0.112 0.127 50000
large tmpl cached: 0.522 0.519 0.519 0.518 0.547 4000
include-1 cached: 0.143 0.141 0.141 0.141 0.158 20000
include-2 cached: 0.159 0.157 0.157 0.156 0.174 20000
locals tmpl cached "with": 0.358 0.357 0.357 0.353 0.372 30000
locals tmpl cached NO-"with": 0.023 0.022 0.022 0.021 0.03 30000
-
single tmpl NO-cache: 0.317 0.31 0.31 0.308 0.333 10000
single tmpl NO-cache (debug): 0.366 0.362 0.363 0.361 0.379 10000
large tmpl NO-cache: 2.2 2.191 2.189 2.181 2.256 1000
include-1 NO-cache: 0.836 0.828 0.832 0.807 0.866 10000
include-2 NO-cache: 1.156 1.145 1.15 1.133 1.183 10000
Node 8

Before

name: avg med med/avg min max loops
single tmpl cached: 0.096 0.091 0.091 0.091 0.116 50000
single tmpl cached (debug): 0.125 0.123 0.123 0.122 0.141 50000
large tmpl cached: 0.633 0.631 0.631 0.628 0.653 4000
include-1 cached: 0.19 0.188 0.188 0.187 0.202 20000
include-2 cached: 0.207 0.204 0.204 0.203 0.224 20000
locals tmpl cached "with": 0.439 0.437 0.437 0.434 0.459 30000
locals tmpl cached NO-"with": 0.114 0.113 0.113 0.113 0.124 30000
-
single tmpl NO-cache: 0.394 0.4 0.396 0.379 0.408 10000
single tmpl NO-cache (debug): 0.439 0.438 0.437 0.434 0.447 10000
large tmpl NO-cache: 2.741 2.733 2.732 2.726 2.802 1000
include-1 NO-cache: 0.953 0.945 0.951 0.931 0.974 10000
include-2 NO-cache: 1.315 1.307 1.311 1.302 1.335 10000

After

name: avg med med/avg min max loops
single tmpl cached: 0.076 0.075 0.075 0.073 0.086 50000
single tmpl cached (debug): 0.115 0.113 0.113 0.112 0.125 50000
large tmpl cached: 0.529 0.526 0.526 0.525 0.553 4000
include-1 cached: 0.166 0.165 0.165 0.163 0.179 20000
include-2 cached: 0.178 0.175 0.175 0.175 0.196 20000
locals tmpl cached "with": 0.373 0.366 0.371 0.364 0.387 30000
locals tmpl cached NO-"with": 0.025 0.023 0.023 0.022 0.039 30000
-
single tmpl NO-cache: 0.39 0.385 0.385 0.379 0.422 10000
single tmpl NO-cache (debug): 0.441 0.439 0.439 0.437 0.451 10000
large tmpl NO-cache: 2.785 2.77 2.77 2.764 2.887 1000
include-1 NO-cache: 0.949 0.942 0.947 0.93 0.971 10000
include-2 NO-cache: 1.322 1.318 1.317 1.306 1.347 10000
Node 6

Before

name: avg med med/avg min max loops
single tmpl cached: 0.117 0.115 0.115 0.114 0.133 50000
single tmpl cached (debug): 0.153 0.153 0.153 0.151 0.158 50000
large tmpl cached: 0.667 0.655 0.659 0.652 0.715 4000
include-1 cached: 0.239 0.238 0.238 0.236 0.247 20000
include-2 cached: 0.257 0.256 0.256 0.253 0.267 20000
locals tmpl cached "with": 0.469 0.467 0.467 0.465 0.479 30000
locals tmpl cached NO-"with": 0.131 0.13 0.13 0.129 0.142 30000
-
single tmpl NO-cache: 0.389 0.388 0.388 0.378 0.407 10000
single tmpl NO-cache (debug): 0.46 0.461 0.46 0.457 0.465 10000
large tmpl NO-cache: 2.301 2.29 2.29 2.285 2.361 1000
include-1 NO-cache: 1.107 1.105 1.105 1.098 1.115 10000
include-2 NO-cache: 1.447 1.446 1.446 1.441 1.461 10000

After

name: avg med med/avg min max loops
single tmpl cached: 0.077 0.076 0.076 0.075 0.083 50000
single tmpl cached (debug): 0.122 0.121 0.121 0.12 0.127 50000
large tmpl cached: 0.533 0.522 0.524 0.517 0.614 4000
include-1 cached: 0.148 0.148 0.148 0.145 0.16 20000
include-2 cached: 0.171 0.171 0.171 0.168 0.181 20000
locals tmpl cached "with": 0.355 0.354 0.354 0.352 0.368 30000
locals tmpl cached NO-"with": 0.043 0.042 0.042 0.042 0.053 30000
-
single tmpl NO-cache: 0.37 0.372 0.37 0.362 0.38 10000
single tmpl NO-cache (debug): 0.419 0.419 0.419 0.414 0.425 10000
large tmpl NO-cache: 2.273 2.265 2.266 2.252 2.343 1000
include-1 NO-cache: 0.912 0.91 0.911 0.906 0.927 10000
include-2 NO-cache: 1.232 1.231 1.231 1.227 1.241 10000
Node 4

Before

name: avg med med/avg min max loops
single tmpl cached: 0.352 0.352 0.352 0.345 0.358 50000
single tmpl cached (debug): 0.384 0.384 0.384 0.373 0.391 50000
large tmpl cached: 1.556 1.549 1.55 1.544 1.61 4000
include-1 cached: 0.549 0.547 0.548 0.544 0.561 20000
include-2 cached: 0.614 0.613 0.613 0.607 0.625 20000
locals tmpl cached "with": 1.189 1.187 1.187 1.183 1.201 30000
locals tmpl cached NO-"with": 0.81 0.809 0.809 0.804 0.827 30000
-
single tmpl NO-cache: 0.544 0.544 0.544 0.538 0.549 10000
single tmpl NO-cache (debug): 0.615 0.608 0.608 0.599 0.648 10000
large tmpl NO-cache: 2.461 2.459 2.46 2.453 2.472 1000
include-1 NO-cache: 1.647 1.645 1.645 1.634 1.665 10000
include-2 NO-cache: 2.034 2.034 2.032 2.021 2.05 10000

After

name: avg med med/avg min max loops
single tmpl cached: 0.111 0.111 0.111 0.11 0.112 50000
single tmpl cached (debug): 0.125 0.124 0.124 0.123 0.13 50000
large tmpl cached: 0.593 0.587 0.587 0.582 0.646 4000
include-1 cached: 0.233 0.233 0.233 0.232 0.235 20000
include-2 cached: 0.25 0.251 0.251 0.247 0.252 20000
locals tmpl cached "with": 0.434 0.433 0.433 0.432 0.439 30000
locals tmpl cached NO-"with": 0.059 0.058 0.058 0.057 0.066 30000
-
single tmpl NO-cache: 0.454 0.454 0.453 0.445 0.462 10000
single tmpl NO-cache (debug): 0.509 0.509 0.509 0.501 0.515 10000
large tmpl NO-cache: 2.228 2.223 2.223 2.216 2.256 1000
include-1 NO-cache: 1.339 1.334 1.336 1.33 1.357 10000
include-2 NO-cache: 1.743 1.73 1.733 1.724 1.808 10000

@mde
Copy link
Owner

mde commented Nov 1, 2019

Much easier to view, thank you!

@nwoltman
Copy link
Contributor Author

nwoltman commented Nov 1, 2019

People also run EJS in the browser, but that's a minor-market use case.

I ran this jsPerf in Firefox and Safari (both on Mac and iOS). In all cases, string concatenation was faster.

@nwoltman nwoltman deleted the concat-string branch November 1, 2019 01:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants