4

これが私のコードです(そして正しく動作しています):

document.addEventListener('deviceready', myDeviceReady, false);
function myDeviceReady() {
    $('#Print').append('Device is ready');
    function Scan() {
        try {
            $('#Print').append('Scanning')
            window.plugins.barcodeScanner.scan(mySuccess,myError);
        } catch (myCatch) {
            $('#Print').append('catch: ' + myCatch)
            Scan();
        }   
    }
    function mySuccess(result) {
        if (result.cancelled) {
            $('#Print').append('The user cancelled the scan.')
        } else {
            $('#Print').append(result.text);
            $('#Print').append(result.format);
        }
        Scan();
    }

    function myError(error) {
        $('#Print').append('Scanning failed: ' + error);
        Scan();
    }
    Scan();
}

Q: スキャナをもっと速くポーリングする方法はありますか? スキャンごとに数秒かかり、ユーザーは大量のバーコードをスキャンしています。

以前はウェッジを使ってラップトップにスキャンしていましたが、今は iPad を使用したいと考えています。

編集:

たぶん、私が探しているのはサードパーティのソリューションです。

4

3 に答える 3

3

HTML が巨大である場合 ($('#Print') を介して DOM ノードを取得するのに時間がかかる場合)、またはアプリを長時間実行していない限り (この場合、.append が遅くなる可能性があります。 JavaScript コードに問題はありません。実際、遅延は JavaScript ハンドラーではなく、バーコード プラグインに起因すると考えられます。

他のことを行う前に、私の仮定が正しいかどうかを確認する必要があります.barcodeScanner.scan() 呼び出しと mySuccess()/myFailure() 関数の間で遅延が実際に発生します。

PhoneGapは、確立された標準であるZXing ( 「Zebra Crossing」 ) を使用しているようです。それが十分に速くない場合は、別のライブラリを試してみてください:

しかし、モバイル カメラのオートフォーカスの速度が要件を満たしていない可能性があり、レーザー ベースのハードウェアが必要です。このリンクには、ハードウェアと連動する多数の製品があります。

于 2013-03-01T16:35:59.960 に答える
1

以前の仕事では、バーコード スキャナーのメーカーであるサイファーラボで働いていました。

バーコードスキャナーについて

最初に、遅いのはスキャナー自体ではなく、それを読み取るアプリケーションであることを明確にする必要があります。スキャナの性能自体は、ある程度価格の関数です。安価なスキャナーを入手した場合、速度が遅くなる可能性があります。優れたスキャナーにお金を費やすと、パフォーマンスと適応性 (損傷/汚れ/汚れたバーコードを読み取る機能) が向上します。参考までに、@Hazzit が示唆するように、ほとんどのモバイル スキャナーには「オート フォーカス」はありませんが、特定の距離範囲に最適化された固定のプリフォーカス レンズがあります。イメージング スキャナー (レーザーではない) の場合は、スキャナーをバーコードに近づけ、スキャナーが読み取るまで引き戻します。エンド ユーザーは、大量のバーコードをスキャンしている場合、「スイート スポット」をすぐに覚えてしまいます。

JS コードについて

スキャナー プラグインが同期的に実行されているようです (バーコードを取得するまで JS をブロックします)。そのライブラリには、スキャナーの非同期使用を可能にする別の機能がありますか? そうでない場合は、他の SDK を調べて、バーコード スキャナーの非同期使用が許可されているかどうかを確認してください。

多少マイナーかもしれませんが、DOM 操作 JS をスキャナーコードから分離しようと思います。DOM 構造、セレクター、および実行内容によっては、DOM 操作が遅くなる可能性があります。

スキャナーへの非同期アクセスを取得できれば、次のバーコードを待機している間にスキャナーがブロックされていなければ (基本的には、スキャナーを開始して受け入れた後の UI 更新)、これらを切り離してすべての DOM 操作を「可能な場合」に実行できる可能性があります。次のバーコード)。

キーボード ウェッジ スキャンについて

現在、キーボード ウェッジ スタイルのスキャナーは、アプリの準備ができているか、キーストロークについていけるかに関係なく、タイピングと同じ速さでデータを送り込んでいることは明らかです。これは高速ですが、アプリケーション レベルの制御が不足しています。

Bluetooth バーコード スキャナーを HID デバイス (現代のテクノロジーでは本質的に「キーボード ウェッジ」) として機能させることができ、上記とまったく同じように機能します。高速ですが、ハードウェアのアプリケーション レベルの制御がまだ不足しています。

もちろん、これらの bluetooth ライブラリの多くは、アプリケーション レベルの制御を可能にする SPP シリアル ポート bluetooth プロファイルもサポートしています。スキャナー コマンド/構成を送信してから、スキャンしたデータを読み取ることができます。

ここで、SDK ツールが活躍します。それらは、スキャンされたバーコードをポーリングするために、Bluetoothシリアルポート(スキャナー)に対して単純に読み取り/書き込みを行います。これは非常に高速になる可能性がありますが、SDK の品質に依存します。私は iOS プログラマーではなく、その特定のプラットフォームについて何も知りませんが、Windows では、シリアル ポートにアクセスする高レベルの方法と、はるかにパフォーマンスの高い低レベルの方法があることを知っています。

いずれにせよ、必要に応じて、キーボード ウェッジの方法に戻るオプションがまだあります。私がそれを指摘すると思っただけです。

また、このキーボード ウェッジ モードでは、スキャナ データの前にショートカット キーを付けるのが一般的です。ほとんどのスキャナーは、スキャンしたデータの最初または最後に追加のキーストロークを挿入できます。たとえば、スキャナーを構成F3+{barcode data}+Enterして、そのショートカットを入力してページを監視し、フォーカスを正しい入力ボックスに移動してから、データを受け入れることができます。

他のすべてが失敗した場合

他のすべてが失敗し、必要なパフォーマンスが得られない場合...唯一の方法は、iOS 用のネイティブ アプリを作成することです。高レベルのツールは優れていますが、(ハードウェア アクセスまたは UI パフォーマンスのいずれかで) ネイティブ アプリのパフォーマンスを得ることはできません。

于 2013-03-01T17:45:54.090 に答える