銀座Rails#34 https://ginza-rails.connpass.com/event/211013/
技術部の外村(@hokaccha)です。今回はクックパッドのウェブサイトのフロントエンドを Next.js などを使って作り直している話を書きます。 この記事で紹介する新システムは、スマートフォン向けのレシピページで確認することができます。もし興味があるかたはレシピページをスマートフォンのユーザーエージェントで開いて DevTools などで確認してみてください。 Next.js と GraphQL で動いているのがわかると思います。 ご存じの方も多いかもしれませんが、クックパッドのウェブサイトはモノリシックな Rails で作られていて、10年以上 Rails で開発を続けてきました。10 年以上同じシステムで開発を重ねれば当然レガシーな部分が大量に生まれてきますが、特にフロントエンドはその影響が顕著でした。 どこから使われているかわからない CSS が大量にある、JS のコードは昔なが
(訳注:2016/3/2、頂いた翻訳フィードバックをもとに記事を修正いたしました。) Railsアプリでのキャッシングは、「たまに夕食を一緒にするけれど、本当はもっと頻繁に一緒にいるべき友達」に少し似ています。パフォーマンスをまじめに考えるRailsアプリのほぼ全てで、もっとキャッシングを使えるはずですが、ほとんどのRailsアプリでは、完全にキャッシングを避けています。それでも普通は、Railsで高速なサーバ応答を達成するための唯一の道は、キャッシングの知的な利用なのです。約250msの応答時間を、簡単に50~100msに高速化できます。 定義についての注意 ― この記事は、アプリケーション層のキャッシングのみを対象としています。HTTPキャッシング(これは全く別の難物で、あなたのアプリケーションに実装する必要はありません)は、別の機会で扱いましょう。 するべきキャッシングをしない理由
平素よりQA@ITをご利用いただき、誠にありがとうございます。 QA@ITは「質問や回答を『共有』し『編集』していくことでベストなQAを蓄積できる、ITエンジニアのための問題解決コミュニティー」として約7年間運営をしてきました。これまでサービスを続けることができたのは、QA@ITのコンセプトに共感をいただき、適切な質問や回答をお寄せいただいた皆さまのご支援があったからこそと考えております。重ねて御礼申し上げます。 しかしながら、エンジニアの情報入手方法の多様化やQAサービス市場の状況、@ITの今後のメディア運営方針などを検討した結果、2020年2月28日(金)15:00をもちましてQA@ITのサービスを終了することにしました。 これまでご利用をいただきました皆さまには残念なお知らせとなり、誠に心苦しく思っております。何とぞ、ご理解をいただけますと幸いです。 QA@ITの7年間で皆さまの知識
Railsの各種サーバーの速度ベンチマーク: Pound、Varnish、Nginx、Unicorn、Mongrel RailsのアプリをPound、Varnish、Nginx、Unicorn、Mongrelを使用して動かした際の速度ベンチマーク。以下の構成での同一Railsアプリをhttperfでベンチマークした結果をまとめます。 Pound -> Varnish -> Nginx -> Unicorn * 2 Varnish -> Nginx -> Unicorn * 2 Nginx -> Unicorn * 2 Mongrel (Rails.env == 'development') node.js (Express + Socket.IO) 全体の構成Poundを80番ポートを公開し、Varnishを81番ポート、nginxを8080番ポート、Unicornの2プロセスをsocke
先日のももクロハッカソンで出会った wantedly を作ってる仲さんが と言ってたので、面白そうなので wantedly を速くしてみました。 wantedly ちなみにデータが数百万オーダーもなさそうなのに、どのページもログインすると2-5秒ぐらいかかっていたので、確実に速くできそうだなぁという感覚はやる前からありました。 アプリケーションサイドのチューニング 初心者*1にありがちな問題として SQL に適切にインデックス張ってない キャッシュすべき場所をキャッシュしていない 無駄なデータを引きすぎてる ことがよくあります。ので順に実装を見ていきました。 SQLに適切なインデックスを張ってない 張ってありました!びっくり!\(^o^)/ キャッシュすべき場所をキャッシュしていない Facebook API を利用したアプリケーションなんですが、ユーザのデータの取得を毎回馬鹿正直に HT
Archives 2008年 5月 2008年 4月 2008年 3月 Category Amazon (2) Tips (7) Web API (1) Webサイト (1) エディタ (1) オープンソース (1) プラグイン (6) ホスティング/サーバ (1) 開発 (6) Meta ログイン RSS コメント RSS Valid XHTML XFN WP リンク MOONGIFT Open Service Cool Coding MOONGIFTブログ Resident of Net via En attendant Jérémie on Flickr - Photo Sharing! 今回、まともにキャッシュを使おうと思い始めたのですが、ある程度組み上げた段階でキャッシュを組み入れようとすると色々問題が起こることが分かりました。まず知識としては、Railsのキ
Rails Web アプリケーションをもっと速く こんなストーリーを考えてみます。 あなたは、Railsを学び、アプリケーションを作成し、サービスをインターネットに公開しました。しばらくすると、最初のユーザができます。あなたはとてもハッピーです。そうするうちにユーザが二人増え、十人になり、百人になりました。あなたはハッピーです、ユーザーもみんなハッピーです。 でも、ユーザが千人になり、一万人になり…。といった場合、何が起こるでしょうか? そこで起こるのはアプリケーションへの同時接続数増加によるサービス提供速度の低下です。ユーザ数が一万人を越えてしまうWebサーバに特有の問題は、C10K問題として知られています。 それでなくとも、残念ながらRailsは同様他種フレームワークと比べて、単位時間あたりの処理量が低いことで知られています。その理由は、RailsではRubyが遅くて、NativeTh
Yesterday I mentioned that ruby-prof now supports profiling rails applications. Lets see how that works. But a word of caution before beginning. Like all web applications, Rails apps are complex. They encompass many pieces – clients on remote machines, network connections, any number of application servers and database servers. Getting the whole ensemble to work can be tricky – let alone making it
先日、運用環境のRailsで動いているアプリのログからレスポンスタイムを確認する機会があって、production.logをもとに、時間がかかっている重い処理を抽出しました。ちなみにRailsのバージョンは2.1系です。 このエントリは、そのメモ書きです。どの処理が遅いのかを探し出すための最初の一歩ということで参考になれば。 Railsのログ Railsアプリをproductionモードで動かしていると、以下のようなログが各処理の最後で記録され、処理全体にかかった時間や、そのうちのレンダリング処理、DB処理の内訳なども確認できるようになっています。 Completed in 0.52340 (1 reqs/sec) | Rendering: 0.41524 (79%) | DB: 0.07341 (14%) | 200 OK [https://example.jp/hoge] 時間がかかっ
YSlowの記事の続きです。 実際に何らかのサイトにチューニングをかける手順と共に紹介した方が分かりやすいと思うので、このサイトを使ってチューニングしようと思います。 ちなみにApache2.x+mod_railsを使ってRailsを動かしているので、そこを念頭に置いたチューニングをかけていきます。 まず、いきなり否定的な話になりますが、全ての項目でAを取るのはかなり困難です。 たとえば、チェック項目2つ目の「Use a CDN」は、最低でも2つのサーバーを必要としますので、先立つものがないと難しいですし、ほとんどのチェック項目ではAPIなど、自分の管理下にないサーバーを使っている場合、手の出しようがない状態になります。 ですので、今回のチューニングは若干消極的ではありますが「Fの項目を少しでもなくす」を目標にしたいと思います。 1. Make fewer HTTP requests
● [Rails] Metal Rails edge に Metal という新しい機能が追加された。これは Rack を用いた高速な Controller であり、Rails の色んな機能は捨ててでも、兎に角、単純で速いレスポンスがどうしても必要だ!という局面ではもの凄い助けになるだろう。 http://github.com/rails/rails/commit/8c3a54366435eebc2c8aa63b63e1349ce74a7b38 作成 場所は app/metal。metal ジェネレータが用意されているので、controller と同じ感覚で使える。既存のコントローラ(top1)と速度比較をするので、こちらの名前はtop2にしてみる。 従来のコントローラ的思想でいけば top2_metal.rb が作成されそうなものだが、そうはなっていない。この辺あたりに Merb 臭が少し
● キャッシュ機能(caching) Railsには Page, Action, Fragment という3段階のキャッシュ機能が備わっている。tDiaryを使っていても思うが、修正よりも参照の方が圧倒的に多いコンテンツで毎回cgiで同じコンテンツを吐くのは無駄だなぁ。でもキャッシュを自分で用意するのは面倒だし、フレームワークかWebサーバがやってくれたらなぁ。Railsはそんなかゆい所にも手が届く、Web開発界の万能戦艦ノーチラス号なんです。 Page: アクション(CGI)の出力を丸ごとHTMLファイルとして保存し、静的コンテンツとして利用 Action: Pageと同じく全体を保存するが、コンテンツを表示する前に ActionController で filter 操作可能 Fragment: アクション全体の出力でなく、テンプレート描画の一部分のみをキャッシュ可能 caching
RailsでPageキャッシュをより広く活用する方法を考えてみました。以下、ちょっと長く前置きが続きます。 Rails遅杉 Railsは遅い。何が遅いって、Rubyが遅くてRoutingが遅くてRDBとRHTMLが遅い。RDBが遅いのは大抵のWebアプリケーションでは変わらない話、で、だからRailsなんかが評価される余地があるんだよね。RubyやRHTMLの遅さは柔軟性の代償として受け入れよう。なにしろRDBがもともと遅いんだから。ただ、Routingは無駄に高機能だったりして頭にくる。Rhino on RailsのSteve YeggeもRoutingは黒魔術だと言っていたし。私はActionPackの全てが黒魔術だと思うけど。 そういう訳で、RoutingをCで書き直すのはドリコムのみなさんがいつかやってくれると期待するとして(可能なら手伝いたいけどね)、当面の対応としてはキャッシュ
Railsは度々遅いということが話題に上がる。Ruby自体の性能もあるだろうが、データベースを富豪的に使っているのにも原因がある。便利であるためについついデータベースを多用していたり、データの取り出しを複雑(都度集計など)にしていないだろうか。 メイン画面 個人的な経験から言えばボトルネックになりがちなのはレンダリングとデータベースだ。このデータベースの問題点を洗い出すのに便利なのが、またしてもRailsアプリケーションだ。 今回紹介するフリーウェアはPalmist、RailsのMySQL実行履歴を見るソフトウェアだ。ソースはGithubで公開されているがライセンスは明記されていなかったので注意していただきたい。 Palmistは他のRailsアプリケーションのログファイルを読み取って、それを解析して表示してくれる。コントローラ、アクション、DBへのCRUDごとにリストアップしてくれる。実
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く