Submit Search
Upload
Vue.js 2.0 で自社プロダクトを SPA + SSR 化した話
•
15 likes
•
21,291 views
Yutaro Miyazaki
Follow
2017.05.27 の 初夏の JavaScript 祭 in mixi でお話した時のスライドです。
Read less
Read more
Technology
Report
Share
Report
Share
1 of 64
Download now
Download to read offline
Recommended
ライオンでも分かるVuejs
ライオンでも分かるVuejs
lion-man
React Redux Redux-Saga + サーバサイドレンダリング
React Redux Redux-Saga + サーバサイドレンダリング
エンジニア勉強会 エスキュービズム
React系(別言語含む)の サーバーサイドレンダリング について考えよう
React系(別言語含む)の サーバーサイドレンダリング について考えよう
Kazuhiro Hara
Node.jsで始める Modern JavaScript Framework
Node.jsで始める Modern JavaScript Framework
kamiyam .
Hello, Node.js
Hello, Node.js
Shin Sekaryo
RailsでReact.jsを動かしてみた話
RailsでReact.jsを動かしてみた話
yoshioka_cb
MySQL Fabricつらい
MySQL Fabricつらい
yoku0825
大阪Node学園 七時限目 「ゼロからはじめるnode.js」
大阪Node学園 七時限目 「ゼロからはじめるnode.js」
Shunsuke Watanabe
Recommended
ライオンでも分かるVuejs
ライオンでも分かるVuejs
lion-man
React Redux Redux-Saga + サーバサイドレンダリング
React Redux Redux-Saga + サーバサイドレンダリング
エンジニア勉強会 エスキュービズム
React系(別言語含む)の サーバーサイドレンダリング について考えよう
React系(別言語含む)の サーバーサイドレンダリング について考えよう
Kazuhiro Hara
Node.jsで始める Modern JavaScript Framework
Node.jsで始める Modern JavaScript Framework
kamiyam .
Hello, Node.js
Hello, Node.js
Shin Sekaryo
RailsでReact.jsを動かしてみた話
RailsでReact.jsを動かしてみた話
yoshioka_cb
MySQL Fabricつらい
MySQL Fabricつらい
yoku0825
大阪Node学園 七時限目 「ゼロからはじめるnode.js」
大阪Node学園 七時限目 「ゼロからはじめるnode.js」
Shunsuke Watanabe
Node.js Hands-On
Node.js Hands-On
Akinari Tsugo
Node.jsではじめるサーバ構築
Node.jsではじめるサーバ構築
AimingStudy
jQueryを中心としたJavaScript
jQueryを中心としたJavaScript
hideaki honda
Node.js で Web アプリ開発
Node.js で Web アプリ開発
Tatsumi Naganuma
Sails.jsのメリット・デメリット
Sails.jsのメリット・デメリット
Ito Kohta
いまさら聞けない!?Backbone.js 超入門
いまさら聞けない!?Backbone.js 超入門
Kohei Kadowaki
React.js + Reduxで作るSPA
React.js + Reduxで作るSPA
Shohei Saeki
Rubyで始めるWebスクレイピング
Rubyで始めるWebスクレイピング
Takuro Sasaki
Nodeにしましょう
Nodeにしましょう
Yuzo Hebishima
Node.jsに縁のない職場でnode.jsを使い始める戦術
Node.jsに縁のない職場でnode.jsを使い始める戦術
Isamu Suzuki
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
Kohei Asai
ReactをRailsとどっぷり使ってみた話と、フロントエンド×AWSのこれから
ReactをRailsとどっぷり使ってみた話と、フロントエンド×AWSのこれから
Yusuke Murata
Node.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないとき
Ryunosuke SATO
Capybaraで雑にWebスクレイピング
Capybaraで雑にWebスクレイピング
Koji Nakamura
なぜ人は必死でjQueryを捨てようとしているのか
なぜ人は必死でjQueryを捨てようとしているのか
Yoichi Toyota
React + FLUX + Redux + Redux Saga のお話
React + FLUX + Redux + Redux Saga のお話
Shinichiro Yoshida
Node js 入門
Node js 入門
Satoshi Takami
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
Kazuhiro Hara
Google Web Toolkit(GWT)入門
Google Web Toolkit(GWT)入門
Yuki Naotori
One Time Binding & Digest Loop
One Time Binding & Digest Loop
Kon Yuichi
我が家のフロントエンド開発事情
我が家のフロントエンド開発事情
Naoki Yamada
Riot.jsを用いたweb開発 takusuta tech conf #1
Riot.jsを用いたweb開発 takusuta tech conf #1
Keisuke Imai
More Related Content
What's hot
Node.js Hands-On
Node.js Hands-On
Akinari Tsugo
Node.jsではじめるサーバ構築
Node.jsではじめるサーバ構築
AimingStudy
jQueryを中心としたJavaScript
jQueryを中心としたJavaScript
hideaki honda
Node.js で Web アプリ開発
Node.js で Web アプリ開発
Tatsumi Naganuma
Sails.jsのメリット・デメリット
Sails.jsのメリット・デメリット
Ito Kohta
いまさら聞けない!?Backbone.js 超入門
いまさら聞けない!?Backbone.js 超入門
Kohei Kadowaki
React.js + Reduxで作るSPA
React.js + Reduxで作るSPA
Shohei Saeki
Rubyで始めるWebスクレイピング
Rubyで始めるWebスクレイピング
Takuro Sasaki
Nodeにしましょう
Nodeにしましょう
Yuzo Hebishima
Node.jsに縁のない職場でnode.jsを使い始める戦術
Node.jsに縁のない職場でnode.jsを使い始める戦術
Isamu Suzuki
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
Kohei Asai
ReactをRailsとどっぷり使ってみた話と、フロントエンド×AWSのこれから
ReactをRailsとどっぷり使ってみた話と、フロントエンド×AWSのこれから
Yusuke Murata
Node.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないとき
Ryunosuke SATO
Capybaraで雑にWebスクレイピング
Capybaraで雑にWebスクレイピング
Koji Nakamura
なぜ人は必死でjQueryを捨てようとしているのか
なぜ人は必死でjQueryを捨てようとしているのか
Yoichi Toyota
React + FLUX + Redux + Redux Saga のお話
React + FLUX + Redux + Redux Saga のお話
Shinichiro Yoshida
Node js 入門
Node js 入門
Satoshi Takami
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
Kazuhiro Hara
Google Web Toolkit(GWT)入門
Google Web Toolkit(GWT)入門
Yuki Naotori
One Time Binding & Digest Loop
One Time Binding & Digest Loop
Kon Yuichi
What's hot
(20)
Node.js Hands-On
Node.js Hands-On
Node.jsではじめるサーバ構築
Node.jsではじめるサーバ構築
jQueryを中心としたJavaScript
jQueryを中心としたJavaScript
Node.js で Web アプリ開発
Node.js で Web アプリ開発
Sails.jsのメリット・デメリット
Sails.jsのメリット・デメリット
いまさら聞けない!?Backbone.js 超入門
いまさら聞けない!?Backbone.js 超入門
React.js + Reduxで作るSPA
React.js + Reduxで作るSPA
Rubyで始めるWebスクレイピング
Rubyで始めるWebスクレイピング
Nodeにしましょう
Nodeにしましょう
Node.jsに縁のない職場でnode.jsを使い始める戦術
Node.jsに縁のない職場でnode.jsを使い始める戦術
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
ReactをRailsとどっぷり使ってみた話と、フロントエンド×AWSのこれから
ReactをRailsとどっぷり使ってみた話と、フロントエンド×AWSのこれから
Node.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないとき
Capybaraで雑にWebスクレイピング
Capybaraで雑にWebスクレイピング
なぜ人は必死でjQueryを捨てようとしているのか
なぜ人は必死でjQueryを捨てようとしているのか
React + FLUX + Redux + Redux Saga のお話
React + FLUX + Redux + Redux Saga のお話
Node js 入門
Node js 入門
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
Google Web Toolkit(GWT)入門
Google Web Toolkit(GWT)入門
One Time Binding & Digest Loop
One Time Binding & Digest Loop
Similar to Vue.js 2.0 で自社プロダクトを SPA + SSR 化した話
我が家のフロントエンド開発事情
我が家のフロントエンド開発事情
Naoki Yamada
Riot.jsを用いたweb開発 takusuta tech conf #1
Riot.jsを用いたweb開発 takusuta tech conf #1
Keisuke Imai
【Web TECH FORUM 2017 in大阪】Webシステム開発とJavaScript UIコンポーネント
【Web TECH FORUM 2017 in大阪】Webシステム開発とJavaScript UIコンポーネント
Developer Solutions事業部 メシウス株式会社 (旧グレープシティ株式会社)
Service workerとwebプッシュ通知
Service workerとwebプッシュ通知
zaru sakuraba
AngularJS x Chrome Apps (2014.08.23 #gdgkobe event)
AngularJS x Chrome Apps (2014.08.23 #gdgkobe event)
pinmarch_t Tada
第12回rest勉強会 これまでの補足・展望編
第12回rest勉強会 これまでの補足・展望編
ksimoji
Nuxt.js入門 2018/02/02 Vue.js入門勉強会@渋谷 発表資料
Nuxt.js入門 2018/02/02 Vue.js入門勉強会@渋谷 発表資料
慎二 山田
React.js + Flux
React.js + Flux
dsuke Takaoka
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
WESEEKWESEEK
Vue.js Outline
Vue.js Outline
Kei Yagi
Web開発初心者がReactをチームに導入して半年経った
Web開発初心者がReactをチームに導入して半年経った
kazuki matsumura
Interoperability of webassembly with javascript
Interoperability of webassembly with javascript
Takao Tetsuro
JavaScript(AngularJS・React.js)で作る iOS・Androidアプリハンズオン
JavaScript(AngularJS・React.js)で作る iOS・Androidアプリハンズオン
Kazuhiro Yoshimoto
アメブロ2016 アメブロフロント刷新にみる ひかりとつらみ
アメブロ2016 アメブロフロント刷新にみる ひかりとつらみ
Kazunari Hara
なるほどわかった!App Service on Linux
なるほどわかった!App Service on Linux
Yasuaki Matsuda
フロントエンド技術の変遷
フロントエンド技術の変遷
Ryo Higashigawa
React.jsでサービスを作ってみた話
React.jsでサービスを作ってみた話
GIG inc.
React.js・ReactNative・Redux入門
React.js・ReactNative・Redux入門
Kazuhiro Yoshimoto
Web Component Framework Urushiのご紹介(OSC2017 Tokyo/Spring)
Web Component Framework Urushiのご紹介(OSC2017 Tokyo/Spring)
YuzoHirakawa
Vue Fes Japan 2018 LINE株式会社 LunchスポンサーLT
Vue Fes Japan 2018 LINE株式会社 LunchスポンサーLT
LINE Corporation
Similar to Vue.js 2.0 で自社プロダクトを SPA + SSR 化した話
(20)
我が家のフロントエンド開発事情
我が家のフロントエンド開発事情
Riot.jsを用いたweb開発 takusuta tech conf #1
Riot.jsを用いたweb開発 takusuta tech conf #1
【Web TECH FORUM 2017 in大阪】Webシステム開発とJavaScript UIコンポーネント
【Web TECH FORUM 2017 in大阪】Webシステム開発とJavaScript UIコンポーネント
Service workerとwebプッシュ通知
Service workerとwebプッシュ通知
AngularJS x Chrome Apps (2014.08.23 #gdgkobe event)
AngularJS x Chrome Apps (2014.08.23 #gdgkobe event)
第12回rest勉強会 これまでの補足・展望編
第12回rest勉強会 これまでの補足・展望編
Nuxt.js入門 2018/02/02 Vue.js入門勉強会@渋谷 発表資料
Nuxt.js入門 2018/02/02 Vue.js入門勉強会@渋谷 発表資料
React.js + Flux
React.js + Flux
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
Vue.js Outline
Vue.js Outline
Web開発初心者がReactをチームに導入して半年経った
Web開発初心者がReactをチームに導入して半年経った
Interoperability of webassembly with javascript
Interoperability of webassembly with javascript
JavaScript(AngularJS・React.js)で作る iOS・Androidアプリハンズオン
JavaScript(AngularJS・React.js)で作る iOS・Androidアプリハンズオン
アメブロ2016 アメブロフロント刷新にみる ひかりとつらみ
アメブロ2016 アメブロフロント刷新にみる ひかりとつらみ
なるほどわかった!App Service on Linux
なるほどわかった!App Service on Linux
フロントエンド技術の変遷
フロントエンド技術の変遷
React.jsでサービスを作ってみた話
React.jsでサービスを作ってみた話
React.js・ReactNative・Redux入門
React.js・ReactNative・Redux入門
Web Component Framework Urushiのご紹介(OSC2017 Tokyo/Spring)
Web Component Framework Urushiのご紹介(OSC2017 Tokyo/Spring)
Vue Fes Japan 2018 LINE株式会社 LunchスポンサーLT
Vue Fes Japan 2018 LINE株式会社 LunchスポンサーLT
Recently uploaded
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
Hiroshi Tomioka
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
sugiuralab
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Hiroki Ichikura
Recently uploaded
(9)
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Vue.js 2.0 で自社プロダクトを SPA + SSR 化した話
1.
初夏のJavaScript 祭in mixi Vue.js
2.0 で自社プロダクトを SPA + SSR 化した話
2.
Yutaro Miyazaki (@vwxyutarooo) ニート↓ フリーランス(Web制作)↓ アプリ屋のWeb(フロントエンド)
3.
4.
今日話すこと 導入してみてどうだった?ってとこ 地味に困ったこと
5.
今日話さないこと Vue.jsSSRのしくみ、ロジックなど 他フレームワークとの比較
6.
サービスの概要 マンガ無料配信サービス アプリを主軸に展開しているサービス Webでもコンテンツを活かそう
7.
8.
リニューアルと導入の背景 Web経験者無しでv1を作ってしまった イケてない
9.
Webでももっとこう アプリっぽい体験できないですかね
10.
v1:Riotでページ毎にマウント →SPA クライアントレンダリング →SSR(SEOほんとにいいのか?) Vue.jsの評判がいい どっかの調査で満足度1位
11.
構成 (全体)
12.
構成 (Web)
13.
前提知識
14.
vuejs/vue‑hackernews‑2.0 公式が作るSPA+SSRプロジェクト https://github.com/vuejs/vue‑hackernews‑2.0
15.
Webpack の例 https://ssr.vuejs.org
16.
地味に悩んだポイント集
17.
SSRは誰がやる? 404ハンドリング デバイス切り替えってどうする? 共通処理どうする? メタタグの管理めんどいやりたくない Analyticsどうしよう? 広告 メモリリーク
18.
Q: SSR は誰がやる?
19.
バックエンドからもJSが起動できる go go‑duktape goja+goja‑node
20.
素直にExpressから起動することに
21.
Q: 404 ハンドリング
22.
vue‑hackernews2では ルータ設定にマッチするページが見つからなければ Expressが404返すようになってる
23.
if (err &&
err.code === 404) { res.status(404).end('404 | Page Not Found') }
24.
404ページのデザイン欲しい // router.js [ { path:
'/', name: 'top', component: top }, ... { path: '*', name: 'not-found', component: notFound } ]
25.
// server.js const termRoute
= (context.state.route.name === 'not-found'); if (termRoute) res.status(404);
26.
ルータにマッチするけど404の時は? // router.js { path:
'/comics/tag/:id', name: 'tag-archive', component: tagArchive },
27.
APIリクエスト時に、メインクエリを設定 // preFetch const options
= { isMainQuery: (key === mainQueryKey) }
28.
メインクエリのAPIレスポンスが 200じゃなかったらstateにエラーをセット // action.js if (result.status
=== 200) { commit(mutation, { key, result: result.data }); } else if (options.isMainQuery) { commit(types.SET_STATUS, { key: type, value: {} }); commit(types.SET_STATUS, { key: 'error', value: result.status // 404 }); }
29.
Expressサーバで、コンテキストを通じて stateのエラーからステータスを打つ // server.js const termState
= (context.state.error); // 404 | 50x if (termState) res.status(context.state.error);
30.
ちょっとイケてないけど 対象Viewコンポーネント内でnotfoundを表示させた <div :key="`tag-archives-${id}-${currentPage}`"> <div v-if="isLoading"
class="l-root"> <screen-spinner></screen-spinner> </div> <content-not-found v-else-if="status === 404"></content-not-found> <template v-else="v-else"> ... </template> </div>
31.
Q: デバイス切り替えってどうする?
32.
PC/SP用エントリーポイントをそれぞれ用意 // webpack.config.client.js entry: { 'polyfills':
[path.join(..., 'app/entry/polyfills.js')], 'vendor': [path.join(..., 'app/entry/vendor.js')], 'app.pc': [path.join(..., 'app/entry/pc/client-entry.js')], 'app.sp': [path.join(..., 'app/entry/sp/client-entry.js')] }, // webpack.config.server.js entry: { 'server-bundle.pc': path.join(..., 'app/entry/pc/server-entry.js'), 'server-bundle.sp': path.join(..., 'app/entry/sp/server-entry.js') }
33.
テンプレートも2つ // webpack.config.client.js new HTMLPlugin({ template:
path.join(..., 'templates/pc.html'), filename: 'index.pc.html', excludeChunks: ['app.sp'] }), new HTMLPlugin({ template: path.join(..., 'templates/sp.html'), filename: 'index.sp.html', excludeChunks: ['app.pc'] }),
34.
createRendererでレンダラを2つ作成 // server.js const bundle
= { pc: fs.readFileSync(resolve('./dist/js/server-bundle.pc.js'), 'utf-8'), sp: fs.readFileSync(resolve('./dist/js/server-bundle.sp.js'), 'utf-8') } const template = { pc: fs.readFileSync(resolve('./dist/index.pc.html'), 'utf-8'), sp: fs.readFileSync(resolve('./dist/index.sp.html'), 'utf-8') } renderer = { pc: createRenderer(bundle.pc, template.pc), sp: createRenderer(bundle.sp, template.sp) };
35.
ExpressでUA判定して起動するレンダラを切り替え // server.js const useragent
= require('express-useragent'); ... app.use(useragent.express()); app.get('*', (req, res) => { ... const device = (req.useragent.isMobile) ? 'sp' : 'pc'; ... renderer[device].renderToStream(context)... }
36.
2.3.0からcreateRenderer にバンドル突っ込むのは非推奨に...
37.
別の方法を考え中
38.
Serverバンドルはエントリーポイント分けず contextにデバイス情報渡して切り替えるのもありか?
39.
Q: 共通処理どうする?
40.
vuejs/vue-class-component もともとTypeScriptで書けるようにするため Classでコンポーネントを定義できる 継承は非対応だが、Decoratorと組み合わせる
41.
import Vue from
'vue' import Component from 'vue-class-component' @Component({ props: { propMessage: String } }) export default class App extends Vue { // initial data msg = 123 // use prop values for initial data helloMsg = 'Hello, ' + this.propMessage // lifecycle hook mounted () { this.greet() } ... }
42.
import { createDecorator
} from 'vue-class-component'; export const Options = createDecorator((options) => { Object.assign(options, { ... watch: { // call again the method if the route changes '$route': 'routeUpdated' } }; });
43.
使い方は君しだい!
44.
Q: メタタグの管理めんどいやりたくない
45.
declandewet/vue-meta
46.
export default { name:
'App', metaInfo: { title: METAINFO.title, titleTemplate: METAINFO.titleTemplate, meta: [ { vmid: 'og:title', name: 'og:title', content: METAINFO.title }, { vmid: 'description', name: 'description', content: METAINFO.description } ... ] } }
47.
コンポーネントの深いやつが勝つ 全コンポーネント検査してるからパフォーマンスは疑問 SSR対応(Vueの公式にも例あり)
48.
Q: Analytics どうしよう?
49.
WebAnalytics:MatteoGabriele/vue-analytics AppAnalytics:ScreamZ/vue-analytics
50.
routerとくっつけて自動でPV|SV送れる
51.
Q: 広告
52.
GoogleAdsenseはSPA非対応
53.
ページのリフレッシュ無しに広告を打ち直すことは禁止 impが絶望的 GoogleAdsense以外のSSP等広告運用が必須
54.
Q: メモリリーク
55.
起こしてた
56.
1日でメモリを食い尽くし ガベージコレクション走りまくり、CPU回りまくり APIキャッシュ周りが原因 最新のVuehackernewsでは直ってる
57.
所感
58.
SSR の実装はそれほど大変ではないのかも 普通にSPAを作る+ちょっとの手間でいい メタタグとかアプリケーション側で扱いたいからついでに SSRしちゃってたり
59.
まあまあ安定稼働もする CPUはそこそこ回るためページキャッシュを併用 コンポーネントキャッシュは考えて設計すべし 状態変化によるケースやslotが多いと効果的ではないかも?
60.
KPI 的には PV/セッション上がり 滞在時間は平行 回遊しやすくなってるって思いたい なんか下がることはなかった
61.
まとめ あり SEO対策としてだけやるなら要らない メタタグさえサーバ側で作れていれば 堅いこと言わずに作ってみようぜ
62.
Vue.js 楽しいな! おい!!
63.
64.
ありがとうございました!
Download now