#__PURE__に入門

1.2K Views

January 31, 24

スライド概要

Kyoto.js 19で発表した資料です。
https://kyotojs.connpass.com/event/282651

profile-image

お気軽におたずねください

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

#̲̲PURE̲̲に入門 kazuhi̲ra

2.

普段あまり 人前で話さないので

5.

貴重な機会を ありがとうございます

6.

・東京在住 ・生まれ育ちは関西 ・SUZURIの開発 kazuhi̲ra ・好きなメソッド ・String.prototype.repeat()

7.

・東京在住 ・生まれ育ちは関西 ・SUZURIの開発 kazuhi̲ra ・好きなメソッド ・さぼ

8.

・東京在住 ・生まれ育ちは関西 ・SUZURIの開発 kazuhi̲ra ・好きなメソッド ・console.log(ʼ🌵ʼ.repeat(10))

9.

最近

10.

会社の新卒研修 サポート

11.

Reactの話が 中心

12.

そうすると

16.

この辺の話を することになる

17.

知識としては 知っている

18.

しかし

20.

これは bundleされた 最後の姿

21.

中間成果物を 見たことがない

22.

やってみよう

23.

やった

26.

……?

27.

#̲̲PURE̲̲

28.

誰?

29.

#̲̲PURE̲̲に入門 kazuhi̲ra

30.

検索する

35.

Pure Annotation

36.

for dead code elimination

37.

さらにいろいろ検索

38.

̲̲PURE̲̲に携わるツール 2種類

39.

・コメント(#̲̲PURE̲̲)入れる係 ・コンパイラが担う ・Babel, SWCなど ・コメント使う係 ・mini erが担う fi ・terser, uglify-jsなど

40.

コメント入れる係

41.

Babel

42.

babel-traverse/src/scope/index.ts

44.

いろいろなpure判定 fi if (isIdenti er(node)) if (isClass(node)) if (isClassBody(node)) if (isBinary(node)) if (isArrayExpression(node) || isTupleExpression(node)) if (isObjectExpression(node) || isRecordExpression(node)) if (isMethod(node)) if (isProperty(node)) if (isUnaryExpression(node)) if (isTaggedTemplateExpression(node)) if (isTemplateLiteral(node))

45.

pureの定義 未使用ならその呼び出しを 削除できるもの

46.

条件にマッチしたら ̲̲PURE̲̲挿入

47.

コメント入れる係 完

48.

コメント使う係

49.

fi mini er

50.

input: { function foo() { var u = pure(1); var x = pure(2); var y = pure(x); var z = pure(pure(side_effects())); return pure(3); } }

51.

input: { function foo() { var u = pure(1); var x = pure(2); var y = pure(x); var z = pure(pure(side_effects())); return pure(3); } }

52.

input: { function foo() { var u = pure(1); var x = pure(2); var y = pure(x); var z = pure(pure(side_effects())); return pure(3); } } output: { function foo() { side_effects(); return pure(3); } }

53.

input: { function foo() { var u = pure(1); var x = pure(2); var y = pure(x); var z = pure(pure(side_effects())); return pure(3); } } output: { function foo() { side_effects(); return pure(3); } }

54.

まとめ

55.

(口頭で)