Member Renamer 对性能有影响吗
Does Member Renamer have any impact to performance
使用 Member Renamer 是否会对性能产生任何影响,因为它将通过反射来实现:
https://github.com/lunet-io/scriban/blob/master/doc/runtime.md#member-renamer
带或不带 Renamer 的 Scriban 正在使用反射来获取 public 属性和方法。
重命名器是其处理过程中的一小步。
查看 source code 中的重命名器。
我使用 smart BenchmarkDotNet
做了一个基准测试
对于以下模板
<ul id='products'>
{% for product in products %}
<li>
product.name: <h2>{{ product.name }}</h2>
product.price: Only {{ product.price }}
product.description: {{ product.description | truncate: 15 }}
</li>
{% endfor %}
</ul>
数据大小:List<Product> Products
为500
基准测试结果:
Method | Mean | Error | StdDev | Ratio |
-------------------------- |---------:|----------:|----------:|------:|
'Scriban with Renamer' | 3.125 ms | 0.0617 ms | 0.0711 ms | 1.00 |
| | | | |
'Scriban without Renamer' | 3.070 ms | 0.0388 ms | 0.0363 ms | 1.00 |
// * Hints *
Outliers
TemplateManager.'Scriban with Renamer': Clr -> 1 outlier was removed
// * Legends *
Mean : Arithmetic mean of all measurements
Error : Half of 99.9% confidence interval
StdDev : Standard deviation of all measurements
Ratio : Mean of the ratio distribution ([Current]/[Baseline])
1 ms : 1 Millisecond (0.001 sec)
如您所见,差异(在 Renamer 的情况下)约为:0.055 毫秒
几乎没有区别
结论:
在 Renamer
的情况下没有效果
注:
根据CPU/memory/...等,此基准测试中的数字可能在其他机器上有所不同,但结论是相同的。
使用 Member Renamer 是否会对性能产生任何影响,因为它将通过反射来实现: https://github.com/lunet-io/scriban/blob/master/doc/runtime.md#member-renamer
带或不带 Renamer 的 Scriban 正在使用反射来获取 public 属性和方法。
重命名器是其处理过程中的一小步。
查看 source code 中的重命名器。
我使用 smart BenchmarkDotNet
做了一个基准测试对于以下模板
<ul id='products'>
{% for product in products %}
<li>
product.name: <h2>{{ product.name }}</h2>
product.price: Only {{ product.price }}
product.description: {{ product.description | truncate: 15 }}
</li>
{% endfor %}
</ul>
数据大小:List<Product> Products
为500
基准测试结果:
Method | Mean | Error | StdDev | Ratio |
-------------------------- |---------:|----------:|----------:|------:|
'Scriban with Renamer' | 3.125 ms | 0.0617 ms | 0.0711 ms | 1.00 |
| | | | |
'Scriban without Renamer' | 3.070 ms | 0.0388 ms | 0.0363 ms | 1.00 |
// * Hints *
Outliers
TemplateManager.'Scriban with Renamer': Clr -> 1 outlier was removed
// * Legends *
Mean : Arithmetic mean of all measurements
Error : Half of 99.9% confidence interval
StdDev : Standard deviation of all measurements
Ratio : Mean of the ratio distribution ([Current]/[Baseline])
1 ms : 1 Millisecond (0.001 sec)
如您所见,差异(在 Renamer 的情况下)约为:0.055 毫秒
几乎没有区别
结论: 在 Renamer
的情况下没有效果注: 根据CPU/memory/...等,此基准测试中的数字可能在其他机器上有所不同,但结论是相同的。