评论人:bendlas
似乎sax-js不支持流处理...
我不太理解这一点:SAX实际上是“流式XML API”的缩写,查看其README示例,我预计它应该在调用final .close之前允许进行多个.write调用,并传入部分块
有哪些好的流式Node解析器选项可以构建在它们的之上?
我所找到的所有各种流式解析器都是基于sax-js构建的,所以我将选择它。
对使用懒序列的流式处理的支持将非常好!
关键是:懒序列在JavaScript中不是IO的选项,因为JavaScript中的一切都是非阻塞的。所以在Java中,你可以愉快地阻塞你的线程,等待懒序列的.next中的输入,但在JavaScript中你无法这样做。据推测,Node.js中可能有阻塞IO的选项,但是由于Node程序的单线程性质,这仍然很糟糕。这也是为什么没有JS的XML Pull API(StAX)存在的理由。
data.xml是基于StAX构建的,因为它非常适合懒序列,因为当时在Clojure中进行流式处理的首选方式就是这样。另一方面,SAX是一个推送模型,这对于JavaScript来说是一个很好的选择,因为你的程序是由输入IO驱动的。
最近,Clojure通过transducers为推送流提供了坚实的支持。我在思考基于transducers构建data.xml的可能性,这样就可以统一支持StAX和SAX源。作为额外的好处,这有可能通过减少中间分配来使data.xml更快。