我刚刚偶然发现了一个想法障碍,希望得到专业人士的意见。
我正在使用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 %>
我的假设是否正确?使用符号和字符串之间的界限相当薄,那么如何决定在哪里使用符号或者应该总是使用符号?代码可读性是否也应该是一个因素?
答案 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得到了改进。