Cyber Agent主催のWeb Speed Hackathon Online 4/25, 4/26に参加してきました. 結果は残念ながらレギュレーション違反で選外でしたが, とても楽しく刺激を得られたイベントになりました.
この混乱した情勢の中オンラインという形でシステムを整えて実施してくださったCyber Agentの皆さん, ありがとうございました.
あらかじめ用意されている, 架空のブログサービスのパフォーマンスをどれだけ高められるかというものです. ランタイムのパフォーマンスの最適化ももちろん必要でしたが, チューニング対象がメディアという特性上やはりI/Oコストをどれだけ抑えられるかが大きな鍵で, フロントエンドだけでなくインフラ, バックエンドも触れるところがありました.
得点づけはlight houseにより計測される得点や, TTI, Speed Index等に重み付けを行なってホニャホニャするそうです.
レギュレーションはGoogle Chrome で機能落ちやデザイン差異が生じないことです. 具体的には画像のアスペクト比等が崩れない, いいね機能などが落ちない等で結構厳し目だった印象があります(あと個人で進めていたこともあって気付きにくかった)
僕のレギュ違反はmoment, lodash, jQueryを剥がした時に機能落ちが生じたか, 画像のresizeを行なった時にアスペクト比がずれたかかなと。。悔しい。。
スタート時
やっていき💪💪💪💪💪 #WebSpeedHackathon
— しにゃい | Shinobu Hayashi@🏡 (@Shinyaigeek) April 25, 2020
1日目終了
#WebSpeedHackathon
— しにゃい | Shinobu Hayashi@🏡 (@Shinyaigeek) April 25, 2020
現状3位。。。まだまだ詰められる要素あるしやっていくぞ💪
調子乗ってる時
逃げ切りたいですが。。 pic.twitter.com/HXU4Z0nURy
— しにゃい | Shinobu Hayashi@🏡 (@Shinyaigeek) April 26, 2020
終わった直後(審査中)
#WebSpeedHackathon
— しにゃい | Shinobu Hayashi@🏡 (@Shinyaigeek) April 26, 2020
お疲れ様でした!!あとは神に祈ります。。
死んだあと
#WebSpeedHackathon
— しにゃい | Shinobu Hayashi@🏡 (@Shinyaigeek) April 26, 2020
レギュレーション違反やってしまっていた。。めっちゃ悔しい。。お疲れ様でした。。! pic.twitter.com/zV40X344Jw
雑に箇条書きです. 効果が顕著だったものは太字にします よろしければ他の参加者の皆さんもどんなことをやったか教えて欲しいです🤲
You might want to check the build output of your Webpack. If you see something like react_default.a.createElement(...). Note the extra .a. That might mean you're using `import React from "react"` which adds a bad getter in Webpack. Instead use `import * as React from "react"`.
— Sebastian Markbåge (@sebmarkbage) April 15, 2020
useEffect(() => {
await fetchASDF()
await fetchHOGE()
await fetchBAR()
},[])
となっていて, これだとfetchASDFが終わったらfetchHOGEのRequestを投げてそのResponseが返ってきたらfetchBarを投げてという感じでブロッキングになっちゃって辛いので
Promise.all([fetchAsdf(), fetchHOGE(), fetchBAR()])
という感じにしてRequestをまとめて投げてもらうようにして, こうすれば多分fetchにかかる時間が短くなってTTI減らせるんじゃないかのと思っていたのですが, なぜかTTIが大幅に落ち込んだので辞めました。。。何故だ。。知見求むです。。
個人戦のハッカソンや個人開発をADHDがやるのはやはり辛い(辛い)
— しにゃい | Shinobu Hayashi@🏡 (@Shinyaigeek) April 26, 2020
パフォーマンスチューニングをする時, (パフォーマンスでなくとも何らかのチューニングを行う時), ただパフォーマンスについてだけ数字をとって考えればいいというわけではなく, デザイン差分や機能差分についても目を配りそれらに落ちがないようにする必要がもちろんあるんですが, その際僕のような注意力散漫な人間であっても, そして別に特段注意を払わなくとも差異が発生した時は気づけるようなシステムを作っていくべきだと感じました. せっかくPlaywright, puppeteer, GitHub Actionsといった便利なツールがあるし, エンジニアを志望する以上こういう仕組みづくりをして行くべきで, 逆に普段のプロダクトでこういったことを怠っていた | Review任せにしていたというのが今回のレギュレーション違反に繋がったかなと反省があります.
最後に主催してくれたCyber Agent, 競い合った参加者の皆さんに感謝を述べて終わりたいと思います.ありがとうございました!!
(次は優勝したいのでまたやってください)