亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Ruby > 正文

Cache在Ruby China中的應用深度解析

2020-02-24 15:40:12
字體:
來源:轉載
供稿:網友

  今天小編給大家分享一篇Cache在Ruby China中的應用深度解析,感興趣的朋友跟小編一起來了解一下吧!

  首先給大家看一下 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

  

  

?

  

  :class => "count state_false") %>

  ... 省略內容部分

  

?

  

  用 topic 的 cache_key 作為緩存 cache views/topics/{編號}-#{更新時間}/{suggest 參數}/{文件內容 MD5} -> views/topics/19105-20140508153844/false/bc178d556ecaee49971b0e80b3566f12

  某些涉及到根據用戶帳號,有不同狀態顯示的地方,直接把完整 HTML 準備好,通過 JS 控制狀態,比如目前的“喜歡“功能。

  

  var readed_topic_ids = ;

  for (var i = 0; i

  topic_id = readed_topic_ids[i];

  $(".topic_"+ topic_id + " .right_info .count").addClass("state_true");

  }

  

  再比如

  app/views/topics/_reply.html.erb

  

  

?

  

?

?

  

?

  

?

  

  

  

  

   true) %>

   "edit icon small_edit", 'data-uid' => reply.user_id, :title => "修改回帖")%>

   floor, 'data-login' => reply.user_login,

  :title => t("topics.reply_this_floor"), :class => "icon small_reply" )

  %>

  

  

?

  

?

  

  

?

  

?

  

