私は現在、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
ここでパフォーマンスを向上させる方法について何かアイデアはありますか?
ありがとう!