如何以asynchronous方式使用pdfkit npm

我已经在node.js编写了一个应用程序,该应用程序从用户接收input并基于less量模板生成pdf文件。

我正在使用pdfkit npm来达到这个目的。 我的应用程序正在生产中运行。 但是我的申请很慢,下面是原因:

我面临什么问题:

  • 它以同步的方式工作。 我可以通过给出一个例子来解释它 – 假设一个请求来到应用程序生成一个PDF,正在开始处理,并在处理后返回与生成的PDF url的响应。 但是,如果有多个请求到达服务器,它将逐个处理每个请求(以同步的方式)。
  • 队列中的所有请求必须等待,直到前一个完成。
  • 我的应用程序给出超时内部服务器错误的最长时间。

我无法改变图书馆,为什么?

  • 我已经在js中为pdfkit写了40个模板。 而每个模板是1000 – 3000行。
  • 如果我将更改库,我必须根据新库重写这些模板。
  • 要花好几个月的时间才能正确地重写和testing。

现在我正在使用什么解决scheme:

  • 我现在正在pipe理一个队列,一旦请求到来,它就排队等候,并回复一个令人满意的消息回应用户。

为什么这个解决scheme不可行?

  • 用户在成功申请时应提供有效的pdfurl。 但是在队列方式中,用户只能得到确认消息。 而PDF正在稍后处理队列中。

我正在寻求什么样的解决scheme?

  • 任何方式,我可以使这个应用程序multithreading/asynchronous,以便它将能够处理多个请求,而不会阻止资源?

请救我一命。

我讨厌把它分解给你,但是按照任务顺序进行计算是节点的一个非常基本的部分。 这听起来像加载这些模板是CPU绑定的任务,并且由于节点是单线程的,它会按照它们进来的顺序将这些模板closures。

另一方面,任何框架都会有类似的问题。 节点是单线程意味着它实际上是非常有效的,因为它不会损失上下文切换的周期。

你的程序能同时处理多less个PDF代? 你在运行什么types的硬件? 如果一秒钟的请求失败,那么可能是编程修复。

对于节点,可以使asynchronous越多越好。 例如,您在读取文件时,应该是asynchronous的。

你可以发布你的一个PDF创build请求函数的代码吗?