【React】親コンポーネントから子コンポーネントへの引数渡し方メモ
ディレクトリ 構成
src |-index.js LTodoList.js
基本ソース
index.js
TodoListコンポーネントを表示しているだけ
import React from 'react'; import ReactDOM from 'react-dom'; import TodoList from './TodoList'; ReactDOM.render(<TodoList />, document.getElementById('root'));
TodoList.js
TodoListからTodoへ「objectのnameプロパティ」を渡し、Todoが受け取ったnameプロパティを表示させている。
keyプロパティを指定して渡しているのは、渡さないと開発者ツールのコンソール見たときに怒られるから。
import React from 'react'; const objectArray = [ {id:1, name:"name1"}, {id:2, name:"name2"}, {id:3, name:"name3"}, {id:4, name:"name4"}, {id:5, name:"name5"}, ]; const TodoList = () => { return ( <ul> {objectArray.map((object) => <Todo key={object.id} name={object.name} />)} </ul> ) } const Todo = (props) => { return ( <li>{props.name}</li> ) } export default TodoList;
TodoListがスプレッド演算子を使用して渡す
以後、TodoListとTodoのソースのみしか変更しないため変更部分のソースのみ掲載
const TodoList = () => { return ( <ul> // <Todo key={object.id} id={object.id} name={object.name}/> と同義 {objectArray.map((object) => <Todo key={object.id} {...object}/>)} </ul> ) } const Todo = (props) => { return ( <li>{props.name}</li> ) } export default TodoList;
Todoがプロパティ名を指定して受け取る
const TodoList = () => { return ( <ul> {objectArray.map((object) => <Todo key={object.id} {...object} />)} </ul> ) } const Todo = ({ name }) => { return ( <li>{name}</li> ) } export default TodoList;
【Jmeter】スレッドグループのスレッド数・RampUp・ループ回数について
要約
- スレッド数:仮想ユーザの数を設定する。10に設定すれば10ユーザで負荷掛けを行うと考えればよい
- 負荷調整はスレッド数だけでなく、リクエスト間隔で行う
- RampUp:仮想ユーザが全員立ち上がるまでの時間を設定する
- 負荷をばらつかせるためRampUpは設定した方がいい
- ループ回数:1つのスレッドが何回ループするかを設定する
- 負荷掛け時間はループ回数ではなく、Durationで調節した方がいい
使用資材・環境など
スレッド数(これの説明が大半)
仮想ユーザの数を設定する箇所。ここの数値を10とすれば、10ユーザで負荷掛けを行うと考えればいい。
スレッド数によって、生成できる負荷量の上限は大きく変わるが、サーバのレスポンスタイムによっては、1スレッドで10TPSを出すことができるし、逆に10スレッドで5TPSさえ出すことができない場合がある。
Jmeter側でリクエスト間隔を調節すれば、100スレッドで1TPSしか出さないようにもできる。
リクエスト間隔を調節すれば、多くのスレッドで少ないTPSを出せるが、少ないスレッドでは大きなTPSを出すことは基本難しい。(レスポンスタイムが爆速であれば可能)
具体例的な
以下の具体例で、狙ったTPSを出すにはレスポンスタイムに応じてスレッド数を調整しなければいけないことを体感してもらえればうれしいです。理解してもらえれば、10TPSの負荷をかけたいから10スレッドでいいなどとは考えないようになるでしょう。
以下の様にShell Bean Sampler1つの負荷シナリオを使用します。
1秒スリープして終了するだけ。統計レポートには1秒後にレスポンスタイムが返却されたような挙動になります。
sleepを50ミリ秒に設定すれば50ミリ秒でレスポンスが返却されてたように統計レポートに表示されます。
1スレッド1ループで単発実行すると統計レポートには1秒でレスポンスが返却されたように見える。
ThroughtPutは59.9/minとほぼ1TPS出ていることがわかる。
100スレッドで10TPSを狙ってみる。負荷掛け時間は1分とする。
リクエスト間隔を調節しなければ100TPS出てしまうので定数スループットタイマーでリクエスト間隔を調節する。
定数スループットタイマーについては以下の記事を参照してください 【Jmeter】負荷量を調整する方法 - Out Of Memory
確かに100スレッドでも10TPSを出すことができた。
次に、Shell Bean Samplerのsleepを50ミリ秒にして1スレッドで10TPSを狙ってみる。 シナリオの構成は全く一緒。変更点はShell Bean Samplerのsleepが50になっていること、スレッドグループのスレッド数が1になっていること。
レスポンスタイムが50ミリ秒程度となっているため1スレッドでも10TPSを出すことができた。
次にShell Bean Samplerのsleepを1秒にし、1スレッドで10TPSを狙ってみる。(もちろん無理)
レスポンスタイムが1秒の時点で1スレッドでは1TPS以上出すことは不可能。
なぜスレッド数の説明をここまでしているかというと私がこれで嵌ったからです。。。
RampUp
設定したスレッド数をすべて立ち上げるまでの時間を設定する。
ここを0秒にすると、負荷試験開始と同時にすべてのスレッドを立ち上げる。
ここを設定する意義は各スレッドが送るリクエストをばらつかせるという理由がある。
以下の様にHTTPリクエストをA→B→C→Dと送る負荷シナリオがあったとする。
RampUpを0秒にした場合、以下の様な負荷挙動になることがある。
設定したスレッドみんなが一斉に立ち上がり、ほぼ同じタイミングでAリクエストを投げる。 ↓ サーバが処理をしてレスポンスを返却(受信したリクエストをすべて捌いたとする) ↓ 設定したスレッドみんながほぼ同じタイミングでレスポンスを受け取り、一気にBリクエストを投げる。 ↓ サーバが処理をしてレスポンスを返却 ↓ (略)
理想は、あるスレッドはAのリクエストを送信しており、ほかのスレッドはBとかCのリクエストを送信しているといったように各スレッドが送信するリクエストにばらつきがあることだ。
各スレッドが同時に同じリクエストを送信するより、各スレッドが違うリクエストを送っていた方が実際の負荷挙動っぽいしそれを再現するためにRampUpを設定する。
負荷シナリオを1周するのに1分もかからなければRampUpは1分とか5分とかでよいが、負荷シナリオの1周が長く、5分とかかかるのであればRampUp時間も10分や15分と長めに設定して送るリクエストをばらつかせるといい。
RampUpを設定するその他の理由としては、徐々にスレッドを起動した方がJmeter側の負荷が一気に上がって詰まることがないことが挙げられる。
ループ回数
スレッドグループの各スレッドが何回ループするかを設定する箇所。
例えばスレッド数が10でループ回数が5回なら10×5=50回のリクエストを送ることになる。
ただ、負荷試験を行うとなると10分間50TPSの負荷をかけ続け、サーバが目標とするスループットを出せており、かつ目標とするレスポンスタイム内にレスポンスを返せるか等の見るため、ループ回数で何回リクエストを送るかを設定するよりもどれくらいの時間負荷をかけ続けるかを設定した方が楽ちん。
もし、10分間50TPSをかけ続けたいなら、ループ回数は無限に設定し、持続時間を10分に設定するのが吉。
そしてかける負荷量(ここでは50TPS)はThink Time か 定数スループットタイマーで調整する。
【Jmeter】負荷量を調整する方法
要約
この記事ではJmeterで負荷量を調整する方法2つを説明している
1.Think Timeで負荷量を調整する
2.定数スループットタイマーで負荷量を調整する
- Think Timeで負荷量を調整した場合、何らかの理由ででサーバ側のレスポンスタイムが落ちた場合、目標スループットは出せなくなる。
- 定数スループットタイマーで負荷量を調節した場合、何らかの理由でサーバ側のレスポンスタイムが落ちた場合でも目標スループットが達成できる時がある。
使用資材・環境など
Jmeterから同じ端末内のApacheへアクセスして静的コンテンツを取得するだけのシナリオを使用する。
また、目標スループットは10TPSとする。
Apacheへアクセスすると It works! と表示されるhtmlが返却されるだけ。
負荷シナリオの共通設定
- 使用するシナリオはスレッドグループの中に1つのHTTPサンプラーがあるだけ。
- スレッドグループの設定は同じで以下の通り
- スレッド数:20
- RampUp:0秒
- ループ回数:無限
- 「Specify Thread lifetime」にチェックを入れ「Duration」を60秒に設定する。
下記シナリオに「Think Time」または「定数スループットタイマー」を入れ負荷量を調節する。
そのまま負荷掛けしてみる
「Think Time」も「定数スループットタイマー」も入れずにそのまま負荷掛けしてみる。
スタートした後、約5秒でsocket枯渇によるエラーが発生した。
●参考
Jmeterはリクエストに対するレスポンスを受け取るとすぐに次のリクエストを送信するため、レスポンスタイムがとても速いとsocketの作成がsocketの上限値に達してしまい、socket枯渇のエラーが出てしまう。
●テスト結果
Jmeterはレスポンスを受け取るとすぐに次のリクエストを送信するため、Think Time等を設定してリクエスト間隔を調整しないと、socket枯渇のエラーにかかわらずとても多くの負荷を生成してしまう。
Think Timeで負荷量を調整してみる
静的コンテンツを返却するだけなのでレスポンスタイムは100ミリ秒もかかっていない。また、スレッド数は20なのでThink Timeを1秒程度では目標スループットに対して過負荷になってしまうため1.9秒としてみる。
「Think Time」 という名前で「Flow Control Action」というサンプラーを追加している。
負荷をかけてみると大体10TPSにはなっている。
Think Timeで調節をする場合はスレッド数やレスポンスタイムからどれくらいThink Time を入れる必要があるか計算して調節する必要がある。
今回はとても簡単な負荷シナリオなので計算も簡単だったが、負荷シナリオが長く、レスポンスタイムにもばらつきがある場合は負荷をかけて結果を見ての繰り返しでThink Timeを調節する必要がある。
定数スループットタイマーで調整してみる
<定数スループットタイマーについて>
設定したスループット(TPM)になるように送ったリクエストの結果に応じて次のリクエストの送信を遅らせ、目標TPSになるようにリクエスト間隔をよしなに調整してくれるタイマー。
スレッドグループの下に定数スループットタイマーを入れ、TPM(Transaction Per Minutes)に600を入力。TPS(Transaction Per Second)ではなくTPMなので注意。
また、Calculate Throughtput based on: を「all active threads in current thread group (shared) 」にする。ここの設定をミスると全く狙ったスループット通りにならないので注意すること。
今回はとても単純な負荷シナリオのため、10TPSちょうどとなった。
定数スループットタイマーは正確に狙ったスループットになるわけではないが、そうなるようにリクエスト間隔を調節してくれるので、大体近しいTPSになる。
まとめ
- Think Time
- 定数スループットタイマー
【elona改造】所持金やプラチナ硬貨を増やしてみる(3)プラチナ硬貨を増やしてみる
はじめに
本記事では汎用プロセスメモリエディタ兼デバッガである「うさみみハリケーン」を使用して、elonaの所持金やプラチナ硬貨の増やし方について記載しています。
※本来の遊び方とはかけ離れているため、不快な方はブラウザバックの方をよろしくお願いします。
目次
【elona改造】所持金やプラチナ硬貨を増やしてみる(1)メモリ範囲検索前まで
【elona改造】所持金やプラチナ硬貨を増やしてみる(2)所持金を増やしてみる
【elona改造】所持金やプラチナ硬貨を増やしてみる(3)プラチナ硬貨を増やしてみる ←いまここ
プラチナ硬貨を増やしてみる
1.プラチナ硬貨が格納されているメモリを探す
前回から続けて行っている場合は青枠の①「解放」と②「クリア」を行ってください。
検索・比較単位が2byteになっていますが、前回と同じく4byteで問題ありません。
前回同様にプラチナ硬貨の個数を入力して検索後、「確保・記録」をクリックしてください。
【elona改造】所持金やプラチナ硬貨を増やしてみる(2)所持金を増やしてみる
はじめに
本記事では汎用プロセスメモリエディタ兼デバッガである「うさみみハリケーン」を使用して、elonaの所持金やプラチナ硬貨の増やし方について記載しています。
※本来の遊び方とはかけ離れているため、不快な方はブラウザバックの方をよろしくお願いします。
目次
【elona改造】所持金やプラチナ硬貨を増やしてみる(1)メモリ範囲検索前まで
【elona改造】所持金やプラチナ硬貨を増やしてみる(2)所持金を増やしてみる ←いまここ
【elona改造】所持金やプラチナ硬貨を増やしてみる(3)プラチナ硬貨を増やしてみる
所持金を増やしてみる
1.所持金が格納されているメモリを探す
現在の所持金を下の画像の様に①に入力して②「通常検索実行」をクリックしてください。
検索の設定は特にいじくる必要はありません。画像と同じようになっていなければ同じようにしてください。(検索・比較単位の部分等)
415の数値が格納されているメモリ番地一覧が表示されるので、③「確保・記録」をクリックしてください。