Cloudflare Workers を使う前に知っておきたい注意点

公開:2021/02/07
更新:2021/02/28
2 min読了の目安(約2300字TECH技術記事

Cloudflare WorkersでNode.jsを動かすためのあれこれをスクラップに残していたのですが、ハマったポイントが多かったのでこちらに整理しておきます。

https://zenn.dev/catnose99/scraps/cd0417a86a6d00

今回やろうとしたのは、Zennのマークダウン→HTML変換のAPIをCloudflare Workersで動かすというものです。試行錯誤の末に断念したのですが、以下でその理由をまとめておきます。

CPUやメモリ、ファイルサイズなどの制限が厳しめ

2021/02/06時点でのCloudflare Workersの制限一覧がこちら。

Limits - Cloudflare Workers

CDNのエッジで動くので、パフォーマンスが良いぶん制限が厳しめです。

  • メモリ上限は128MB
  • スクリプトのサイズ上限は1MB

CPU Runtimeが10ms / 50ms(有料プラン)というのも気になります。CPU Runtimeの詳細には以下のように書かれています。

Most Workers requests consume less than a millisecond. It’s rare to find a normally operating Workers script that exceeds the CPU time limit. A Worker may consume up to 10ms on the free plan and 50ms on the Bundled tier. The 10ms allowance on the free plan is enough execution time for most use cases including application hosting.

There is no limit on the real runtime for a Workers script. As long as the client that sent the request remains connected, the Workers script can continue processing, making subrequests, and setting timeouts on behalf of that request. When the client disconnects, all tasks associated with that client request are canceled. You can use event.waitUntil() to delay cancellation for another 30 seconds or until the promise passed to waitUntil() completes.

つまり50msというのは実際にスクリプトの実行にかかる時間のことで、例えば「外部APIにリクエストして待機してる時間」などはカウントされないようです(良かった)。

ダイナミック・インポートはできない

また、現状ではCloudflare Workers上でダイナミック・インポートをすることができません。

Zennもマークダウン変換ではPrism.jsを使っており、これが最大のネックになりました。Prism.jsではハイライトのルールが言語ごとに分割されており、Node.jsで動かすときにはこれらを必要になったときにダイナミック・インポートすることになります。

あらかじめ全てインポートしておく手も考えられますが、それだと1MBの制限を超えてしまいます。


以上の理由からZennのマークダウン変換APIをCloudflare Workersにデプロイするのは一旦断念しました。Prism.jsをクライアント側で動かせば解決する問題なので余裕ができたら再度検討したいと思います。

参考

https://mizchi.dev/202009122126-cloudflare-workers