哪个更快?渲染部分或使用 if 语句?

Which is faster? Rendering partials or using if-statements?

我有一个正在呈现的页面,根据查看者的不同,它看起来会略有不同。我的两个选择是 1) 使用一些 ifs 只显示相关信息和 2) 根据用户是谁从我的控制器呈现两个不同的视图。

为了保持干燥,我不想只呈现两个完全独立的页面。相反,我更希望我呈现的每个页面都引用一些公共部分。

例如:

选项 1

view.slim

h1 Notifications
- if current_user.student.id == params[:id]
  = link_to 'Edit', ...
- @notifications.each do |note|
  # some stuff
h1 Activity
- if current_user.student.id == params[:id]
  = link_to 'Edit', ...
- @activities.each do |note|
  # some stuff
#etc...

选项 2

current_user_view.slim

= render 'notifications_header
= link_to 'Edit', ...
= render 'notifications'

= render 'activities_header
= link_to 'Edit', ...
= render 'activities'

other_user_view.slim

= render 'notifications_header
= render 'notifications'

= render 'activities_header
= render 'activities'

_notifications.slim

- @notifications.each do |note|
  # some stuff

哪种方法更有效?

基准测试

以下是我使用以下各项进行的一些基准测试:

_render.slim

- 1000.times do
  = render 'foo'

_foo.slim

| Hello

_if_clause.slim

- 1000.times do
  - if current_user.student.id == params[:id]
    | Hello

结果如下:

所以看起来渲染局部非常慢。

想法?

Rails 4.1.5 ruby2.1.2

编辑 1:忘记在 _if_clause.slim

中添加 | Hello

您的基准测试未比较相同的功能。 _render 是用字符串渲染 1000 个部分,_if_clause 是只做 if 比较。你应该比较例如具有内联通知处理的模板渲染和部分处理通知的模板。

但即使部分渲染应该慢得多,另一件要考虑的事情是,这有关系吗?根据您的整体性能需求,如果代码更易于理解,牺牲几毫秒的查看时间可能是值得的。