Removing jQuery from GitHub.com frontend
https://gyazo.com/ac307a18402912653fe57f44d7ba9ef6
Removing jQuery from GitHub.com frontend | GitHub Engineering
GitHub Engineeringの記事
jQueryを消した話
メモ
2007年にjQuery1.2.1を使い始めた
Chromeがリリースされる1年前
共通のDOM操作やAjax周りが無かった
jQueryはそのあたりをラップするのに便利だった
年月が経つにつれてGitHubも大きくなった
JSのサイズや品質を担当するチームもできてきた
技術的負債は返済することがポリシー
この観点でjQueryを見たとき
https://gyazo.com/654587fe2448bc3e9d6eca67f5431c17
Flowを使った
が、jQueryの連鎖構文には不向きだった
// @flow weakで徐々に移行した
Web StandardsのAPIに書き換えた
ファイルサイズは30KB減った
ページロードの速度もアップした
いきなり全部jQueryにするのは大変
回帰テスト問題とか
まずはjQueryの使用率をモニタリングした
https://gyazo.com/3b369656ccd3248775d99e3c7b1504f3
このグラフが上がったらだめということ
jQueryを使うと警告を出すESLintプラグインを作った
https://github.com/dgraham/eslint-plugin-jquery#readme
ちょっとワロタ
既存のコードには全てeslint-disableをつけた
これで既存のコードだということがひと目で分かる
eslint-disableをつけると通知が行くbotを作った
代替案をみんなで考えるため
pjaxやfaceboxはInterfaceを変えずに中身を書き換えた
静的型チェックが非常に役立った
Rails独自のAjaxのLife cycleはフェイクのものを発火
内部的にはFetch APIを使うようにした
jQueryの削除を進めると同時にカスタムビルドで不要なモジュールを消していった
IE8-9のサポートを切った
使用率をモニタリングし、しきい値を切ったタイミングで
As part of our refined approach to building frontend features on GitHub.com, we focused on getting away with regular HTML foundation as much as we could, and only adding JavaScript behaviors as progressive enhancement. As a result, even those web forms and other UI elements that were enhanced using JS would usually also work with JavaScript disabled in the browser. In some cases, we were able to delete certain legacy behaviors altogether instead of having to rewrite them in vanilla JS.
この英文が分からない…
Custom Elementsを使う
ライブラリのダウンロードが不要
v0のときはあまり投資しなかった
v1になってから本格的に使い始めた
faceboxの挙動をするCustom Elementsを作ったりした
今後
Shadow DOMに期待
polyfillはパフォーマンスに影響出るのでプロダクションで使いたくない
本当に必要なときにしか使わない
感想
jQueryへの敬意が感じられて素晴らしい
未来を見据えて&パフォーマンスやファイルサイズにこだわりまくってブラウザのnative APIしか選択しないのは素晴らしい
私は富豪的な発想になりがちなので見習いたい…sota1235.icon
#読んだ #GitHub