mysqlとmysql-promiseの違いについて
概要
node.js のパッケージにmysql
とpromise-mysql
があります。
何が違うのかがわからないので調べてみました。
以下promise-mysql
のnpm
のページから引用
原文
Promise-mysql is a wrapper for mysqljs/mysql that wraps function calls with Bluebird promises
和訳
Promise-mysql は、mysqljs/mysql のラッパーで、関数呼び出しを Bluebird のプロミスでラップします。
ここでBluebird
という、新しい単語が出てきました。これはなんでしょうか?
調べたら、どうやら、Node.js で Promise を使うためのライブラリでした。これを使えば、非同期処理に非対応の状況でも使えるようになるたいです。
なので結論は、mysql
は非同期処理できない、promise-mysql
は非同期処理できる。
みたいな感じですね(名前の通りでしたが。。。)。
mysql をラップした mysql2 は非同期処理ができます。非同期処理の実装の仕方が Promise を使うか Bluebird を使うかの違いみたいです。
vscode では、await
を使用時に非同期処理できなかったらawait
のa
に黄色の下線がでてきて、'await' は、この式の型に対しては効果がありません。
と表示されます。非同期処理できるときには、なにも表示されません。
画像のように、まったく同じ処理でも、非同期処理が可能かどうかが異なることがわかりました。
余談ですが、個人的には「非同期処理できない(同期処理のみ)の場合でもasync/await
を使えば順番通りに動作するから関係ないのでは?」と思ったときがあります。
しかし、どうやら同期処理は node.js のパフォーマンスを低下させますが、非同期処理で同期的に動作させてもパフォーマンスは下がらないみたいです。
なので、非同期処理ができないパッケージはなるべく避けたほうがよさそうですね。
具体的な処理はなにもしていませんが、今回のソースコードはこちら
参考
Discussion