这是我的代码(并且它正常工作):
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();
}
问:有没有办法更快地轮询扫描仪?每次扫描都需要几秒钟,我的用户有大量的条形码可供扫描。
他们曾经用楔子扫描到笔记本电脑,但他们现在想要使用iPad。
编辑:
也许我正在寻找的是第三方解决方案。
答案 0 :(得分:2)
除非你的HTML很大(通过$('#Print')获取DOM节点可能需要一些时间),或者你正在运行应用程序很长时间(在这种情况下.append可能会变慢,因为它永远不会被清除),你的JavaScript代码没有任何问题。事实上,我假设延迟来自你的条形码插件,而不是你的JavaScript处理程序。
在做任何其他事情之前,你应该检查我的假设是否正确,并且延迟实际发生在.barcodeScanner.scan()调用和mySuccess()/ myFailure()函数之间。
PhoneGap似乎正在使用ZXing("Zebra Crossing"),这是一个既定的标准。如果这还不够快,您可能想尝试其他库:
但可能是移动相机中自动对焦的速度不足以满足您的要求,而且您需要基于激光的硬件。 This link有许多与硬件接口的产品。
答案 1 :(得分:2)
如果您使用的是cordova http://ngcordova.com/docs/plugins/barcodeScanner/
中的官方插件你可以让iOS更快,
在您的XCode项目中,转到plugins文件夹,然后打开CDVBarcodeScanner.mm
更改此行:
captureSession.sessionPreset = AVCaptureSessionPresetHigh;
有:
captureSession.sessionPreset = AVCaptureSessionPresetMedium;
答案 2 :(得分:1)
在以前的工作中,我曾经为条形码扫描仪制造商CipherLab工作。
首先,您需要澄清扫描仪本身不是很慢,而是应用程序读取它。扫描仪性能本身在某种程度上是价格的函数。如果你有一个便宜的扫描仪,它可能会更慢,花钱在一个漂亮的扫描仪将提高性能和适应性(读取损坏/污迹/脏条形码的能力)。仅供参考,大多数移动扫描仪没有像@Hazzit建议的“自动对焦”,但有一个固定的预聚焦镜头,针对特定的距离范围进行了优化。如果它是成像扫描仪(不是激光)点,条形码处的扫描仪确实关闭并将其拉回,直到扫描仪读取为止。如果最终用户正在扫描大量条形码,他们将很快记住“最佳点”。激光扫描仪只能读取一维条码,但可能更快,能够从更远的距离拾取。
扫描仪插件似乎同步执行(阻止JS直到获得条形码)。该库中是否有其他功能可以异步使用扫描仪?如果没有,请考虑查看其他SDK,看看是否有其他人允许异步使用条形码扫描器。
可能有些小,但我会尝试将您的DOM操作JS与扫描程序代码分开。 DOM操作可能很慢,具体取决于DOM结构,选择器和您正在做的事情。
如果您可以异步访问扫描程序,您可以解除这些并在可能的情况下执行所有DOM操作,如果扫描程序在等待下一个条形码时没有阻塞(基本上是在您启动之后的UI更新)扫描仪接受下一个条形码。)
现在键盘楔形扫描仪显然可以快速输入数据,无论应用程序是否已准备就绪,或者能够跟上按键。这将很快,但缺乏应用程序级别控制。
你可以使用蓝牙条码扫描器作为HID设备(在现代技术中基本上是“键盘楔”),它将完全按照上面提到的方式工作。快速,仍然缺乏硬件的应用程序级别控制。
当然,许多蓝牙库也支持SPP串口蓝牙配置文件,它可以为您提供应用程序级控制。您可以发送扫描仪命令/配置,然后读回扫描数据。
这是您的SDK工具发挥作用的地方。它们只是读取/写入蓝牙串行端口(扫描仪)以轮询扫描的条形码。这可能非常快,但取决于SDK的质量。我不是iOS程序员,对该特定平台一无所知,但我知道在windows中他们是访问串口的高级方法和性能更高的低级方法。
无论如何,如果你想要的话,你仍然可以选择回到键盘楔形的方式!我以为我会指出这一点。
此键盘楔形模式中,通常使用快捷键为扫描仪数据添加前缀。大多数扫描仪可以在扫描数据的开头或结尾插入一些额外的击键。例如,您可以将扫描仪配置为键入F3+{barcode data}+Enter
并让您的页面监视该快捷方式,将焦点移至正确的输入框,然后接受数据。
如果所有其他方法都失败了,你就无法获得所需的性能......唯一的方法就是为iOS编写本机应用程序。虽然高级工具很棒,但无论如何(无论是硬件访问还是UI性能),您都无法获得本机应用程序的性能。