【问题标题】:How to use pdfkit npm in async manner如何以异步方式使用 pdfkit npm
【发布时间】:2018-02-06 12:22:09
【问题描述】:

我在node.js 中编写了一个应用程序,它接受用户的输入并基于几个模板生成pdfs 文件。

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

我面临什么问题:

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

我无法更改库,为什么?

  • 我用js为pdfkit写了40个模板。每个模板有 1000 - 3000 行。
  • 如果我要更改库,我必须根据新库重写那些模板。
  • 重写和正确测试需要几个月的时间。

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

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

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

  • 请求成功后,应向用户提供有效的 pdf url。但在队列方法中,用户只收到一条确认消息。 pdf 将在队列中稍后处理。

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

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

请救救我。

【问题讨论】:

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


    【解决方案1】:

    我不想告诉你,但是按照任务进来的顺序进行计算是 node.js 的一个非常基本的部分。听起来加载这些模板是一项 CPU 密集型任务,而且由于 Node 是单线程的,它会按照它们进入的顺序将它们从队列中剔除。

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

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

    对于节点,你可以使异步的东西越多越好。例如,任何时候读取文件都应该是异步的。

    您能否发布您的 PDF 创建请求函数之一的代码?

    【讨论】:

      猜你喜欢
      • 2015-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-14
      • 2011-08-22
      • 1970-01-01
      • 2019-05-26
      • 1970-01-01
      相关资源
      最近更新 更多