fieldについて現状targetがesnextじゃないならあまり使わないほうがよいReason以下のようなシンプルなケースを考える。WeakMap();というアウトプットになる。privateフィールドを実現するためにWeakMapを活用しており、アクセスのたびにWeakMapを検索するためとにかく遅い。14:25Tweetもっと読むコメントを書く2019-07-11JavascriptのObjectリテラルとJSON.parseについてV8のJSON.parseについて最近(ちょっと前か)話題のオブジェクトリテラルよりもJSON.parseのほうが早い件について。その理由を内部実装の観点から書く。注意点を最後に書いた。Parseを行っている。Parsejavascriptはブラウザという特殊な環境で実行される言語であるため、パースにも少々工夫が必要になる。基本的にV8はすべてのソースコードをパースしない。グローバルスコープにあるものだけをちゃんとパースして、それ以外はPreParserというパーサで関数だけをかき集める。100は一切パースせずASTを生成しない。100がパースされる。なっており、ParserFunctionのようなメソッドが一杯あるクラスになっている。parser_;};のような感じでParserBaseがパーサのBNFに対応する各パース段階のエントリーポイントを持つ。その中でimpl()->ParserFunctionLiteral()のような形で実際のパーサを呼び出してパース処理を行っている。PreParserさて実際にパース処理を行うパーサは2種類ある。PreParserはASTを生成せずに関数名やその他情報を集めるだけのパーサで、Parserは実際にASTの生成を行うパーサとなっている。ここで大事なのがPreParserの実装である。PreParserはASTは生成しないものの実際に構文のパースは行う。そのため、V8ではjavascriptのソースコードは2回パースされることとなる。ここでJSON.parseの特殊性が影響してくる。JSON.parseJSON.parseの第一引数には文字列のJSONオブジェクトが渡される。言うと、文字列のパースコストは非常に低いのだ。文字列はパース段階ではなく、スキャン段階でトークン化されるため、何度パースされても文字列リテラルのトークンを判定するだけで処理が完了する。そのため、パースの負荷が非常に低くなる。JSON.parse自体もランタイムで処理が行われるために、実際に呼び出されるまで処理が行われず、不要なパースをすべてスキップすることができる。Parsingをしているに等しい状態となっている訳だ。これらの要因が組み合わさってオブジェクトリテラルをべた書きするよりも、JSON.parseの方が早くなるという不思議な現象が発生する。timeの高速化しかできない。実際の実行時間はJSON.parseのほうが遅くなるので、FMPの高速化には寄与するかもしれないが、すべてのオブジェクトリテラルをこれで置き換えると結構遅くなりそうなので注意。パースのLazy化と考えたほうが良い。ちなみにJSON.parseが遅いのはASTを作らず、毎回パースの手間がかかるから。一度しか実行されないケースに関してはそこまで速度の差はでない。hooksで遊んでみた。hooksで使えるやつ探したらfacebookが出してるredux-react-hookを見つけた。redux-hookを作ってみた。)}使い勝手は素のreduxに近くなるようにしてみた。typescripttsで作ってるので、型定義も同包してます。最近はJS初心者歓迎も兼ねていて、多方面で参加しやすい勉強会になってる思い出21Cafeでやってるときに参加して依頼、だいたい行ってると思う3回目くらいからかな?全ての勉強会の中でここで最もLTしてると思ういつもお世話になっておりますここでいろんな人と知り合いになれました良いなと思っていること今の時代にjavascriptで初心者歓迎なLT会は貴重とにかく登壇の敷居を下げてくれているので登壇しやすい特に一度も登壇したことない人はぜひ申し込んで登壇してほしいただ、倍率が高いので抽選通るまで頑張ろうあと毎回賑やかでよい懇親会とかすごく話しやすい雰囲気だなぁと毎回思うこれもひとえに主催者の方々の人柄ですねこれからWeJSでLTする方へ自分のネタがしょぼいかなとか、みんな知ってるしとか考えなくていいよ!まずは自分が楽しもう昔WeJSでLTした心得的なやつspeakerdeck.com最後にいつもありがとうございます。毎月楽しみにしてます。12:09Tweetもっと読むコメントを書く2018-03-16JSのproposal-numeric-separatorを実装したよタイトルの通りなんだけど、書くのが遅れてしまった。masterにマージされた。機能javascriptのプロポーザルで数値リテラルの間にアンダースコアを挿入できるやつ現在stage3にあってまだ正式に採用されているわけではない。github.comこのスライドにも書いたspeakerdeck.com例.1_0_00_00xFF_FF_FF0b0101_01_010o7_7_716進数、10進数、8進数、2進数の各リテラルに対応している。octalには対応していない。trueだったので急にアンダースコアを数値として使えるようになると、NaNであることを期待しているコードが壊れるからという理由。そのようなコードが一体どれほどあるのか知らないけど安全側に倒した。webを避けるためには仕方ないかなと言う感じ。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。