Size: a a a

2020 September 07

mB

mr Bubble in RubyRush
А теперь отдается JSON, с пагинацией, в котором 100 заказов.
Ну и конечно же я наступил на грабли N+1
источник

Э

Эдем in RubyRush
Пагинацию и в простой вьюхе можно сделать
источник

Э

Эдем in RubyRush
Вот N+1 — другое дело
источник

mB

mr Bubble in RubyRush
Эдем
Пагинацию и в простой вьюхе можно сделать
Можно, я знаю но с json мне больше нравится, на фронте плагин стоит для отображения таблиц, он лучше с json работает
источник

M

Michael in RubyRush
mr Bubble
Ага, я использую такой подход и погорел чутка, приложение начало тормозить где-то при 500 заказах в базе, при подходе к 1000 - работать уже было некомфортно, я рассчитывал что до 10к оптимизировать не надо будет, пришлось раньше заморачиваться и вместо рендеринга вьюх отдавать джейсон клиенту, а он уже рендерит
теперь жду когда этот вариант начнет тормозить))))
не путайте теплое с мягким — вы погорели потому что не рассчитали нагрузку на тя тажелые части вашего приложения (выгрузка большого числа записей и особенно рендеринг вьюх)

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

mB

mr Bubble in RubyRush
Эдем
Вот N+1 — другое дело
Ага, время загрузки уменьшилось, но все равно оставалось большим 5-10 секунд. вариант с джейсоном грузится и рендерится за 1-2 секунды.
источник

mB

mr Bubble in RubyRush
Я по правде говоря вообще ничего не рассчитывал.
источник

E

Eugene in RubyRush
mr Bubble
Ага, время загрузки уменьшилось, но все равно оставалось большим 5-10 секунд. вариант с джейсоном грузится и рендерится за 1-2 секунды.
А, ну понял. Да, особенно если внутри Order.each ... делается render паршала, то всё это не рассчитано на работу с сотнями-тысячами объектов на одну страницу
источник

E

Eugene in RubyRush
Стандартное решение - так называемое фрагментное кеширование - его в этом случае и проще сделать, чем переписывать фронтенд. Но в целом дело хозяйское.
источник

mB

mr Bubble in RubyRush
Матрешечное кеширование? Я читал про него, вариант отдавать json мне показался проще. Кеширование я пробовал - в моем случае с ним было бы больше мороки, вот когда json будет медленно отдаваться - тогда можно и кеширование прикрутить
источник

E

Eugene in RubyRush
mr Bubble
Матрешечное кеширование? Я читал про него, вариант отдавать json мне показался проще. Кеширование я пробовал - в моем случае с ним было бы больше мороки, вот когда json будет медленно отдаваться - тогда можно и кеширование прикрутить
> Матрешечное кеширование?

Да: https://guides.rubyonrails.org/caching_with_rails.html#russian-doll-caching

> Кеширование я пробовал - в моем случае с ним было бы больше мороки, вот когда json будет медленно отдаваться - тогда можно и кеширование прикрутить

Вполне разумный вариант
источник

N

Ni in RubyRush
mr Bubble
А теперь отдается JSON, с пагинацией, в котором 100 заказов.
Ну и конечно же я наступил на грабли N+1
Для решения проблем с N+1 есть гем bullet. Он иногда помогает в работе. Также есть гем от злых марсиан для проверок количества SQL запросов в тестах
источник

mB

mr Bubble in RubyRush
Ni
Для решения проблем с N+1 есть гем bullet. Он иногда помогает в работе. Также есть гем от злых марсиан для проверок количества SQL запросов в тестах
Я использовал rack-mini-profiler, он показывает время загрузки страницы и список запросов какой и сколько времени занял, там видно у меня на некоторых страницах были сотни запросов и время загрузки по 20-30 секунд. Прямо на сайте выводит в верхнем левом углу время и остальное по клику
источник
2020 September 08

mB

mr Bubble in RubyRush
Привет, снова я с глупыми вопросами. Написал тест rspec+capybara, тест должен повториться примерно 150 раз, но не успевает, примерно после 70 итераций процесс web content сжирает всю память и потом выдает ошибку - Tried to run command without establishing a connection
Может тут можно что-то подкрутить?

Capybara.register_driver :selenium_chrome do |app|
 @driver = Capybara::Selenium::Driver.new(app, browser: :firefox)
end
Capybara.javascript_driver = :selenium #:selenium_chrome
источник

M

Michael in RubyRush
Вы может создаёте 150 новых экземпляров драйвера там где нужен один?
источник

K

Kirill Ilyin in RubyRush
Michael
Вы может создаёте 150 новых экземпляров драйвера там где нужен один?
Так он это и делает в цикле. На каждой итерации создаётся экземпляр.
источник

M

Michael in RubyRush
Ну а зачем? На каждый тест новый браузер. Нельзя ли обойтись одним?
источник

M

Michael in RubyRush
@driver ||= ... короче )
источник

K

Kirill Ilyin in RubyRush
Michael
Ну а зачем? На каждый тест новый браузер. Нельзя ли обойтись одним?
Можно, но я не автор этого вопроса. :-):-):-)
источник

DG

Denis Gavrilin in RubyRush
Там вообще не нужна переменная
источник