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

首頁 > 編程 > Ruby > 正文

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

2020-10-29 19:44:58
字體:
來源:轉載
供稿:網友

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

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.rbconfig.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 用戶就會感覺到遲鈍了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品国产电影| 久久久国产精品亚洲一区| 日韩中文字在线| 日韩视频免费观看| 亚洲天堂免费在线| 狠狠躁夜夜躁人人爽超碰91| 川上优av一区二区线观看| 亚洲精品一区久久久久久| 欧美国产日韩二区| 亚洲精品福利在线| 欧美日韩亚洲一区二区| 国产欧美日韩最新| 啪一啪鲁一鲁2019在线视频| 亚洲韩国欧洲国产日产av| 国产亚洲欧洲高清| 久久久久久久久网站| 日本午夜人人精品| xxxxxxxxx欧美| 亚洲高清在线观看| 久久久久久亚洲精品中文字幕| 97在线视频一区| 亚洲欧美一区二区三区四区| 九九九久久国产免费| 亚洲www永久成人夜色| 国产精品激情自拍| 久久久免费在线观看| 久久高清视频免费| 欧美一级高清免费| 青青久久aⅴ北条麻妃| 国产精品r级在线| 亚洲国产日韩欧美在线99| 国产精品久久97| 亚洲国产精品热久久| 成人免费网站在线| 91精品久久久久久综合乱菊| 国产精品青青在线观看爽香蕉| 欧美精品在线第一页| 亚洲国产精品电影| 午夜免费在线观看精品视频| 欧美激情三级免费| 日韩精品在线免费| 国产精品久久久久久久久久免费| 亚洲国产精品久久精品怡红院| 另类专区欧美制服同性| 中文字幕日韩欧美精品在线观看| 久久九九全国免费精品观看| 日韩成人性视频| 在线国产精品视频| 92看片淫黄大片欧美看国产片| 亚洲自拍中文字幕| 中文字幕日韩精品有码视频| 国产精品91免费在线| 欧美日韩一区二区三区在线免费观看| 一区二区欧美久久| 久久手机免费视频| 久久精品国产一区二区电影| 欧美一级淫片aaaaaaa视频| 成人美女免费网站视频| 亚洲mm色国产网站| 亚洲国产精品久久久久秋霞不卡| 精品国产一区二区三区久久狼黑人| 亚洲欧美国产一本综合首页| 一区二区三区在线播放欧美| 久久综合国产精品台湾中文娱乐网| 国产精品精品久久久| 午夜精品在线视频| 亚洲激情免费观看| 91高清视频在线免费观看| 国产精品成人va在线观看| 国产欧美精品在线播放| 欧美午夜宅男影院在线观看| 亚洲欧美精品在线| 日韩美女福利视频| 欧美大人香蕉在线| 国外色69视频在线观看| 欧美日韩亚洲视频一区| 亚洲黄色av网站| 国产69久久精品成人| 国产99久久精品一区二区| 国产精品91在线观看| 国产美女扒开尿口久久久| 日韩av一区在线观看| 疯狂欧美牲乱大交777| 国产亚洲精品久久久久久| 色在人av网站天堂精品| 成人网中文字幕| 欧美在线xxx| 日韩免费av一区二区| 国产精品日韩欧美综合| 亚洲自拍偷拍福利| 欧美视频精品一区| 亚洲一区二区三| 亚洲综合精品一区二区| 亚洲欧洲免费视频| 欧美日韩一区二区免费视频| 日韩免费中文字幕| 91精品国产沙发| 欧美激情免费在线| 尤物tv国产一区| 欧美激情国产精品| 亚洲国产毛片完整版| 日韩av在线播放资源| 永久免费毛片在线播放不卡| www.欧美精品一二三区| …久久精品99久久香蕉国产| 亚洲аv电影天堂网| 欧美日韩亚洲天堂| 高清欧美一区二区三区| 亚洲成人网在线| 亚洲日本欧美日韩高观看| 亚洲欧美日韩精品久久亚洲区| 国产三级精品网站| 麻豆成人在线看| 国产精品视频一区二区高潮| 久操成人在线视频| 国产日韩视频在线观看| 日韩精品免费在线视频观看| 欧美香蕉大胸在线视频观看| 国产不卡在线观看| 日韩精品在线观看视频| 国产精品极品尤物在线观看| 亚洲欧美日韩精品久久| 久青草国产97香蕉在线视频| 色在人av网站天堂精品| 国产精品亚洲视频在线观看| 国产精品女人网站| 精品夜色国产国偷在线| 亚洲精品之草原avav久久| 国产mv免费观看入口亚洲| 在线观看亚洲区| 日韩中文字幕精品| 亚洲欧美国产一本综合首页| 日韩av色在线| 久久久久久久久国产| 91香蕉亚洲精品| 欧美日韩第一视频| 不用播放器成人网| 久久99热精品| 久久久久亚洲精品成人网小说| 亚洲成人久久久久| 国产精品日韩在线一区| 91欧美精品午夜性色福利在线| 欧美贵妇videos办公室| 日韩欧美国产视频| 国产福利精品av综合导导航| 国产成人精品日本亚洲| 久久这里有精品| 国产精品久久99久久| 中文字幕综合在线| 国产噜噜噜噜噜久久久久久久久| 亚洲欧美日韩中文在线制服| 国产在线观看精品| 国产精品igao视频| 国产精品亚洲一区二区三区| 日韩美女av在线免费观看| 久久人人爽人人爽爽久久| 欧美丝袜一区二区| 成人福利视频在线观看| 日韩有码在线电影| 欧美激情一区二区三区高清视频| 7777kkkk成人观看| 午夜精品一区二区三区在线| 欧美日韩在线视频首页| 亚洲性日韩精品一区二区|