1

仕事のために毎日確認しなければならないログ ファイルが多数あります。これらのログ ファイル用の優れたパーサーがいくつか既に存在しますが、必要なものを正確に見つけることはまだできていません。さて、あなた以上にあなたに合わせたものを誰が作ることができるでしょうか?

私が JavaScript を使用している理由 (既に知っているという事実以外) は、移植性があり (何もインストールする必要がない)、同時にクロスプラットフォームでアクセスできるためです。これに時間をかけすぎる前に、これは私の目標を達成するためのひどい方法ですか?

  1. 入力は [x] で区切られたテキスト ファイルに入力され、静的コンテンツを取得するよりも高速にこれらの値にアクセスできるように、値が配列に入れられます。
  2. 関数が使用されるたびにこのステップが繰り返されるのを防ぐために、値を配列に入れる前に特別なフォーマット (数値、日付など) が処理されます。
  3. これらのログには 10 万行以上の行が含まれる場合があり、ブラウザーが処理するには膨大な量になります。ただし、各行には大量の情報が含まれているわけではありません。
  4. 私はすでにいくつか書いていますが、10,000 行でも実行が遅くなり始めており、それが十分に効率的でないためなのか、それとも効果的に実行できないためなのかわかりません。これは、すべてのデータが 1 つの巨大なテーブルにあるためだと思います。ページ番号を付けたほうがいいかもしれませんが、それは望ましいことではありません。

質問 1: 考慮すべきことで、言及しなかったことはありますか?
質問 2: より良い代替案をお勧めしますか?
質問 3: (トピックから少し外れているので、無視してかまいません)。入力をコピーして貼り付ける代わりに、ログ ファイルを「開く」ようにしたいのですが、私の知る限り、JavaScript ではこれを行うことができません (セキュリティ上の理由から)。実際にアップロードするサーバーがなくても、これは input="file" で実現できますか? SSJS がどのように機能するかはわかりませんが、JavaScript の制限を過小評価していたようです。

これが少し漠然としていることは理解していますが、私の質問に答えるために本を読まなくても済むようにしています。追加の詳細を含める必要がある場合はお知らせください。ありがとう!

4

3 に答える 3

3

これにはJavaScriptが「良い」選択だと思います。個人使用のためにスクリプト言語を使用してログ ファイルを解析することは、完全に健全な決定です。

ただし、これにはブラウザを使用しません。Web ブラウザーは、JavaScript の一部を実行できる時間、実行できる命令の数、またはその両方に制限を設けています。これらの制限を超えると、次のようになります。

スクリプトが長すぎる

大量のデータを扱うことになるので、遅かれ早かれこれにぶつかると思います。これは、setTimeout を賢く使用するか、場合によっては Web ワーカーを使用することで回避できますが、プロジェクトが複雑になります。これはおそらくあなたが望むものではありません。

JavaScript はブラウザの外部でも実行できることに注意してください。たとえば、Windows にはWindows Script Hostが付属しています。これにより、ブラウザーを必要とせずに、コマンド プロンプトから JavaScript を実行できます。「スクリプトが長すぎます」というエラーは表示されません。追加のボーナスとして、ファイル システムに完全にアクセスでき、コマンドライン引数をコードに渡すことができます。

幸運と幸せなコーディング!

于 2011-05-06T20:09:16.123 に答える
2

一番上の質問に太字で答えるには:いいえ、それはひどい考えではありません。

JSが唯一の言語である場合は、依存関係の設定を避け、プラットフォームに依存しないようにします...JavaScriptは特定のケースに適しているようです。

より一般的なルールとして、私はデスクトップアプリを作成するための言語としてJSを使用することは決してありません。特に、ログの解析などのタスクを実行する場合は対象外です。Python、Scala、VBなど、このタイプの問題により適した言語は他にもたくさんあります。スクリプトのような動作と最小限のセットアップ要件のため、PythonとScalaについて説明します。PythonもJSと非常によく似た構文を持っているので、他の言語よりも簡単に理解できるかもしれません。Visual Studioライセンスをお持ちの場合は、VB(または任意の.NET言語)も機能します。これは、GUIビルダーがニーズに合っていれば、使いやすいためです。

私が提案するアプローチ:既存のフレームワークを使用します。数千とは言わないまでも数百のログパーサーがあり、あらゆる種類のユースケースとさまざまな形式のログを処理して、必要なものに近いものを見つけることができるはずです。動作するものを見つけるには、Googleの「ログパーサー」よりも少し手間がかかる場合があります。正確なニーズに合ったものが見つからず、自分で作成することに時間を費やしても構わないと思っている場合は、代わりにその時間を使用して、オープンソースである既存のものの1つに貢献する必要があります。10億回の再発明を試みる前に、既存のコードベースを拡張することを常に検討する必要があります。

于 2011-05-06T20:04:52.170 に答える
1

あなたの不変条件「javascript、クロスプラットフォーム、ブラウザUI、できるだけ速く」を考えると、私はこのアプローチを検討します:

  1. コマンド ライン スクリプト (Windows: JScript; Linux: ?) を使用して、ログ ファイルを解析し、「クリーン」/関連データを SQLite データベースに格納します (フォールバック: 適切なスクリプト言語でこれを実行できます。既製の/専用ツールを使用できます)。それも)
  2. SQLite Manager アドオンを使用して、SQL でデータ マイニングを行います
  3. (2) が不器用な場合 - SQLite Manager コード ベースを使用して「よりカスタマイズされたものを作る」

あなたのコメントを考慮して:

Windows のみの作業では、VS Expressエディションを使用して、C#、VB.NET、C++/CLI、F#、または (一種の) Javascript (Silverlight) でアプリを作成できます。「従来の」Javascript とブラウザーに固執したい場合は、.HTA アプリケーション (ローカル マシンへのフル アクセス) を作成し、ADO データ (ベース) アクセスを使用して、(古い) DataGrid/Flexgrid コントロールの取得を試みます (それらはすでにインストールされている場合、レジストリを検索してください)。

于 2011-05-06T20:21:06.363 に答える