-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
refactor: faster for loop #13104
base: develop
Are you sure you want to change the base?
refactor: faster for loop #13104
Conversation
Codecov ReportAttention:
Additional details and impacted files@@ Coverage Diff @@
## develop #13104 +/- ##
===========================================
+ Coverage 64.21% 65.72% +1.51%
===========================================
Files 976 981 +5
Lines 108707 113568 +4861
Branches 5581 5642 +61
===========================================
+ Hits 69808 74648 +4840
- Misses 38899 38920 +21 ☔ View full report in Codecov by Sentry. |
このPRによるapi.jsonの差分 差分はこちら |
Lets go! |
ドキュメント化なりlintで禁止するなりしてほしい感じがある |
こっち終わってからマージします🙏 |
了解です |
👀 |
いちいちautogenがコンフリクトするの面倒だわね(特に生成されるものが変わる変更をしていなくても) |
常に最新の状態を維持したいので、あえて生成日時を入れてコンフリするようにしていました。 |
ほむん |
CIが引っかかったので再生成したものと思われる |
まあMisskeyがV8使わなくなる可能性は十分にあるわね |
(V8から移行するかは置いておいても)確実にキャッシュされる方法があるならそのように変更する分には全く問題ない気がする |
Bunが使用しているJavascriptCore.Frameworkも配列の要素数をキャッシュしてるっぽいのでやはりバックエンドを変更する必要はないかも |
firefoxで試す感じfirefoxもlengthのキャッシュの速度の差があまりない(誤差レベル)だったのですが実際にこの2つで大きな差があるフロント側の実装が何なのかが気になりました https://hg.mozilla.org/mozilla-central/file/2cac2f68bfdcfc9012c537044bc475f076bda7b0/js/src/builtin/Array.cpp#l185 |
横槍を入れるようで申し訳ないのですが、そもそもの ざっと見た感じでも、例えばこちらの処理は また、少し話はそれますが、インデックスを用いた配列などへのアクセスでは、手に入る値は どのように推論されるにしても、そもそものインデックスを用いたアクセス自体を極力取り除く方向でのリファクタリングのほうがよいように感じます。(だからといってこのPRが全面的にだめというわけではないですが……。) パフォーマンス向上を目指すのはよいことだと思います。しかし、実際にこの変更でパフォーマンスがどの程度向上するのかは不透明です。となると、可読性や型安全性が高まるようなリファクタリングができそうな場面では、そのようなリファクタリングをするほうがよいと思います。 Footnotes |
手元でベンチマークを測った結果、速い順に
となり現在の実装の方が全てのケースで速くなりました。さらにChromeで要素数が一万の配列に対して実行したところ |
これV8エンジンの最新版では |
What
コードのリファクタリング (特にfor文)
毎回配列の長さを参照及び、計算していたのを最初に計算し、キャッシュするように変更した。
Why
毎回配列の長さを参照するのにも、計算するにもコストがかかるから。
Additional info (optional)
Checklist