2017-08-29 46 views
1

我已经编写了一个应用程序node.js,该应用程序从用户处获得输入并基于少量模板生成pdf文件。如何以异步方式使用pdfkit npm

我为此使用了pdfkit npm。我的应用程序正在生产中运行。但是我的应用程序是非常缓慢的,下面是原因:

我面临什么问题:

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

我无法更改库,为什么?

  • 我已经在js中为pdfkit编写了40个模板。每个模板都是1000 - 3000行。
  • 如果我将更改库,我必须根据新库重写这些模板。
  • 需要好几个月才能正确地重写和测试它。

我现在使用的是哪种解决方案:

  • 我现在管理一个队列,只要有请求来它得到了排队和令人满意的消息在响应用户送回去。

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

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

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

  • 任何方式,通过它我可以把这个应用程序的多线程/异步的,因此,这将是能够处理上的时间多的要求,而不会阻塞的资源?

请救我一命。

回答

0

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

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

您的程序一次可以处理多少个PDF代?你在运行什么类型的硬件?如果一秒钟的请求失败,那么可能是一个编程修复。

对于节点,可以使异步越多越好。例如,任何时候你正在阅读一个文件,它应该是异步的。

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