Heroku
HerokuDay 16

Herokuって本当に遅いんですか?

よく聞くやつ

Q: Heroku遅くない?
A: 場合による!

  • 場合1. リージョンばらばら
  • 場合2. dynoがsleepしている
  • 場合3. 適切なCDNを利用していない
  • 場合4. そもそもアプリケーションレベルで遅い
  • 場合5. 正しく設定されていない

Q: AWSだったら〜〜〜
A: じゃあAWSを使うといいのでは??!?!??!?!?

そらAWSでちゃんとできるならしたらいいと思うんですよ、PaaS使う動機はそれぞれですので……。
でもまあ多少手は打てると思うのでちょっとだけ紹介します。

ちなみにHerokuの日本のユーザーグループというのがあって(ぐぐって)、そこで聞いた話が多分に含まれます。運営をほんのちょっと手伝ったりしているぞ。

APリージョンがないからァ〜レイテンシがァ〜

Private Spacesを使うと日本リージョンにできます。
詳しいことは相澤さんの記事を参照

https://qiita.com/ayumin/items/dbd3d7e5093bfec676f6

ただ、個人利用はだいたいFreeの範囲内とか、ちょっとdynoにお金払う程度かと思うのでそこまでしてPrivate Spaces使うか?というのもある。結構高いと聞きます。そもそもクレカすら登録したくない人もいると聞くぞ。
もしPSを使う英断をしたとして、AddonsがPS対応していないとそこのレイテンシが激しくなっちゃうので、使いたいAddonsが対応しているかは見ておいたほうが良いと思います。
うっかりPS dynoにふつうのPGやRedisをattachするとめちゃくちゃ遅くてウケるという話があります。

実際PS使わずに本番運用している日本の企業の中の人にお話をうかがいましたが、Amazon RDSをVirginiaリージョンにしてるというような話もありましたので、速度のためにPS選ぶかっつったら微妙なところですね。
日本にサーバがないとダメ〜的な制限があるやつなら仕方ないと思いますが、まあ、やっていきたい方はやっていきましょう。

CDNないの?

みんな大好き Fastly Addon
USD25.00〜となってるので個人利用では手が出ないかも?
話題になったdev.toもHeroku + Fastly構成です。
この記事が詳しいですね

https://qiita.com/saboyutaka/items/1f528ec3ce85476d7561

上のレイテンシの話もエッジサーバ配信になればだいぶ速度上がりますね。

画像などのアセットファイルは Cloudinary Addon があります。
わりと何でもアップロードできるので画像にかぎらず使えるし、Starterは無料なので試してみてもいいかも。

HTTP2対応しています。
transformationというサイズや形式を指定してリクエストすると変形させたものを返してくれる機能もあります。
もちろんwebpも使えますが、png/jpgファイルをwebpとしてリクエストしたら変換みたいな機能はありません。(つけてくれ!)
妙に管理画面のフォントがダサいことでも知られています。

たまにめっちゃ遅いんだけど〜〜???????

dynoがsleepしているのでは?!??!!?
Free Dyno Hours - Dyno sleeping

If an app has a web dyno, and that web dyno receives no traffic in a 30 minute period, the web dyno will sleep. In addition to the web dyno sleeping, the worker dyno (if present) will also sleep.

web dynoは30分以上トラフィックがないとsleepしてしまうんですが、これが起きるのが結構時間かかるんですね。
30分感覚で眠らないようにアクセスしてあげるみたいなのやってる人もいますが、どうしても無料でやりたかったらそれもあり。

Heroku Free DynoのSleepを防止する

なんとなくもっさりしている気がする!Herokuが遅いせいだ!

一般論として、
dynoのパワ〜足りてますか?
PageSpeedInsightsを使って検証しましたか?
広告のトラッキングタグめちゃくちゃ入れていませんか?
効率的なキャッシュ戦略をとっていますか?

アプリケーション側はNew RelicがAddonsにあるのでそれで追っかけてもいいと思います。
RedisやmemcachedのAddonsもあります。

で、Heroku特有の話として、web dynoのbuildpackにもよると思うんですが、gzip転送がデフォルトで有効になってないのでそこは気をつけましょう。これは最近気づいて慌てて.htaccessに書き足した。
あとHerokuはたしかまだHTTP2対応してないです、中の人よろしくお願いします!

で、遅いの?

まあ爆速にしたいなら努力はいると思います
とはいえPaaSとしてサクサク開発できるとは思うので、どこに力をいれるかが明確になりやすいみたいな話でしょうかね。
ふつうのユーザ向けに日本リージョンの開放はまだないし今後もびみょうな気がする(中の人ではない個人の意見です)ので、どうしてもそこが受け入れられないなら諦めましょうネ……