Rails - 视图中符号的最大使用

时间:2015-06-04 15:57:23

标签: ruby-on-rails ruby erb

我刚刚偶然发现了一个想法障碍,希望得到专业人士的意见。

我正在使用Rails,这是我的观点中的示例代码:

<%= form_for(resource, as: resource_name, url: confirmation_path(resource_name), html: { id: "confirmation", method: :post }) do |f| %>
  <%= devise_error_messages! %>

  <div class="form-group">
    <%= f.label :email %>
    <%= f.email_field :email, autofocus: true, class: "form-control" %>
  </div>

  <div class="form-group">
    <%= f.submit "Resend confirmation instructions", class: "btn btn-primary" %>
  </div>
<% end %>

我认为我可以用符号来代替所有字符串,这样就可以节省内存:

<%= form_for(resource, as: resource_name, url: confirmation_path(resource_name), html: { id: :confirmation, method: :post }) do |f| %>
  <%= devise_error_messages! %>

  <div class="form-group">
    <%= f.label :email %>
    <%= f.email_field :email, autofocus: true, class: :'form-control' %>
  </div>

  <div class="form-group">
    <%= f.submit "Resend confirmation instructions", class: { :btn, :'btn-primary' } %>
  </div>
<% end %>

我的假设是否正确?使用符号和字符串之间的界限相当薄,那么如何决定在哪里使用符号或者应该总是使用符号?代码可读性是否也应该是一个因素?

3 个答案:

答案 0 :(得分:0)

从长远来看,你可能不想这样,。

由于rails始终存在一些内存问题,

  

Symbol.all_symbols.count

会公平地说明已经初始化了多少,为什么要添加更多,使用字符串,因为它们是可变的。

在最坏的情况下,如果用户发送的params转换为符号,则可能会遇到大麻烦,这将导致DOS(Denial of Service

只是因为非常小的差异,你可能会在以后付出更多。

对于Ruby 2.2,有一个增量GC,这将是更好的解决方案。

有时我们的应用程序似乎运行内存&gt; 90%,这有时是一个问题。从一开始就要保护,以后你不需要破解。

答案 1 :(得分:0)

在这种情况下,它不一定有益;符号的缺点是它们从未被收集过。在这种情况下,您将制作一些相当大的符号,(略微)降低代码的可读性,并将显示的文本永久提交到内存。我的规则倾向于使用符号来引用我操作的任何值,但是使用字符串文字来表示我向用户显示的任何内容(除非我将它用作符号,就像字段名称一样)在表格上。

答案 2 :(得分:0)

由于您没有创建新符号(例如String#to_sym),因此您应该只关注代码可读性,这在使用符号时基于约定example得到了改进。