2015-06-04 3 views
0

Я только что наткнулся на блок мышления и хотел получить вклад от профи.Rails - максимальное использование символов во взглядах

Я использую 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

В этом случае, я думаю, что читаемость кода должна быть вашей главной заботой. Это очень похоже на преждевременную (и сомнительную) оптимизацию. Струны в этом смысле имеют гораздо больший смысл. – Slicedpan

+0

Я согласен, что оптимизация сомнительна: улучшение производительности, которое вы получите от этого, будет находиться где-то между нулем и пренебрежимо малым, и в этом процессе вы сильно усложняете чтение кода и, следовательно, с большей вероятностью сможете сломаться. –

ответ

0

В долгосрочной перспективе вы, возможно, не захотите следовать этому пути.

Как рельсы всегда имеет некоторые проблемы с памятью,

Symbol.all_symbols.count

будет достаточно дать некоторое представление о том, сколько инициализируются уже, почему вы хотите, чтобы сложить несколько больше , используйте строки, поскольку они изменяемы.

В худшем случае, если пользователь отправил Params преобразуется в символ, вы можете быть в большой беде, что приведет к DOS (Denial of Service)

Только для очень и очень небольшой разницы, вы можете платить более позднее.

On для Ruby 2.2, есть дополнительный GC, который будет лучшим решением для этого.

Время от времени наше приложение, похоже, работает память> 90%, что было проблемой время от времени. Защищайте с самого начала, позже вам не нужно взламывать.

0

В этом случае это не обязательно будет полезно; недостатком символов является то, что они никогда не собираются. В этом случае вы делаете несколько довольно больших символов (немного), понижающих читабельность вашего кода и постоянно фиксируя отображаемый текст в памяти. Мое правило имеет смысл использовать символы для ссылок на любое значение, на котором я работаю, но использую строковые литералы для всего, что я показываю пользователю (если только я не использую его как символ, как, например, в случае имен полей в формах).

0

Поскольку вы не создаете новые символы (например, String#to_sym), вам следует сосредоточиться на читаемости кода, которая на основе соглашения example улучшается при использовании символов.

Смежные вопросы