LINUX.ORG.RU

[Rails][AJAX] Растёт занимаемая память.

 


0

1
var updateMessages = function () {
    if (app.requestXHR) {
        app.requestXHR.abort();
    }
    
    app.requestXHR = $.ajax({
        url: ('/some/url'),
        type: 'GET',
        data: data,
        success: function (messages) {
            $.app.Orders.requestXHR = false;
            // some process
        }
    });
}

window.setInterval(updateMessages, 3000);

Проблема в том, что растёт занимаемая память сервером. Запрос обрабатывается менее 3 секунд, по идее app.requestXHR.abort() не будет вызываться вовсе.

Однако память усточиво растёт. Включил таймер, за час набежал один гигабайт.

На серверной стороне нет ничего особенного, обыкновенный поиск и фильтрация записей.

  def fresh
    @order = Order.find(params[:id])
    if params[:last_message_id]
      last_message = @order.messages.find(params[:last_message_id])
      @messages = @order.messages
                        .where('created_at >= :date', :date => last_message.created_at)
                        .where('NOT id = :id', :id => last_message.id)
    else
      @messages = @order.messages
    end
    
    respond_to do |format|
      format.json { render :json => @messages }
    end
  end

Ответ на: комментарий от kelyar

За час 1 гигабайт! Причём в девелопменте уж сколько там могло запросов за час обработаться если один тестер работает. Унылый тормоз жрущий память ваш rails. PHP лучшее из того что есть.

psp13
()
Ответ на: комментарий от vladimir-vg

kelyar назвал правильную причину проблемы. В продакшене такого не будет.

Apple-ch ★★
()
Ответ на: комментарий от psp13

уж сколько там могло запросов за час обработаться

window.setInterval(updateMessages, 3000);

минимум - 1200. это если с одним клиентом.
если несколько табов - попробуй сам сосчитать.

kelyar ★★★★★
()

файл config/environments/development.rb ищем config.cache_classes = false false меняем на true

но вообще фу так делать.

vessi
()
Ответ на: комментарий от jessey

Толсто. // Не рубист

А что толсто? А хотя да, толстый кошелёк надо иметь что бы хостить такие ресурсоёмкие приложения.

psp13
()
Ответ на: комментарий от kelyar

минимум - 1200. это если с одним клиентом. если несколько табов - попробуй сам сосчитать.

1200 таких запросов для чистого PHP нет ничто. Он за 5 секунд обработает больше при этом не сожрав столько памяти.

psp13
()
Ответ на: комментарий от psp13

Да не смешно же. Тебе Белым по тёмному написали что это происходит только в режиме отладки. Ты невменяшка что ли?

jessey
()
Ответ на: комментарий от jessey

В режиме девелопмента он также не блещет производительностью. Да в любом случае 1 гигабайт на отладку такого простого скрипта это смешно.

psp13
()
Ответ на: комментарий от psp13

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

RR
()
Ответ на: комментарий от psp13

Так тогда и РоР тормоз, а руби рулит, нет?

А вообще, хоть и толсто, но я согласен, неистово жрать память даже только в девелопменте - это лютый звездец.

// не рубист, слегка пхпист

Kalashnikov ★★★
()
Ответ на: комментарий от Kalashnikov

По тестам выходит что между ruby и php разница не значительна. Чисто субъективно у меня иногда начинается такое что `irb` начинает подтормаживать. Т.е. печатаешь в нём что то и буквы не сразу появляются а через секунду где то. При этом python, php -a, perl -d -e 1 - ни с чем из этого такого не случается. Вот в чём дело объясните? А программа на ruby смотрится красиво - с этим не поспоришь.

psp13
()
Ответ на: комментарий от RR

Обожаю спагетти. Всё просто и понятно, всегда можно найти где что делается. Не то что ваш ООП. От распихивания кода по сотням классов количество багов не уменьшается а ресурсоёмкость растёт. Недавно чисто случайно наткнулся на ошибку на веб странице написанной на Java. Там такая иерархия классов была показана штук 500. А то что делала эта страница можно было реализовать несколькими строчками чистого PHP. Я не утверждаю что классы вообще не надо использовать. Можно использовать но умеренно. Тотальная же оопизация - глупая мода. Пользы от неё ноль на практике.

psp13
()
Ответ на: комментарий от psp13

В наркодиспансер этого пациента.

anonymous
()
Ответ на: комментарий от psp13

Нельзя же так смешить, это жестоко. Прекратите, это слишком забавно.

Alve ★★★★★
()
Ответ на: комментарий от psp13

рекомендую сразу после интенсивного лечения в наркодиспансере употреблять Java 7 перед сном, там классы к седьмой версии таки начали чиститься.

stevejobs ★★★★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.