teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

試してみたこと追加。タイトルの誤字修正

2019/08/01 09:12

投稿

SystemAjisai
SystemAjisai

スコア174

title CHANGED
@@ -1,1 +1,1 @@
1
- chokidarでフォルダ内のファイル更新を監視したい
1
+ chokidarでフォルダ内のファイル更新を監視したい
body CHANGED
@@ -17,8 +17,7 @@
17
17
 
18
18
  というのが目的です。
19
19
  とくに後者について、今は対象のフォルダ(カテゴリ―等で分かれて最大3階層)内を全部捜索して、更新日付が一番新しいものを特定しています。
20
- 当日中に複数回計測対象が変わるとフォルダ違いで同日のファイルが存在している場合もあるため、
20
+ 当日中に複数回計測対象が変わるとフォルダ違いで同日のファイルが存在している場合もあるため、サーバーにファイルを送る処理のたびにこの処理を行っています。
21
- サーバーにファイルを送る処理のたびにこの処理を行っています。
22
21
  どんどんファイルが増えていくとこの処理の速度が不安なので、最低限ここだけでもクリアしたいと思っています。
23
22
 
24
23
  それでNode.jsモジュールの[chokidar](https://github.com/paulmillr/chokidar)を使ってファイルの更新・追加が監視可能か、下記のようなサンプルを作ってみました。
@@ -90,7 +89,26 @@
90
89
  と書いてあり、ポーリングを回避することでCPU使用率が下がるという事は、`usePolling:true`にすると負荷が上がるのかなぁと思い、できれば`false`の状態で動く方法がないか模索しています。
91
90
  (実際に`usePolling:true`で動かすとCPU使用率は30%前後なのですが、全部の端末にアクセスできる環境ではなく、テストしたものよりもファイル数が多く古い端末もあるので警戒しています)
92
91
 
92
+ **fs.watchを使ったらどうなるか(19/8/1追記)**
93
+ 上記で自分が引用した部分に
93
94
 
95
+ > On other platforms, the fs.watch-based implementation is the default,
96
+
97
+ とあったのを完全に見落としてたので意味ない実験な気がしますが、chokidarを使わず`fs.watch`を使ったらどうなるのかやってみました。
98
+ ```javascript
99
+ var fs = require('fs');
100
+ var fsw = fs.watch('(パス)',{
101
+ recursive: true
102
+ }, function(type, filename){
103
+ console.log(type + ' ' + filename);
104
+ });
105
+ ```
106
+ 結果は
107
+ ・更新されているファイルは2~4分に1回しかログがでない
108
+ ・手動で更新したファイルのログは即座にでる
109
+ ・たまーーーに(1時間に1回ぐらい)何にも変わってないフォルダのchangeログがでる
110
+ という結果でした。
111
+
94
112
  ### 補足情報(FW/ツールのバージョンなど)
95
113
  Windows 7 または Windows10
96
114
  Node.js 10.15.1