Google API调用会降低页面速度

时间:2015-03-15 20:10:09

标签: ruby-on-rails ruby google-analytics

我在Rails 4.0.3上构建的网站使用google-api-client gem来验证和查询Google AnalyticsAPI以获取分析数据。 我使用此分析数据为我的博客帖子构建简单的迷你图。

我查询的数据构成了30天的综合浏览量。

为此,我将我的代码组织成一个帮助文件和一个模型。 我不确定这是否是正确的方法,因为当我加载管理页面时,它会慢下来爬行。

pageviews.rb

class Pageviews < ActiveRecord::Base
#google analytics api shenanigans
require 'google/api_client'
require 'date'
include ReportingHelper

def self.getviews post
client, analytics, parameters = ReportingHelper.initclient
result   = client.execute(:api_method => analytics.management.profiles.list, parameters: parameters)
profiles = result.data.items

parameters = {
  'ids'         => PROFILE,
  'start-date'  => (Date.today - 30).strftime("%Y-%m-%d"),
  'end-date'    => Date.today.strftime("%Y-%m-%d"),
  'metrics'     => "ga:pageviews",
  'dimensions'  => "ga:date",
  'filters'     => "ga:pagePath=~/#{post}"
}
result = client.execute(:api_method => analytics.data.ga.get, :parameters => parameters)
interim = result.data.rows.map{|hit| hit[1].to_i}.join(', ')

end

end

reporting_helper.rb

require 'google/api_client'
require 'date'

module ReportingHelper

SERVICE_ACCOUNT_EMAIL = 'my_email'
KEY_PATH = File.join(Rails.root, '/config/', 'mykey.p12')
PROFILE = 'ga:123456'

def self.initclient
client = Google::APIClient.new(:application_name => 'rishighan.com', :application_version => '1')

key = Google::APIClient::PKCS12.load_key(KEY_PATH, 'notafoo')
service_account = Google::APIClient::JWTAsserter.new(
  SERVICE_ACCOUNT_EMAIL,
  ['https://www.googleapis.com/auth/analytics.readonly', 'https://www.googleapis.com/auth/prediction'],
key)
client.authorization = service_account.authorize
analytics = client.discovered_api('analytics', 'v3')

parameters = {
  'accountId' => '~all',
  'webPropertyId' => '~all'
}

return client, analytics, parameters
end

end

我使用array.map方法从响应中提取值,然后使用join为要使用的sparklines插件创建逗号分隔的整数序列。

我知道这个操作很昂贵,并且是减慢页面速度的错误之一。

我想知道是否有正确的方法来处理这些昂贵的API请求。

提前谢谢。

1 个答案:

答案 0 :(得分:1)

向Google执行新的API请求非常昂贵!

您应该使用低级缓存Rails.cache.fetch来缓存API数据。 您甚至可以使用工作程序异步发送API调用,因此您的服务不会变慢。