如何以异步方式使用pdfkit npm

时间:2017-08-29 06:44:06

标签: javascript node.js pdf pdfkit node-pdfkit

我在node.js编写了一个应用程序,它从用户那里获取输入,并根据几个模板生成pdfs文件。

我正在使用pdfkit npm用于此目的。我的应用程序正在生产中运行。但我的申请很慢,原因如下:

我面临的问题是什么:

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

我无法更改库,为什么?

  • 我在js中为pdfkit编写了40个模板。每个模板的长度为1000 - 3000行。
  • 如果我要更改lib,我必须根据新库重写这些模板。
  • 重写和测试它需要几个月的时间。

我现在使用的是什么解决方案:

  • 我正在管理一个队列,一旦请求排队,就会发回一条令人满意的消息以回应用户。

为什么这个解决方案不可行?

  • 请求成功后,应向用户提供有效的pdf网址。但在队列方法中,用户只获得确认消息。而pdf正在稍后的队列中处理。

我现在正在寻求什么样的解决方案?

  • 我可以通过哪种方式使这个应用程序成为多线程/异步的,这样它就能够一次处理多个请求而不会阻塞资源?

请拯救我的生命。

1 个答案:

答案 0 :(得分:0)

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

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

您的程序可以同时处理多少代PDF?您运行此类型的硬件是什么类型的?如果它在一秒钟内发生了一些请求失败,则可能存在编程修复。

对于节点,可以使异步越多越好。例如,无论何时读取文件,它都应该是异步的。

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