Называет ли частичное дорогостоящей операцией? - PullRequest
6 голосов
/ 05 декабря 2009

Могу ли я использовать частичные операции столько раз, сколько я хочу, или мне нужно ограничивать себя, чтобы избежать попадания моих просмотров в режим интенсивного трафика?

1 Ответ

11 голосов
/ 05 декабря 2009

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

Частичные файлы. Когда вы отрисовываете действие без партиалов, ваше действие «стоит» 1 файл (это не совсем так, но это для упрощения объяснения). Если ваше действие отображает 4 части, в итоге вы получаете стоимость 5. Это означает, что у вас есть 4 дополнительных вызова ввода-вывода, и реальная стоимость каждого вызова зависит от нагрузки на сервер, производительности сервера и т. Д.

Но имеет ли это значение? По моему опыту, для 99% раз нет. Также следует отметить, что преимущества использования партиалов с точки зрения читабельности кода и удобства сопровождения обычно стоят выбора.

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

Помните: Ruby не является сверхбыстрым языком программирования, а выразительность кода всегда занимала первое место в пользу производительности. Rails неявно соглашается с этим соглашением, хотя команда Rails всегда фокусировалась на производительности (а Rails 3 - это практическая демонстрация, где всегда есть место для улучшений)

Тем не менее, вы можете безопасно использовать партиалы и сократить накладные расходы приложения с помощью некоторого умного механизма кэширования. Например, вы можете поместить рендеринг коллекции в блок cache, чтобы оператор рендеринга коллекции выполнялся только один раз, тогда ваше приложение просто загрузит 1 файл кэша вместо 10 не кэшированных партиалов.

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

Итак, если вы действительно заботитесь о производительности, вам, вероятно, не следует избегать использования партиалов, а вместо этого убедитесь, что вы используете все остальные функции, которые Rails предоставляет вам для масштабирования вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...