?

  

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

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

  

  $(document).ready(function(){

  

  $("#replies .reply a.edit").css('display','inline-block');

  

  $("#replies .reply a.edit[data-uid='']").css('display','inline-block');

  

  

  Topics.checkRepliesLikeStatus([]);

  

  })

  

  數據緩存

  其實 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 請求開銷;

  

  ...

  只有兩個

  

  

  ...

  

  一些 Tips

  看統計日志,優先處理流量高的頁面;

  updated_at 是一個非常有利于幫助你清理緩存的東西,善用它!修改數據的時候別忽略它!

  多關注你的 Rails Log 里面的查詢時間,100ms 一下的頁面響應時間是一個比較好的狀態,超過 200ms 用戶就會感覺到遲鈍了。

  以上就是Cache在Ruby China中的應用深度解析,想必都了解了吧,更多相關內容請繼續關注武林技術頻道。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧洲s码亚洲m码精品一区| 亚洲xxxx妇黄裸体| 欧美激情精品久久久久久蜜臀| 中文字幕精品网| 欧美大片欧美激情性色a∨久久| 狠狠躁夜夜躁人人爽天天天天97| 91精品久久久久久久久不口人| 亚洲性线免费观看视频成熟| 国产视频精品va久久久久久| 久久久久久亚洲精品不卡| 国产欧美一区二区三区久久| 日韩大陆欧美高清视频区| 91豆花精品一区| 中国china体内裑精亚洲片| 97免费中文视频在线观看| 最近的2019中文字幕免费一页| 国产综合福利在线| 欧美日韩另类视频| 高清欧美性猛交xxxx黑人猛交| 国外视频精品毛片| 国产精品视频99| 精品成人国产在线观看男人呻吟| 亚洲电影免费观看高清| 富二代精品短视频| 日韩av电影手机在线观看| 国产精品视频自拍| 欧美日韩激情小视频| 51精品在线观看| 欧美日韩国产在线| 国产精品电影网站| 欧美日韩另类在线| 精品日韩视频在线观看| 亚洲精品中文字| 亚洲美女在线视频| 久久精品国产免费观看| 日韩欧美在线观看视频| 色悠悠久久88| 精品成人乱色一区二区| 国模精品系列视频| 日韩国产高清视频在线| 日韩综合中文字幕| 国产精品精品一区二区三区午夜版| 日韩在线视频线视频免费网站| 国产精品69久久| 538国产精品视频一区二区| 日韩免费在线看| 亚洲电影免费观看高清完整版在线| 国产成人在线精品| 中文字幕亚洲欧美日韩2019| 精品福利在线看| 亚洲第一福利在线观看| 日本电影亚洲天堂| 欧美俄罗斯乱妇| 国产成人精品视频在线观看| 精品呦交小u女在线| 亚洲全黄一级网站| 中文字幕亚洲国产| 亚洲黄色片网站| 成人有码视频在线播放| 亚洲人成欧美中文字幕| 欧美老少做受xxxx高潮| 91免费观看网站| 韩国三级电影久久久久久| 欧美日韩精品在线观看| 欧美大片免费观看在线观看网站推荐| 欧美激情成人在线视频| 亚洲色无码播放| 狠狠色噜噜狠狠狠狠97| 热久久这里只有| 91香蕉亚洲精品| 亚洲欧美精品suv| 色综合导航网站| 国产免费一区视频观看免费| 91精品久久久久久久久青青| 久久久女人电视剧免费播放下载| 九九久久综合网站| 亚洲自拍av在线| 精品亚洲永久免费精品| 国产精品91久久久| 国产日韩av在线| 黄色一区二区在线| 91性高湖久久久久久久久_久久99| 欧美日韩综合视频| 奇米影视亚洲狠狠色| 66m—66摸成人免费视频| 亚洲欧美制服综合另类| 亚洲精品美女久久久| 中文字幕亚洲字幕| 亚洲美女中文字幕| 亚洲国产精品国自产拍av秋霞| 久久精品电影网| 欧美一级在线播放| 日本亚洲欧洲色| 国语自产精品视频在线看一大j8| 亚洲va男人天堂| 亚洲欧美日韩图片| 久久人人爽人人爽人人片av高请| 亚洲欧美激情一区| 国产一区二区三区丝袜| 久久成人人人人精品欧| 日韩av影院在线观看| 亚洲网站在线播放| 欧美视频中文字幕在线| 亚洲欧美日韩综合| 欧美刺激性大交免费视频| 91亚洲精华国产精华| 26uuu国产精品视频| 国产女人精品视频| 91精品国产91久久| 一区二区中文字幕| 91精品在线观看视频| 日日摸夜夜添一区| 亚洲国产精久久久久久久| 国内揄拍国内精品少妇国语| 91精品免费看| 亚洲欧洲黄色网| 青青a在线精品免费观看| 国产精品美女久久久免费| 色悠悠国产精品| 精品无人区太爽高潮在线播放| 韩剧1988在线观看免费完整版| 国产精品亚洲一区二区三区| 国产精品男女猛烈高潮激情| 日韩中文字幕视频在线观看| 欧美野外猛男的大粗鳮| 国产成人av在线播放| 久久久久久91| 97色在线视频| 亚洲精品第一国产综合精品| 国产精品日日做人人爱| 91久久精品美女| 欧美一级片一区| 91成人在线观看国产| 日韩国产激情在线| 亚洲精品成人久久| 日韩精品视频观看| 欧美日韩国产在线看| 亚洲自拍偷拍福利| 亚洲精品美女在线观看播放| 久久99国产综合精品女同| 最近2019免费中文字幕视频三| 亚洲人成电影在线播放| 97久久国产精品| 国产91热爆ts人妖在线| 国内精品久久久久久| 亚洲精品影视在线观看| 欧美精品中文字幕一区| 国产不卡av在线| 久久视频免费观看| 亚洲综合精品伊人久久| 欧美三级欧美成人高清www| 亚洲xxxx3d| 亚洲男人的天堂在线| 午夜精品久久久久久久99黑人| 亚洲a在线播放| 欧美成人国产va精品日本一级| 亚洲精品不卡在线| 一区二区三区在线播放欧美| 国产一区二区三区视频| 中文字幕亚洲一区二区三区| 亚洲欧美三级在线| 国产精品com| 欧美日韩色婷婷| 成人激情视频免费在线|