评论者:bendlas
sax-js似乎不支持流式处理。
我不太理解:SAX实际上是“XML流式API”的缩写,查看其README中的示例,我本以为它可以允许在调用final .close之前进行多次 .write调用,带上部分的数据块。
有什么好的流式Node解析器选项可以基于它进行开发?
我找到的所有流式解析器都是基于sax-js构建的,所以我将选择这个。
使用懒序列实现对流的支持将会很棒!
关键是:懒序列在JS中的IO选项并不是真正可行,因为所有的事情都是非阻塞的。所以在java中,当在懒序列的.next等待输入时,你可以愉快地阻塞线程,而在JS中你不能这样做。大概在Node.js中确实有用于阻塞IO的选项,但这将是Node.js特有的,并且由于Node程序的单线程性质,仍然很糟糕。这也是为什么在JS中不存在XML Pull API(StAX)的原因。
data.xml基于StAX构建,因为它是懒序列的完美匹配,当时Clojure进行流式处理的首选方式。另一方面,SAX是一个推送模型,非常适合JS,因为你的程序是由进入的IO驱动的。
最近,Clojure已经对推送流提供了坚实的基础支持,形式为transducers。我正在考虑将data.xml基于transducers进行构建,这样StAX和SAX来源就可以统一支持。作为额外的好处,这有可能使data.xml更快,因为减少了中间分配。