2

私は現在、HTML5-モバイルゲームのバックエンドに取り組んでいます。JSONPを使用してアプリと通信します(クロスドメインポリシーのため)。

ただし、herokuでのホスティングは非常に遅く、平均応答時間は900ミリ秒です。私はすでに、データベースアクセスと本番データベースを高速化するためにincludesを使用しています。また、サーバーを分析するために新しいレリックを実行しています。

ほとんどの場合、コントローラー自体で使用されます。コントローラ方式では、800msのうち650msが必要です。

Category     Segment    % Time   Avg calls
(per txn)    Avg 
time (ms)
Controller   TasksController#update  63.4    1.0     650

正解です。コントローラーは多くのことを実行していますが、一部のルビーコードに非常に時間がかかる可能性はありますか?それとも、jsonpが何かを返すようなものでしょうか?

Newrelicによると、ユーザーは応答を最大5秒待つとのことです。それは本当にたくさんです!

ApplicationControllerは次のようになります。

# encoding: utf-8
class ApplicationController < ActionController::Base
  protect_from_forgery

  include ApplicationHelper

  include ProfilesHelper

  before_filter :authenticate, :set_locale

  after_filter :check_for_kpi


  def check_for_kpi
    if (params[:kpi])
      case params[:kpi]
        when Hash
          params[:kpi].each do |k, v|
             #all done in delayed jobs
             Kpi.delay.add(k, :value => v)
          end
        when String
          Kpi.delay.add(params[:kpi])
        when Array
          params[:kpi].each do |k|
            Kpi.delay.add(k)
          end
        else
          logger.warn("Parameters for Kpi not detected. #{params[:kpi]} ")
      end
    end
  rescue
    logger.warn("Something went wrong in the check for kpis. ")
  end

  def set_locale
    I18n.locale = params[:locale] || I18n.default_locale
  end

  def authenticate
    authkey = params[:session_key]

    @error = {}

    @profile = Profile.includes(#some more includes).find_by_authkey(authkey)
    if (@profile.nil?)
          render_json(
              {
                  :authentication_error => true
              }
          )
    else
      if (params[:version]!= @profile.version)
        @profile.delay.update_attributes(:version => params[:version])
      end
    end

  end

  protected

  def render_json(json, profile = nil)
    profile ||= @profile
    respond_to do |format|
      format.js {
        render :js => build_result_string(json, profile, params[:controller], params[:callback])
      }
      format.json {
        render :json => json.merge(profile.try(:getSessionData))
      }
    end
  end
end

ここでパフォーマンスを向上させる方法について何かアイデアはありますか?

ありがとう!

4

0 に答える 0