Upgrade to Pro — share decks privately, control downloads, hide ads and more …

未学習領域におけるチーム{学習,プレイ}とは /au Web portal frontend,...

未学習領域におけるチーム{学習,プレイ}とは /au Web portal frontend, BIT VALLEY -INSIDE- Vol.8

au Web ポータルにおけるフロントエンドの取り組み。
チーム学習とは、チームプレイとは。

Satoshi Takeda

April 17, 2019
Tweet

More Decks by Satoshi Takeda

Other Decks in Programming

Transcript

  1. Who { { "name" "name" : : " 武田 諭"

    " 武田 諭", , "social" "social": : "@tkdn" "@tkdn", , "from" "from" : : " 株式会社 mediba" " 株式会社 mediba", , "dept" "dept" : : "CD 本部創造開発部/ものづくり推進部" "CD 本部創造開発部/ものづくり推進部", , "work" "work" : : " フロントエンドエンジニア" " フロントエンドエンジニア", , "word" "word" : : " ブラウザが主戦場" " ブラウザが主戦場" } }
  2. Who 1980 年生まれ, 38 歳 2003 ~2013 俳優業 2013 ~2017

    エンジニア転向、受託開発など 2017 ~ mediba, 入社2 年目
  3. From Server-Side: Yii Framework (PHP ) Front-End: jQuery, Backbone.js Server:

    apache, and other middlewares Infra: self-uncontrollable な環境
  4. To ✏ : TypeScript TypeScript : Next.js Next.js ⚛ :

    React/Redux React/Redux, w/ reselect, redux-thunk : express express : graphql-yoga graphql-yoga, express-based Infra: AWS へ移管, ECR + ECS/Fargate...
  5. 初手 : とにかく伝搬 自ら吸収したものをとにかく伝搬しまくる ドキュメントを和訳して Slack で展開 => 届け、誰かに PoC

    を実装, コードで展開 => 読んで、コードを 突然あらわれるライフサイクルメソッドおじさん ※ React 16.3~ lifecycle method が deprecated になるタイミング => ついてきてー
  6. 静的なコンポーネントから Atomic Design で構成したコンポーネント tsx を静的に実装 Props, ローカル State の型付け,

    interface の規約などを作り慣れていった 序盤で TSLint ルール整備 pre-commit hook によりコードの一貫性は最初から保てた
  7. 広義の FE チーム内でペアプロをする利点 得意なフィールドによって交代できる 得意なフィールドであれば検索能力も高く 参考資料として Slack にURL 貼り付け GraphQL

    側の Logic って? Resolver って? 違うフィールドへの理解を深められるメリット 適宜交代することで得られるスピード感もある
  8. いつ violation が出る? ユーザイベント(click, touchend, scroll... )によるハンドラ実行完 了まで時間がかかった JavaScript 実行時に強制的に

    re ow が走った document.write を使用した イベントに対して非効率なハンドラのアタッチが行われた ... etc
  9. マズそうなコンポーネントを洗い出し 適宜 React.memo 化、ムダなアップデート抑止 shouldComponentUpdate で適切にアップデートを抑止 onClick に arrow-function をそのまま渡していないか(

    tslint-react: jsx- no-lambda rule ) shallow equal の比較よりも FC で再レンダリングした方がコストが低い場 合があるので注意 ... etc
  10. 何が問題だったか React.hydrate によるイベントへのアタッチ、クライアントで必要な Fetch に時間がかかり UI が遅延 それらと広告 3rd party

    スクリプトとの共存においてどうしてもクライア ントサイドのパフォーマンスを上げられなかった
  11. TTFB の向上 => CDN に Akamai を選択 FirstPaint FCP/FMP ともに向上

    => React SSR TimeToInteractive の低下 => アタッチ, Fetch による UI 遅延 e.g. タブ遷移
  12. 身内自慢 DataStudio とGAS でWebPagetest の計測結果をグラフ化する | mediba Creator × Engineer

    Blog gas-webpagetest でWebPagetest のパフォーマンス計測を自動化、可視化す る | Web Scratch
  13. 広告表示の優先度を上げるために 事前知識: おおよそ 3rd party はメインスレッドの処理ブロックを引き起こす(`document.write` など) アプリケーションコードをコールバックキューに積んで遅延実行 => 効果はある。UI

    遅延を生む。それはそう。オススメしない <link rel="preload"> で 3rd party を投機的読み込み => 効果大。ブラウザの実行優先度を理解するのが良いかも
  14. 数値としてはどのくらい盛り返せたのか リニューアルリリース、その後チューニング for 広告、CSR 等変更してリリース 左: リニューアル前, 右: 諸々変更を加えてのチューニング後リリース 初期描画,

    FCP/FMP いずれも向上 元々 Akamai の TTFB が早かったのでさらに後続の数値が良くなる UI 完了も早いので準じて広告描画との棲み分けが最適化 広告売上も4 月に入ってきて回復している( まだ経過観察中)
  15. 悔しい。あきらめねーぞ React CSR に戻すためには React Concurrent Mode = Async Rendering

    Scheduling in React UI = メインスレッドをブロックすることなく コンポーネントの描画を適宜スケジューリングできるとみんな幸せそう
  16. 宣伝 フロントエンドランチ ここ 8F でフロントエンドランチを毎週水曜やってます (去年6 月から初めて今日で39 回目でした) Slack にてチャンネルを共有できます

    参加のご希望があれば声かけてください! フロントエンドランチ - mediba We are hiring. Wantedly, Findy... FE 募集してます