婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 分析Cache 在 Ruby China 里面的應用情況

分析Cache 在 Ruby China 里面的應用情況

熱門標簽:征服者企業地圖標注 中牟外呼系統違法嗎 漯河電銷 AI電銷機器人 線路 天津外呼系統怎么收費 柯城手機地圖如何做地圖標注 外呼線路從哪里出來的 淮安自動外呼系統供應商 巫師3地圖標注魔力之所

首先給大家看一下 NewRelic 的報表

最近 24h 的平均響應時間

流量高的那些頁面 (Action)

訪問量搞的幾個 Action 的情況:

TopicsController#show

UsersController#show (比較慘,主要是 GitHub API 請求拖慢)

PS: 在發布這篇文章之前我有稍加修改了一下,GitHub 請求放到后臺隊列處理,新的結果是這樣:

TopicsController#index

HomeController#index

從上面的報表來看,目前 Ruby China 后端的請求,排除用戶主頁之外,響應時間都在 100ms 以內,甚至更低。

我們是如何做到的?

Markdown 緩存
Fragment Cache
數據緩存
ETag
靜態資源緩存 (JS,CSS,圖片)
Markdown 緩存

在內容修改的時候就算好 Markdown 的結果,存到數據庫,避免瀏覽的時候反復計算。

此外這個東西也特意不放到 Cache,而是放到數據庫里面:

為了持久化,避免 Memcached 停掉的時候,大量丟失;
避免過多占用緩存內存;

class Topic
 field :body # 存放原始內容,用于修改
 field :body_html # 存放計算好的結果,用于顯示

 before_save :markdown_body
 def markdown_body
  self.body_html = MarkdownTopicConverter.format(self.body) if self.body_changed?
 end
end
Fragment Cache

這個是 Ruby China 里面用得最多的緩存方案,也是速度提升的原因所在。

app/views/topics/_topic.html.erb

% cache([topic, suggest]) do %>
div class="topic topic_line topic_%= topic.id %>">
  %= link_to(topic.replies_count,"#{topic_path(topic)}#reply#{topic.replies_count}",
     :class => "count state_false") %>
 ... 省略內容部分

/div>
% end %>

用 topic 的 cache_key 作為緩存 cache views/topics/{編號}-#{更新時間}/{suggest 參數}/{文件內容 MD5} -> views/topics/19105-20140508153844/false/bc178d556ecaee49971b0e80b3566f12
某些涉及到根據用戶帳號,有不同狀態顯示的地方,直接把完整 HTML 準備好,通過 JS 控制狀態,比如目前的“喜歡“功能。

script type="text/javascript">
 var readed_topic_ids = %= current_user.filter_readed_topics(@topics) %>;
 for (var i = 0; i  readed_topic_ids.length; i++) {
  topic_id = readed_topic_ids[i];
  $(".topic_"+ topic_id + " .right_info .count").addClass("state_true");
 }
/script>

再比如

app/views/topics/_reply.html.erb

 % cache([reply,"raw:#{@show_raw}"]) do %>
div class="reply">
 div class="pull-left face">%= user_avatar_tag(reply.user, :normal) %>/div>
 div class="infos">
  div class="info">
   span class="name">
    %= user_name_tag(reply.user) %>
   /span>
   span class="opts">
    %= likeable_tag(reply, :cache => true) %>
    %= link_to("", edit_topic_reply_path(@topic,reply), :class => "edit icon small_edit", 'data-uid' => reply.user_id, :title => "修改回帖")%>
    %= link_to("", "#", 'data-floor' => floor, 'data-login' => reply.user_login,
      :title => t("topics.reply_this_floor"), :class => "icon small_reply" )
    %>
   /span>
  /div>
  div class="body">
   %= sanitize_reply reply.body_html %>
  /div>
 /div>
/div>
% end %>

同樣也是通過 reply 的 cache_key 來緩存 views/replies/202695-20140508081517/raw:false/d91dddbcb269f3e0172bf5d0d27e9088

同時這里還有復雜的用戶權限控制,用 JS 實現;

script type="text/javascript">
 $(document).ready(function(){
  % if admin? %>
   $("#replies .reply a.edit").css('display','inline-block');
  % elsif current_user %>
   $("#replies .reply a.edit[data-uid='%= current_user.id %>']").css('display','inline-block');
  % end %>
  % if current_user  !@user_liked_reply_ids.blank? %>
   Topics.checkRepliesLikeStatus([%= @user_liked_reply_ids.join(",") %>]);
  % end %>
 })
/script>

數據緩存

其實 Ruby China 的大多數 Model 查詢都沒有上 Cache 的,因為據實際狀況來看, MongoDB 的查詢響應時間都是很快的,大部分場景都是在 5ms 以內,甚至更低。

