Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
DCL15秒の見れないサイトを3秒まで改善した話。改善継続中
Search
mahiguch
March 12, 2019
Programming
1.6k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
DCL15秒の見れないサイトを3秒まで改善した話。改善継続中
node学園33時限目LT資料です。
https://nodejs.connpass.com/event/122297/
mahiguch
March 12, 2019
More Decks by mahiguch
See All by mahiguch
爆速で成長する おでかけ情報サービスの成長を支えるデザインと開発の取り組みについて
mahiguch
0
80
WebView認証連携
mahiguch
0
87
メディアアプリLIMIAにおけるプッシュ通知配信システム
mahiguch
0
120
公式部活動技術書典部の活動紹介
mahiguch
0
140
エンジニア以外の方が自らSQLを使ってセグメント分析を行うカルチャーをどのように作っていったか
mahiguch
1
1.1k
PHPからgoへの移行で分かったこと
mahiguch
2
4.4k
BigQueryを使った機械学習プロジェクトの分析とオフライン検証
mahiguch
2
1.3k
gRPCを使ったメディアサービス2
mahiguch
0
250
LIMIAでのBigQuery活用事例
mahiguch
0
230
Other Decks in Programming
See All in Programming
エンジニア向け会社紹介/Findy Company Profile
findyinc
6
360k
act2-costs.pdf
sumedhbala
0
110
気圧・高度・GPSを記録&可視化するアプリ「Koudo」を作った話
hjmkth
1
350
【やさしく解説 設計編 #0】DDDのコード、読めるのに分からない人へ
panda728
PRO
2
260
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
370
symfony/aiとlaravel/boost
77web
0
120
SREは、MCPとSRE Agentをこう使え!
kazumax55
0
150
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
1
170
AI時代の仕事技芸論〜ソフトウェア開発で「遊ぶように働く」職人的熟達のすすめ(スクフェス仙台 2026バージョン)
kuranuki
0
620
エンジニアと一緒にテストコードの設計と実装を改善した話
mototakatsu
0
260
自作OSでスライド発表する
uyuki234
1
3.8k
任せる範囲はこう広がった / How the Scope of AI Delegation Has Expanded
nrslib
1
250
Featured
See All Featured
Music & Morning Musume
bryan
47
7.3k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.2k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
610
Side Projects
sachag
455
43k
Navigating Weather and Climate Data
rabernat
0
320
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Mobile First: as difficult as doing things right
swwweet
225
10k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3.7k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
480
First, design no harm
axbom
PRO
2
1.2k
Transcript
DCL15秒の見れないサイトを3秒 まで改善した話。改善継続中
Masahiro Higuchi / 樋口雅拓 • グリーグループのリミア株式会社で、LIMIA という住まい領域のメディアを 作っています。ゲーム会社ですが、最近はメディアに力を入れています。 • 機械学習のエンジニアですが、iOS,
Android,JSなどもやっている何でも屋 です。4歳の娘のパパ。 • twitter: @mahiguch1, github: @mahiguch • https://limia.jp/ • https://arine.jp/ • https://aumo.jp/ • https://moguna.com/ • https://www.mine-3m.com/mine/
背景と目的みたいなもの • 3年前LIMIA Web https://limia.jp/ をリリース。 • 最初1年間機能追加を行い、その後放置してアプリを作っていた。 • 久しぶりにWebを確認したら、DOM
Content Loadedが15秒。orz → これを3秒まで改善した試行錯誤を共有します。 というか、凄く辛かったので、誰か聞いて欲しい!
LIMIAとは 社内外の記者およびユーザーが投稿した記事 を読めるサービスです。記事は住まい暮らしに 関連するものです。機能としては、 • 記事の一覧表示 • 記事を閲覧、投稿、検索できる • 写真を閲覧、投稿、検索できる
• ユーザーページで設定、投稿管理 • ログインしていいね、フォロー • タイムライン、コンテスト、お知らせ よくあるメディアの機能の全部のせです。
どんな状態か • TypeScript: 記事投稿画面、写真投稿画面、ユーザ設定編集画面など編 集画面内での操作 • React: 記事にリンクを強制追加、全文検索サジェストなどちょっとした動作 • これらをwebpackでまとめている
• 広告タグはHTMLテンプレートにベタ書き → タスクを担当した人の意見を尊重。統一感はない。
どれだけ遅かったか • DCL15秒だった。 • 遅すぎて広告が表示さ れなくなった。 • 応急処置として簡単に 直せる所を洗い出して1 回目の対応開始
1回目に行なった対策: scriptタグ数削減 scriptタグが見つかるたびに、レンダリング処理が止まる。それを防ぐため、 scriptタグをまとめることでレンダリング完了までの時間を短縮します。 <script>...</script> … <script>...</script> … <script> …
</script> → <script> ………………………………………… </script>
1回目に行なった対策: 3rd party jsの非同期読み込み Scriptタグの後ろにasyncと書くと非同期読み込みをしてくれる。その場所で実行必須なもの以外は、非同期読み込みし てしまった方が良い。つまり、全ての3rd partyスクリプトを非同期にしてしまって良さそう。 非同期のさせかた <script src="app.js"
async></script> パッと調べた限り、jenieeは同期処理していた。adxが出ないでjenieeだけ出ていた理由はこれ。 <script type="text/javascript" src="https://js.mediams.mb.softbank.jp/t/328/617/a1328617.js"></script> これをasyncにする。
1回目に行なった対策: CSSのpreload s.limia.jpからのjs/cssのdownloadをrel="preload"を付けて先読みさせることで、高速化を行う。Chromeデベロッパー ツールのAuditsタブで検知。 先読みのさせかた <link rel="preload" href="style.css" as="style"> 対象箇所例
<link rel="stylesheet" href="//s.limia.jp/assets/css/common-256c8f20a7b999bcc048ab1e.css" media="all"> <link rel="stylesheet" href="//s.limia.jp/assets/css/main-pc-6669f7268689600cc942b763.css" media="all">
1回目に行なった対策: アセットCDN配信 これがCDN(s.limia.jp)に乗っていない。 FAILED - https://limia.jp/manifest.json FAILED - https://limia.jp/launcher-icon-192x192.png limia.jpをs.limia.jpに変更することにより、CDNから配信します。
これにより、速度改善だけでなく、サーバ負荷削減効果が見込めます。
1回目に行なった対策: 画像容量削減 無駄に大きな画像を取得している部分 が多かったので、そこを適切なサイズ の画像を使うようにした。 SP記事詳細画像を800x800(116KB) から640x265(62KB)に変更。
どれだけ早くなったか この(1)の部分だけ。 5%ぐらい?
2回目に行なった対策: Nodejsの バージョンアップ WebWorkerの利用などちゃんとした対策を検討。 本格的に取り掛かる前に準備として、Node.js, gulp, TypeScriptのバージョンを上げた。 • Node.js: v6.14.1
→ v10.14.2 • gulp: v3.9.1 → v4.0.0 • TypeScript: v2.2.2 → v3.2.2 "gulp": "^3.9.1", ---> 4.0.0 "gulp-concat": "^2.6.0", ---> 2.6.1 "gulp-consolidate": "^0.1.2", ---> 0.2.0 "gulp-eslint": "^3.0.1", ---> 5.0.0 "gulp-if": "^2.0.0", ---> 2.0.2 "gulp-rename": "^1.2.2", ---> 1.4.0 "gulp-rev": "^5.0.1", ---> 9.0.0 "gulp-rev-replace": "^0.4.3", ---> 0.4.4 "gulp-sourcemaps": "2.6.0", ---> 2.6.4 "gulp-tslint": "^2.0.0", ---> 8.1.3 "gulp-twig": "^0.3.0", ---> 1.2.0 "gulp-typescript": "3.1.6", ---> 5.0.0 "gulp-uglify": "^1.2.0", ---> 3.0.1 "gulp-unassert": "^1.0.0", ---> 1.1.0 "gulp-changed": "^3.1.1", ---> 3.2.0 "gulp-iconfont": "^8.0.1", ---> 10.0.2 "gulp-imagemin": "^3.1.1", ---> 5.0.3 "gulp-sketch": "^0.1.0", ---> 1.0.5 "gulp.spritesmith": "^4.0.0", ---> 6.9.0
どれだけ早くなったか この(2)の部分。 めっちゃ早くなってる! TypeScriptは効率改善して そうだけど、ここまで?node とgulpについては影響して いるかどうかすら分からな い。。。
3回目に行なった対策: ReactとWebPackのバージョ ンアップ それならReactとWebPackもバージョンアップしたら早くなるのでは? • React: v15.6.2 → v16.7.0 •
WebPack: v1.14.0 → v4.29.0
どれだけ早くなったか この(3)の部分。 めっちゃ早くなってる! WebPackってこんなに進化 してたんだ。。。
今後の改善予定 1から3月期の残タスク • FirstViewのレンダリングに関係ないスクリプトをDCL後に読み込ませるよ うにする。 • DOMアクセスが不要な処理をWebWokerで行うようにする。 • setTimeout または
setInterval を使用するのを避けて、できる限り requestAnimationFrame を使用するようにする。 3秒でもまだ遅いので、3ヶ月スプリントでPDCAを回して改善中!
まとめ • DCL 15秒のサイトを3秒まで改善した • Node.js自体もmoduleもバージョンアップは速度改善に効果的! • 3秒でもまだまだ遅いので改善継続中。 • なぜnode.js、gulp、TypeScriptのバージョンアップだけでここまで速くなっ
たのか理解できていない。もしお気づきの点があれば声をかけていただけ ると助かります。 ご清聴、ありがとうございました!