60 xパフォーマンス改善とfullstackで動く- DDTJ日7を造ること


昨日と今日は完全に回復!
木曜日からスランプになった.これはあらゆる些細なプロジェクトにおける自然な段階です.それはまだハードヒット、これはほとんどの人々が開いているときにオープンソースプロジェクトです.それは“楽しい”を停止します.しかし、主張することは重要です.一旦私たちがエネルギーを働くことを得るならば、エネルギーは戻ります、そして、それは新しい日です!
それで、私は2つのPRSを合併しました.このmonster PR 最後に、すべてのデバッグロジックを実装します.Then I merged a small fix これは、私はすぐに議論するパフォーマンスの向上を与えた.
昨日まで私はまだ私の選択したアーキテクチャを提供する私の能力に関連するいくつかの疑問があった.パフォーマンスは十分妥当か?

60 x改善


私は昨日のパフォーマンスについての疑惑を共有したかったが、それをしないことを選んだ.私は、人々が話していた多くのケースにいました、そして、彼らは、パフォーマンス問題がXに起因すると確信しました、そして、彼らは彼らの顔に卵で終わりました.
私は、私の「推測」で実際に正しかったです.私は、アプリケーションの実行時の状態コードを保存せずに測定した.つまり、我々はJDIと他の何もそれを起動しています.パフォーマンスはほとんど悪く、それは私のコードのほとんど罰金を意味します.
それで、何が遅いパフォーマンスを引き起こしましたか?
開発中は、以下のように呼び出しを削除しなければなりませんでした.
methodEntryRequest.addClassFilter(filter);
実は、たくさんの電話があった.除外フィルターなどたくさん試してみました.
私がそれらを取り除かなければならなかった理由は、彼らが働かなかったということです!

" add "として" add "という名前を付けないでください


The addClassFilter APIは本当に名前setClassFilter . 追加のフィルターを追加すると、機能が無効になります.残念ながら、Javadocのどこにもこれの言及はありません.私が選んだ回避策は実際にはかなり簡単ですMethodEntryRequest そして、それぞれ異なるフィルタタイプにバインドします.
今ではユーザクラスフィルタとjavax パッケージ.概念の証明のために、私はより多くを加えるかもしれません.当然のことですが、これについてはもっと多くの設定オプションが必要です.
単純なフィルタを加えることは、すべての違いを作りました.それはVMのネットワークオーバーヘッドを減らして、速いパフォーマンスを許しました.たぶん、私がエージェントアプローチ(「プロセス」である)をとったならば、私はより良いパフォーマンスを持ちました.前進することを再評価する必要があるかもしれません.
この小さな微調整のパフォーマンスは今、プロジェクトの生活の中でこのステージのために受け入れることができるので、我々は移動することができます.

あなたがPR変化ログで見ないもの


私は押しつぶされて、合併したので、この過程の間、私の変化の多くはログで消えました.明示的なPRに行ってコミットを確認しない限り、あなたはそれを見ません.私は、メソッドの入力/終了を使用するピボットを決定したとき、カットルームの床に終わった多くのコードを書いた.
これは、開発者は、このタイプのプロジェクトのために対処する必要があります最も困難なものの一つです.私はすでにコードを書いた、私はピボットできません.
当然これは価値がある.私はヨーヨー開発戦略を提唱していません.しかし、我々は仕事を捨てて、客観的である準備ができなければなりません.

あまりコメントしなかった


数人の人々が私にコメントなしでコードを書くと私に指摘しました.
私は私のコードは、健全なマージンでソースコードより多くのコメント行を持っていた.あなたが私のブログから見ることができるように、私は書くのが好きで、キーボードでかなり多作でありえます.ブロッカーは、時間や努力ではありません.
問題は、コメントが古くなって、ほとんどの人はそれらをオーバーライドする場合はそれらを読むことはありません.私はコードを簡単にします.それがコメントを必要とするならば、私はさらに簡素化しようとします.できるだけ多くのコメントを避けることによって、私は人々が本当に重要なコメントを読むことを確認します.
パブリックAPIを構築する際にJavadocである大きな例外が一つあります.それは不可欠であり、常に完全に書かなければなりません.しかし、ソースコードのコメントはしばしば無視されます.

私はテストをクリーンアップする必要があります


私は今、すべてのPRで80 %にカバレッジを取得しようとしてしばらくの間私のカバレッジの物語を追ってきた.残念ながら、テストは多くのコード重複とちょうどハックを持っています.
私はこのものの完全なオーバーホールをする必要がありますが、私は最初に製品を取得したい.私は80 %のマークを過ぎてカバレッジを取得しようとして昨夜、時間を過ごして以来、私は選択肢を持っていない可能性があります.

CIはローカルで作業中にサーバーに失敗しました


これは先日私を怒らせた.単体テストは完全にローカルに渡されたが、Githubアクションで動作するときには失敗した.エラーメッセージは、Spring Frameworkパッケージについて何か奇妙なことを示しました.全く意味をなさなかった何か.
環境の違いを隔離しようとした.これを出すtiny line , Java binディレクトリがパスにあることを確認します.この小さな変化がテストを通過させた.どうやって推測したのかわからない.私は、それが働くまで、すべてをためしました.

CLIとテスト生成への移行


二つの方向があります.
  • スプリングブートで実行するコードを取得します
  • CLIを終了し、Hello Worldテストケースのテストを生成します
  • 私は後者で行くつもりです、そして、あなたがあなたの新しいプロジェクトでそのような点に走るときはいつでも、あなたはそうしなければなりません.
    プロジェクトを作成するときは、まず深さを最初にビルドする必要があります.我々は、少なくとも我々が動く部分を理解することができるようにタンデムで働いているすべての基本的な実現を必要とします.それで、我々は第三者によってプロジェクトで援助を受け入れることができます.幅は遠近法に役立ちます.深さは後で来る.
    それを念頭に置いて、私はCLIに焦点を当て、まだ係争中のすべての機能を実装しました.私はコンセプトの証明を完了するために1つの最後のタスクを持っている.

    テストの生成


    私は最初のテストのために私の視力を非常に低く設定したい.しかし、それは「良い」有効なテストであるために、呼び出しを模擬しなければなりません.これは今日の私の主な焦点になります.
    私がこれを得ることができるならば、私の次の優先順位は春のブートペットクリニックデモで走るためにこれを得ています.私は、春のプロキシをフィルター処理することでそこにいくつかの課題があると思います.他の問題.しかし、私が今週までに両方の仕事を得ることができるならば、私はそれが大成功を考慮するでしょう.
    たった今、私は最初のFreemarkerが生成したテストテンプレートをセットアップしています.それから、これはCLIに縛られなければなりません.それは比較的簡単で有名な最後の言葉であるべきです.

    明日


    私は明日、Freemarkerと共に適切なソースコード生成をすることを望みます.私はそれを統合することに取り組んでいます、それから、私はテストを生成するためにコードの上に行きます.それから、これはCLIにバインドしなければなりません.近づいてきた!
    あなたがこのシリーズの最新の最新版と私がそれで働く他の多くのものについていくことを望むならば.