TIL0721
😆 ケイシーって何?
キャッシュ(Cache)を使用して、メモリをより迅速に処理します.
n/a原理
よく使用されるデータをキャッシュに格納し、メインメモリではなくデータが必要なときにプロセッサにキャッシュにアクセスさせることで、処理速度が向上します.キャッシュに格納されているデータが大きすぎると、情報の検索時間が長くなるため、キャッシュ内のデータサイズを制限し、更新されたキャッシュ内のデータだけがキャッシュを有効に使用できるようにする必要があります.
前述したように、キャッシュは、サイズ別、時間別に格納され、それぞれ空間領域性、時間領域性と呼ぶことができる.
時間と地域性
最近アクセスしたデータに再アクセスします.例えば、ループ内でインデックスとして機能する変数iは、短時間で複数回アクセスすることができる.
宇宙の地域性
最近アクセスしたデータの周囲の空間に再アクセスする傾向を指す.上のループの場合、アレイarrの各要素は隣接するメモリ領域に連続的にアクセスします.
😁 キャッシュ置換アルゴリズム
典型的なキャッシュ置換アルゴリズム
1)最近使用したデータブロック(LRU):キャッシュ内で最も長い時間参照されていないデータブロックを置換する
2)第一入力第一出力(FIFO):キャッシュ内最長時間のデータブロック置換方法
3)最近接周波数使用(LFU):最も参照の少ないブロックを置換するアルゴリズム
書き込みポリシー
問題:プライマリ・ストレージにボトルネックが発生する可能性がある
2) Write back
😃 MAP vs Object
Javascript mapデータ型はObjectとよく似ています.どちらのデータ型も、鍵を値に設定したり、値を検索したり、鍵を削除したり、鍵に何が格納されているかを知ることができます.ただし、この2つのデータ型の間には、次の違いがあります.
👍 MAP vs LRU cache
LRU cacheはデータのサイズに時間と空間の制限があり、mapにはこれらの制限はないと思います.
😷 JavaScriptコンソールI/O
1)readlineでの入出力
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question('What do you think of Node.js? ', (answer) => {
// TODO: Log the answer in a database
console.log(`Thank you for your valuable feedback: ${answer}`);
rl.close();
});
2)プロンプトによる入出力result = prompt(title, [default]);
resultは可視部分、defaultは初期入力値3) confirm
result = confirm(question);
受信した問題の入力値を確認します.入力値はtrueとfalseをクリックしてエクスポートします.例)
let isBoss = confirm("Are you the boss?");
alert( isBoss ); // true if OK is pressed
同期メソッドと非同期メソッド
同期は、バックグラウンド・タスクが完了したかどうかを確認し続け、バックグラウンド・タスクが完了した後も呼び出された関数はすぐに返されません.
簡単に言えば、1つのコード文は、実行が完了した後に次のコードを実行できます.
非同期の場合、呼び出された関数はすぐに戻って次のタスクに移動し、バックグラウンドが通知を発行するまで処理するかどうかを考慮する必要はありません.
メインスレッド?ですべてのコードを実行し、バックグラウンドでコードを実行します.
Promise
Javaスクリプトとノードは主に非同期に接触します.特にイベントリスナーを使用する場合、コールバック関数がよく使用されます.このJavaScriptコールバック関数の地獄から抜け出すためにPromiseに基づいて再構築することができます.
function findAndSaveUser(Users){
Users.findOne({}, (err,user) =>{
if (err){
return console.error(err);
}
user.name = 'zero';
user.save((err) => {
if (err) {
return console.error(err);
}
Users.findOne({gender:'m'},(err,user) => {
});
})
});
}
function findAndSaveUser(Users){
Users.findOne({})
.then((user) => {
user.name = 'zero';
return user.save();
})
.then((user)=>{
return Users.findOne({gender: 'm'});
})
.catch(err => {
console.error(err);
});
このように(user,err)、userを受け取ったら.err因子を順番に処理して受け入れる場合.catchに従ってエラーを一度に処理できます.async/await
このようにPromiseでcallback地獄を脱し、async/awaitを通過します.then .catch構文を短縮できます.
例)
anync function findAndSaveUser(Users){
let user = await Users.findOne{()};
user.name = 'zero';
user = await user.save();
user = await Users.findOne({gender: 'm'});
}
実際、上記のコードはerrに対する操作がないだけなので、次のコードを作成する必要があります.anync function findAndSaveUser(Users){
try{
let user = await Users.findOne{()};
user.name = 'zero';
user = await user.save();
user = await Users.findOne({gender: 'm'});
} catch(error){
console.error(error);
}
};
Reference
この問題について(TIL0721), 我々は、より多くの情報をここで見つけました https://velog.io/@turtle601/TIL0721テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol