Рейки - чи сповільнення використання повільних зображень сповільнює?


16

У мене виникають проблеми з 3.1.0програмою для програми Rails , тепер я змінив купольні зміни в своїх запитах з AR і так, але для перегляду все ще потрібно занадто багато часу, я розділив погляди, петлі тощо, на багато частин, які відображаються динамічно всередині поглядів та всередині інших частин.

Тож погана практика мати велику кількість партій?

Чи варто скорочувати кількість партій, щоб покращити час відображення поглядів?

Спасибі

Відповіді:


5

Я знаю про відсутність значної різниці в ефективності візуалізації між багатьма частками і одним єдиним представленням, коли ви надаєте один і той же вміст.

Очевидно, що якщо ви робите лише деякі частки в одних випадках та інші в інших випадках, це ефективно зменшує обсяг візуалізації певного виду, ніж ви можете отримати деяку швидкість.

З іншого боку, я завжди вважав часткові абстракціонування, які слід використовувати принаймні з двох різних місць, щоб виправдати своє існування. Інша причина використовувати партії - це те, коли ви хочете відобразити однаковий вигляд, але завантажуєте різні партії, виходячи з певної ділової логіки.

ОНОВЛЕННЯ:

Я не можу запропонувати вимірювання чи конкретні цифри щодо швидкості візуалізації. Якщо ви використовуєте частку в представленні, для його відображення ви викликаєте метод візуалізації, тому існує виклик другого методу. Як я вже говорив у своїй відповіді, це майже нічого, але може допомогти дуже швидко прискорити справи.

Однак я жодного разу не чув про те, щоб проект виправляв проблему ефективності, видаляючи партії. Партії - це хороший спосіб запропонувати механізм повторного використання для переглядів, і з точки зору програмістів, вони повинні використовуватися для цієї області. Вони повинні бути абстракціонування для загальних понять у поглядах.

Я працював над проектом, де надмірно використовувались партії. Не Рейки, а ті самі принципи MVC. Використання невеликих частинок для всього, що ви можете уявити, робить їх важко знайти, коли ви починаєте мати десятки з них. Де ви б шукали зміни для введення? На погляд? У частковій? У якій частковій частині є 4 частки для цього погляду? ...

Після декількох жорстких реконструкцій, з кожним оновленням виду ми видаляли непотрібні деталі. Вони не зникли повністю, але все, що залишилося, - це абстракції, які чітко визначені для проекту. Вони представляють добре зрозумілі елементи (як дерево для якихось об'єктів або певний тип списку), які повторюються у формі чи іншій формі на декількох переглядах. Я знаю, якщо я бачу дерево, яке є часткове для цього. Я знаю, коли я бачу певний тип списку, що для цього є частковий. Я не полював їх.

Читання коду - це найважливіше, що можна зробити для бази програмного коду.


Так що в основному, якщо мені дійсно не потрібен частковий, якщо цей код не буде повторно використаний іншим контролером o перезавантажений динамічно, я не повинен використовувати партії? і це покращило б час подання поглядів?
Mr_Nizzle

@Mr_Nizzle: Я оновив свою відповідь, щоб висвітлити проблеми, які виникли у вашому коментарі. Я сподіваюся, що це розширене пояснення є більш зрозумілим ... Я просто зрозумів, що мій другий абзац у відповіді можна зрозуміти неправильно.
Patkos Csaba

Спасибі людино Code readability, ось про що йдеться.
Mr_Nizzle

22

Я не погоджуюся з обома відповідями. Я скопіював і вставив код з часткового в положення, що він присутній у батьківському перегляді частково, і з 500 ітерацій, це займає величезні 600 мс часу, необхідного для візуалізації подання. На мою думку, <% = render xyz%> дуже зламаний.

Приклад, загальний час для перегляду:

Before:
5759.8ms
5804.2ms
5973.6ms

After:
5268.7ms
5201.6ms
5222.4ms

Diff = 5846 - 5231 = 615 ms

Відредаговано

Я закінчила видалення всіх частин _ _ частин _model і отримала його до ~ 2000 мс, після чого я спробував перемістити частку _model в індекс, однак це не впливало на час візуалізації, тому я думаю, що це з дзвінками до вкладеної візуалізації, що робить це.


Цікава знахідка про вкладені часткові. Ви мали на увазі зняття однієї часткової скороченої 600 мс, а скасування всіх партій скоротило 3800 мс? Ви можете випустити демо-додаток для цього?
lulalala

@lulalala так, і, вибачте, я не можу так, як це було для моєї роботи, і тепер я перемістив його з Rails на Django, так що навіть не зв’язувався з цим кодом. Дивлячись на відповідь Wyatt Barnett , я також зараз не впевнений, чи насправді під кришкою партії робили неефективні доступи до БД, яких мій код, який не вводив, якось уникав.
AJP

1
Я знайшов те саме. Зняття коду з сторонніх сторін та розкручування вигляду призвело до збільшення продуктивності на 450 мс.
bcackerman

1
На моєму досвіді, використовуючи Rails з видами HAML, багато дрібних частинок значно повільно відтворюють. Здається, є фіксований накладний наклад на кожну часткову частину, а також збирання сміття, яке починається під час подання багатьох частин на вигляд. Включення часткової частини, використаної в таблиці з 50 елементів, зменшило візуалізацію сторінки на 500 мс.
d4n3

2
Rails 4: Я просто видалив кілька тисяч вкладених частинок у великому додатку та отримав величезну швидкість. Не майте цифр, але так, якщо у вас виникли проблеми з роботою, варто видалити кілька вкладених сторонніх сторін, щоб дізнатися, чи допомагає це.
Рік Сміт

5

Не хлопець з рейок, але часткові погляди, ймовірно, самі по собі не є проблемою. Скоріше, це здається, що ви робите трохи SELECT N + 1. Подивіться на речі з точки зору сервера БД, щоб переконатись, що ви не збиваєте його до маси.


2

Працює над програмою Rails 4.2 прямо зараз, де повільна дія, яка займала в середньому близько 745 мс.

Коли я виймаю код з партій і розміщую його в головному шаблоні, час, який він займає, зараз складає в середньому менше 25 мс.

Кількість викликів щодо надання партії становила лише 29.


2

Навіть якщо у вас немає проблеми з n + 1 і ви робите всі бази даних наперед (скажімо, з рекурсивним CTE), вкладені партії все ще дуже повільні. Хамл і Ерб на мене дивляться повільно. На рейках 5.1.4 Я бачу кілька мілісекунд на кожну часткову частину, а також епізодичні частки, які значно гірші (можливо, відповідають збору сміття).

Я помітив, що якщо я перейменую частковий, поки працює один із цих запитів, я одразу отримую помилку про те, як файл не знайдено. Отже, очевидно, Rails читає частково вимкнений диск, перезаписує його та оцінює його для кожної ітерації. Недарма це повільно!


0

Багато сповільненості, що спостерігається у вкладених частинах, відбувається лише під час розвитку. Перейти до виробництва для тестування.


Можливо, ви могли б прокоментувати, чому версія розробки помітно повільніше, і бути більш нюансом щодо того, коли використовувати який режим для тестування.
Kain0_0

відверто кажучи, я не знаю всіх деталей, я просто знаю, що у мене були ті самі проблеми, і я виявив, що це значно покращилось, коли я перейшов на виробництво. Я можу здогадатися, що, як зауважив Пол Юнгвірт, перечитування часткового та повторного перегляду відбувається в процесі розробки, коли файли, можливо, змінилися.
Сапаф
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.