💨

mysqlとmysql-promiseの違いについて

2021/11/22に公開

概要

Node.js のパッケージにmysqlpromise-mysqlがあります。
何が違うのかがわからないので調べてみました。

以下promise-mysqlnpmのページから引用。

原文。

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を使用時に非同期処理できなかったらawaitaに黄色の下線がでてきて、'await' は、この式の型に対しては効果がありません。と表示されます。非同期処理できるときには、なにも表示されません。

画像のように、まったく同じ処理でも、非同期処理が可能かどうかが異なることがわかりました。

非同期処理ができないとき

余談ですが、個人的には「非同期処理できない(同期処理のみ)の場合でもasync/awaitを使えば順番通りに動作するから関係ないのでは」と思ったときがあります。
しかし、どうやら同期処理は Node.js のパフォーマンスを低下させますが、非同期処理で同期的に動作させてもパフォーマンスは下がらないみたいです。
ですので、非同期処理ができないパッケージはなるべく避けたほうがよさそうですね。

具体的な処理はなにもしていませんが、今回のソースコードはこちら。

https://github.com/Msksgm/promise-mysql-example

参考

https://www.npmjs.com/package/promise-mysql

http://bluebirdjs.com/docs/getting-started.html

Discussion