Shopnc Modelの下部に隠されたピット
2645 ワード
この間、ある機能を実現しました.データテーブルのクエリー操作に関して、ローカルとテスト環境のテストを経ても問題ありません.この過程は順調に進んでいるようです.退勤するかどうか考えてみましょう.(時間も早くないようですが)、それから正式な環境の下で最後のテストを行います(何の問題もないと思いますが、結局はデータのクエリーだけで、しかもすでにテストして、データも完璧に出力します);
最後に...ついに思いがけないことが起こりました..
制品のほうはなぜこんなに遅いのか、データのロードができないのかと言っています.の
製品のフィードバックによると、私は関連プログラムを見て、大丈夫だと思います.また、表のフィールドの設計を見てみると、私が追加したいくつかのフィールドにはインデックスを追加すべきものがありますが、私は追加していません.加えて、テストの下ではほとんど同じように遅く、ほとんどデータのロードができません.の
テスト環境のいくつかのプロファイルを見て、正式な環境のプロファイルと比較しても、問題は見つかりませんでした.
質問をする...
△この時、思考は死角に陥ったようだ..
主管の注意深い検査を経て、やっと問題がどこに現れたかを発見しました.の
Modelの下部には、すべてのテーブル名とプライマリ・キーを含むキャッシュ・ファイルがあるのですが(プログラムの実行時に実行にロードされていないか、保存時にキャッシュ・ファイルに保存されていないようです)、プログラムがテーブルに対する操作に触れるたびに、すべてのテーブルをサーバに再検索し、どんなに恐ろしいか考えてみましょう.
このことをまとめると、以下の問題が反映されます.
1.プログラムの論理判断が厳格ではない!
以上のキャッシュファイルのロードに失敗したり、キャッシュファイルにデータを保存したりして成功しなかったりすると、ログに反映されます.それは、位置決め問題が発生した原因がより速く、より正確ではないかということです.
2.問題を調べる考え方が限界すぎる!
いつも一つの面で問題を考えているようで、現在の思考パターンから飛び出して他の角度に立って問題を考えるのは難しい.これは自分の問題かもしれない.(思考が柔軟でない、あるいは経験が足りない)
3.システムの下部フレームワークの実現原理が足りない!
日常の開発で忙しいかもしれませんが、私たちはある方法を使うことにとどまっています.その底の実現原理を深く理解していません.
これでは問題が発生し、受動的になります!
以上のまとめではまだまだ足りないかもしれませんが、重要なのは必ずソースコードを読むことです!
コードクリップ:
最後に...ついに思いがけないことが起こりました..
制品のほうはなぜこんなに遅いのか、データのロードができないのかと言っています.の
製品のフィードバックによると、私は関連プログラムを見て、大丈夫だと思います.また、表のフィールドの設計を見てみると、私が追加したいくつかのフィールドにはインデックスを追加すべきものがありますが、私は追加していません.加えて、テストの下ではほとんど同じように遅く、ほとんどデータのロードができません.の
テスト環境のいくつかのプロファイルを見て、正式な環境のプロファイルと比較しても、問題は見つかりませんでした.
質問をする...
△この時、思考は死角に陥ったようだ..
主管の注意深い検査を経て、やっと問題がどこに現れたかを発見しました.の
Modelの下部には、すべてのテーブル名とプライマリ・キーを含むキャッシュ・ファイルがあるのですが(プログラムの実行時に実行にロードされていないか、保存時にキャッシュ・ファイルに保存されていないようです)、プログラムがテーブルに対する操作に触れるたびに、すべてのテーブルをサーバに再検索し、どんなに恐ろしいか考えてみましょう.
このことをまとめると、以下の問題が反映されます.
1.プログラムの論理判断が厳格ではない!
以上のキャッシュファイルのロードに失敗したり、キャッシュファイルにデータを保存したりして成功しなかったりすると、ログに反映されます.それは、位置決め問題が発生した原因がより速く、より正確ではないかということです.
2.問題を調べる考え方が限界すぎる!
いつも一つの面で問題を考えているようで、現在の思考パターンから飛び出して他の角度に立って問題を考えるのは難しい.これは自分の問題かもしれない.(思考が柔軟でない、あるいは経験が足りない)
3.システムの下部フレームワークの実現原理が足りない!
日常の開発で忙しいかもしれませんが、私たちはある方法を使うことにとどまっています.その底の実現原理を深く理解していません.
これでは問題が発生し、受動的になります!
以上のまとめではまだまだ足りないかもしれませんが、重要なのは必ずソースコードを読むことです!
コードクリップ:
/**
*
*
* @param string $table
* @return
*/
public function tableInfo($table)
{
if (empty($table))
return false;
// ,find(2)
if (file_exists(BASE_DATA_PATH . '/cache/fields/_pk.php')) {
$this->fields = require(BASE_DATA_PATH . '/cache/fields/_pk.php');
} else {
$full_table = Db::showTables();
$_pk_array = array();
$count = strlen(C('tablepre'));
foreach ($full_table as $v_table) {
$v = array_values($v_table);
if (substr($v[0], 0, $count) != C('tablepre'))
continue;
$tb = str_replace(C('tablepre'), '', $v[0]);
$fields = DB::showColumns($tb);
foreach ((array) $fields as $k => $v) {
if ($v['primary']) {
$_pk_array[$tb] = $k;
break;
}
}
}
$this->fields = $_pk_array;
F('_pk', $_pk_array, 'cache/fields');
}
return $this->fields[$table];
}