我們會做一些比價負責的數據查詢緩存,比如:GitHub Repos 獲取

def github_repos(user_id)
 cache_key = "user:#{user_id}:github_repos"
 items = Rails.cache.read(cache_key)
 if items.blank?
  items = real_fetch_from_github()
  Rails.cache.write(cache_key, items, expires_in: 15.days)
 end
 return items
end
ETag

ETag 是在 HTTP Request, Response 可以帶上的一個參數,用于檢測內容是否有更新過,以減少網絡開銷。

過程大概是這樣

Rails 的 fresh_when 方法可以幫助將你的查詢內容生成 ETag 信息

def show
 @topic = Topic.find(params[:id])

 fresh_when(etag: [@topic])
end

靜態資源緩存

請不要小看這個東西,后端寫得再快,也有可能被這些拖慢(瀏覽器上面的表現)!

1、合理利用 Rails Assets Pipeline,一定要開啟!

# config/environments/production.rb
config.assets.digest = true

2、在 Nginx 里面將 CSS, JS, Image 的緩存有效期設成 max;

location ~ (/assets|/favicon.ico|/*.txt) {
 access_log    off;
 expires      max;
 gzip_static on;
}

3、盡可能的減少一個頁面 JS, CSS, Image 的數量,簡單的方法是合并它們,減少 HTTP 請求開銷;

head>
 ... 
 只有兩個
 link  rel="stylesheet" />
 script src="http://ruby-china-files.b0.upaiyun.com/assets/app-24d4280cc6fda926e73419c126c71206.js">/script>
 ...
/head>

一些 Tips

看統計日志,優先處理流量高的頁面;
updated_at 是一個非常有利于幫助你清理緩存的東西,善用它!修改數據的時候別忽略它!
多關注你的 Rails Log 里面的查詢時間,100ms 一下的頁面響應時間是一個比較好的狀態,超過 200ms 用戶就會感覺到遲鈍了。

您可能感興趣的文章:
  • Ruby On Rails中如何避免N+1問題
  • ruby開發vim插件小結
  • 優化Ruby腳本效率實例分享
  • Java版的Ruby解釋器 JRuby簡介
  • ruby執行周期性任務的三種gem介紹

標簽:內江 甘孜 棗莊 西雙版納 河池 南昌 克拉瑪依 大慶

巨人網絡通訊聲明:本文標題《分析Cache 在 Ruby China 里面的應用情況》,本文關鍵詞  分析,Cache,在,Ruby,China,里,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《分析Cache 在 Ruby China 里面的應用情況》相關的同類信息!
  • 本頁收集關于分析Cache 在 Ruby China 里面的應用情況的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    成人污视频在线观看| 色综合色综合色综合色综合色综合| 91亚洲大成网污www| 亚洲天堂久久久久久久| 亚洲综合区在线| 亚洲一二三四区不卡| 青青草精品视频| 国产综合一区二区| 色婷婷综合久久久中文字幕| 欧美巨大另类极品videosbest | 欧美一区二区高清| 26uuu亚洲| 亚洲一区在线视频| 国产一区在线观看麻豆| 91亚洲精品乱码久久久久久蜜桃 | 亚洲精品水蜜桃| 日韩黄色免费电影| 97国产一区二区| 精品少妇一区二区三区免费观看 | 97精品国产97久久久久久久久久久久| 欧美性欧美巨大黑白大战| 欧美成人欧美edvon| 成人欧美一区二区三区黑人麻豆| 蜜臀av性久久久久蜜臀aⅴ四虎| 99re8在线精品视频免费播放| 欧美一区二区网站| 亚洲天堂福利av| 成人一级视频在线观看| 日韩一区二区免费在线电影| 国产欧美日韩激情| 激情五月播播久久久精品| 欧美日韩一级片在线观看| 中文字幕综合网| 国产精品一区在线观看你懂的| 欧美日韩国产小视频在线观看| 国产精品久久毛片a| 国产一区二区三区不卡在线观看| 粉嫩av一区二区三区在线播放| 久久久久久久国产精品影院| av一区二区三区在线| 午夜激情久久久| 肉肉av福利一精品导航| 日韩欧美国产1| 成人免费毛片片v| 国产精品的网站| 国产精品色在线| av中文一区二区三区| 亚洲三级电影网站| 国模套图日韩精品一区二区 | 中日韩免费视频中文字幕| 日本三级亚洲精品| 欧美日韩不卡在线| 一区二区三区在线视频观看58| 福利一区二区在线观看| 国产三级精品三级| 福利91精品一区二区三区| 国产三级欧美三级日产三级99| 久久爱www久久做| 亚洲精品一区二区三区四区高清| 久久国产精品99久久久久久老狼 | 亚洲成人在线网站| 91国偷自产一区二区三区观看| 亚洲三级电影网站| 欧美在线free| 亚洲sss视频在线视频| 欧美肥妇free| 激情综合色综合久久综合| 精品国产sm最大网站| 国产在线日韩欧美| 国产精品无圣光一区二区| 成人app下载| 一区二区三区四区视频精品免费| 在线免费观看日本一区| 亚洲电影视频在线| 日韩欧美中文字幕一区| 中文字幕不卡在线观看| 亚洲日本中文字幕区| 91电影在线观看| 日韩影视精彩在线| 亚洲精品一区二区三区四区高清| 国产精品综合久久| 亚洲人吸女人奶水| 91精品国产91久久久久久最新毛片| 美女国产一区二区| 日本一区二区高清| 在线观看一区不卡| 久久精品国产一区二区| 国产欧美精品一区二区色综合 | 成人黄色777网| 亚洲午夜在线观看视频在线| 欧美大片在线观看| 色婷婷av一区二区三区gif | 免费高清在线一区| 国产精品久久久久一区 | 七七婷婷婷婷精品国产| 成人av免费在线播放| 亚洲国产精品一区二区久久 | 99久久精品免费| 日韩高清在线观看| 国产精品久久久久7777按摩| 欧美一级生活片| 在线视频国内一区二区| 开心九九激情九九欧美日韩精美视频电影 | 91精品国产综合久久精品app| 激情五月婷婷综合| 综合在线观看色| 精品人在线二区三区| 99精品视频一区二区| 欧美一区二区视频在线观看2022| 国产精品国产三级国产有无不卡| 欧美在线免费观看亚洲| 日韩国产一区二| 99久久国产免费看| 亚洲女爱视频在线| av不卡免费电影| 日本道精品一区二区三区 | 国产片一区二区| 天堂午夜影视日韩欧美一区二区| 99re6这里只有精品视频在线观看| 久久亚洲综合色一区二区三区 | 久久久电影一区二区三区| 色偷偷一区二区三区| 极品美女销魂一区二区三区 | 成人黄色软件下载| 婷婷夜色潮精品综合在线| 成人免费一区二区三区视频| 91精品福利视频| 91在线免费播放| 波多野洁衣一区| 老司机精品视频导航| 日韩一区欧美二区| 悠悠色在线精品| 国产精品美女视频| 精品国产乱码91久久久久久网站| 91美女片黄在线观看91美女| 成人va在线观看| 免费人成精品欧美精品 | 久久精品国产第一区二区三区| 亚洲国产精品影院| 中文一区二区完整视频在线观看| 国产午夜精品久久久久久久 | 中文字幕中文字幕在线一区 | 国产麻豆91精品| 欧美日韩国产一级片| 亚洲主播在线观看| 久久综合久久99| 久久亚洲精精品中文字幕早川悠里| 一区二区理论电影在线观看| 99精品视频在线观看免费| 亚洲国产精品精华液网站| 亚洲欧美另类久久久精品| 国产午夜亚洲精品理论片色戒 | 欧美xxxxx牲另类人与| 蜜臀久久久99精品久久久久久| 中文字幕亚洲一区二区va在线| 久久亚洲影视婷婷| 欧美大片一区二区| 欧美va日韩va| 精品福利一区二区三区| 欧美电影免费观看高清完整版在 | 久久色.com| 精品精品欲导航| 91精品蜜臀在线一区尤物| 欧美精三区欧美精三区| 欧美日韩三级在线| 欧美另类z0zxhd电影| 91精品国产综合久久蜜臀| 7777精品伊人久久久大香线蕉的| 欧美性猛片aaaaaaa做受| 欧美日韩卡一卡二| 欧美精品一区二区三区一线天视频| 日韩精品一区二| 国产精品免费视频一区| 成人欧美一区二区三区1314| 亚洲精品国产视频| 蜜桃久久av一区| 国产乱子轮精品视频| 91精品办公室少妇高潮对白| 日本不卡不码高清免费观看| 成人污视频在线观看| 99久久99精品久久久久久| 在线精品亚洲一区二区不卡| 欧美日韩第一区日日骚| 亚洲一区在线观看网站| 国产精品嫩草影院av蜜臀| 欧美日韩第一区日日骚| 国产精品18久久久久久久久久久久| 欧美久久一二三四区| 欧美一级一区二区| 亚洲欧洲三级电影| 1区2区3区国产精品| 亚洲综合久久av| 婷婷久久综合九色综合绿巨人| 日日夜夜免费精品| jvid福利写真一区二区三区| 亚洲乱码国产乱码精品精可以看| 亚洲成人综合在线| 国产露脸91国语对白| 欧美久久久一区| 欧美激情一区二区三区四区 |