ちょっとした経緯で、JavaScriptにおけるメモリーリークを調べることとなりました。
C言語だとメモリーリークは分りやすいですが、JavaとかC#になるとガベージ・コレクションになるので、本来的にはメモリー管理から開放されるはずですが、そうでもないようです。
また、JavaとJavaScriptでも少し、ポイントが違いそうです。
ちょっとググってみて、こちらに当りました。
4 Types of Memory Leaks in JavaScript and How to Get Rid Of Them
JavaScriptだと、変数定義しなくても使えてしまいますが、そのあたりで、グローバルスコープになったりするようです。関数定義した場合も、うっかりで発生しがち。
GCなのにメモリーリークが発生する経緯にも触れられており、ポイントも4つに絞っているので、最初に読むには良い感じです。
AngularJSに特化していますが、次の記事も秀逸です。
Fixing Memory Leaks in AngularJS and other JavaScript Applications
jQuery含めた、他のライブラリーとの共用によるメモリーリーク発生のメカニズム等、こちらも分りやすく書かれています。デバッグ手法にも触れられており、参考になります。
こちらもケースが限られていますが、サーバーとの同期に関するメモリーリークがこちら。
Simple Server Polling in AngularJS Done Right
サーバーからのデータロードに失敗した場合のハンドリングを正しくしないと、メモリーリークが発生するという話です。
JavaScriptは手軽にコーディングでき、サードパーティーのライブラリーも充実しているだけに、C言語よりも遥かに問題特定に時間がかかる印象を受けました。
そう言えば、V4あたりのVisual Basicも、結局はSet XX = Nothingとしないとメモリー開放されなかったり、C言語の動きを理解していないといけなかったのを思い出しました。
プログラミングも、楽になったようで、環境が複雑になった分、いろいろと別の課題が出てきているようです。
具体的な デバッグはこれからですが、備忘録がてら、書いておきます。
2017年5月31日水曜日
2017年5月23日火曜日
JavaScriptをテストする
最近は、MEANだか何だかで(ってもうだいぶ経ちますね)、JavaScriptがいろいろと役に立つようです。node.jsだとサーバーサイドもJavaScriptで、JavaとJavaScriptの違いもようやく理解できてきました。
そんな中、JavaScriptってどうやってテストするのかな、JavaだとJUnitだったけど、、、と思い立ち、ちょっと調べてみました。
こちらには、各種言語の単体テスト用フレームワークが揃っていて、勉強になります。
List of unit testing frameworks
COBOLやFORTRAN、C/C++用のものもあって、便利な世の中になったなーと隔世の感があります(といっても、実業務では、過去の資産用に、リグレッションテスト用にテストスクリプトを用意する、なんてことは易々とはいかず、現実にはいろいろと苦労がありますが)。
JavaScriptは最近の言語なので、いくつも用意されていますね。サーバーサイドもJavaScriptの可能性があるので、クライアント/サーバー双方をカバーしているものが対象ですが、どれがよいか、迷ってしまいます。
こちらのサイトでは、そんな中、QUnit、YUI Test、JSTestDriverを取り上げていました。
JavaScript のユニット・テストを実行するためのツール
記事を読むと、QUnitは、jQuery開発チームでも利用されているようです。
node.jsでも使えるようなので、まずは選択候補でしょうか。
QUnit: A JavaScript Unit Testing framework.
YUI Testは、Yahooの提供するAPIのようで、インターネット接続環境が必要そう。
3つ目の、JSTestDriverは、複数ブラウザーでの動作確認が出来ます。ブラウザー対応確認にはちょうどよい感じです。
ググってみると、以下の記事に当りました。どうやら、Eclipse環境でJavaScriptをテストするのに使えるようです。
eclipseでJavaScriptの単体テストをする
あと、ちょっと変った記事としては、
JUnit(Java)でJavaScriptをテストする。
でしょうか。JUnitに慣れている方、JavaとJavaScript両方を同じ方式でテストするには、JUnitという選択肢もあるかもしれません。
個人的には特に縛りはないので、まずはQUnitあたりに手を出してみようかと思ったのですが、こんな記事も見つけてしまいました。
Testing the MEAN stack
Karmaってのが書いてあります。 JasmineやMochaにも言及しつつ、Karmaを薦めているようです。
AngularにはProtractorというEnd to Endのテストツールもあるようです。
Testing AngularJS With Protractor and Karma - Part 2
もう少し読み解いて、何が良いのか見極めたいのですが、とりあえず今日は備忘録がてらここまで。
そんな中、JavaScriptってどうやってテストするのかな、JavaだとJUnitだったけど、、、と思い立ち、ちょっと調べてみました。
こちらには、各種言語の単体テスト用フレームワークが揃っていて、勉強になります。
List of unit testing frameworks
COBOLやFORTRAN、C/C++用のものもあって、便利な世の中になったなーと隔世の感があります(といっても、実業務では、過去の資産用に、リグレッションテスト用にテストスクリプトを用意する、なんてことは易々とはいかず、現実にはいろいろと苦労がありますが)。
JavaScriptは最近の言語なので、いくつも用意されていますね。サーバーサイドもJavaScriptの可能性があるので、クライアント/サーバー双方をカバーしているものが対象ですが、どれがよいか、迷ってしまいます。
こちらのサイトでは、そんな中、QUnit、YUI Test、JSTestDriverを取り上げていました。
JavaScript のユニット・テストを実行するためのツール
記事を読むと、QUnitは、jQuery開発チームでも利用されているようです。
node.jsでも使えるようなので、まずは選択候補でしょうか。
QUnit: A JavaScript Unit Testing framework.
YUI Testは、Yahooの提供するAPIのようで、インターネット接続環境が必要そう。
3つ目の、JSTestDriverは、複数ブラウザーでの動作確認が出来ます。ブラウザー対応確認にはちょうどよい感じです。
ググってみると、以下の記事に当りました。どうやら、Eclipse環境でJavaScriptをテストするのに使えるようです。
eclipseでJavaScriptの単体テストをする
あと、ちょっと変った記事としては、
JUnit(Java)でJavaScriptをテストする。
でしょうか。JUnitに慣れている方、JavaとJavaScript両方を同じ方式でテストするには、JUnitという選択肢もあるかもしれません。
個人的には特に縛りはないので、まずはQUnitあたりに手を出してみようかと思ったのですが、こんな記事も見つけてしまいました。
Testing the MEAN stack
Karmaってのが書いてあります。 JasmineやMochaにも言及しつつ、Karmaを薦めているようです。
AngularにはProtractorというEnd to Endのテストツールもあるようです。
Testing AngularJS With Protractor and Karma - Part 2
もう少し読み解いて、何が良いのか見極めたいのですが、とりあえず今日は備忘録がてらここまで。
登録:
投稿 (Atom)