结合umijs 生成react-pdf 非常慢

mle*_*ter 6 javascript reactjs react-pdf ant-design-pro umijs

我在一个新的 umi 项目中包含了react-pdf

  • PDF 生成 150 个文本组件在没有 umi 的情况下花费了大约 311.44 毫秒
  • 使用 umi:7179.40 毫秒

在 umi 项目中,每个元素都需要大约 10 倍!

我试过的代码示例

import React from "react";
import "./styles.css";
import { Document, Page, pdf, Text, View } from "@react-pdf/renderer";

export default function App() {
  const pdfClickHandler = async () => {
    console.time("PDF generation took:");
    await pdf(
      <Document>
        <Page>
          <View>
            {Array.from(Array(150).keys()).map((key) => (
              <Text key={key}>text-element</Text>
            ))}
          </View>
        </Page>
      </Document>
    ).toBlob();
    console.timeEnd("PDF generation took:");
  };

  return (
    <div className="App">
      <button onClick={pdfClickHandler}>
        Generate fast PDF (without ant-design-pro)
      </button>
    </div>
  );
}
Run Code Online (Sandbox Code Playgroud)

注意:以下示例是ant-design-pro项目。但错误发生在所有umi-js项目中。

当 toBlob 被调用时,幕后发生了什么?

我该如何解决这个问题?

小智 1

我能够修复它:

  1. npm install assert browserify-zlib buffer process stream-browserify util
  2. 修改'plugin.config.ts'(umijs chainWebpack配置)
export default (config: any, { webpack }: { webpack: any }) => {

  // Set alias
  config.resolve.alias.set('process', 'process/browser');
  config.resolve.alias.set('stream', 'stream-browserify');
  config.resolve.alias.set('zlib', 'browserify-zlib');

  // Set plugin
  config.plugin('record').use(webpack.ProvidePlugin, [{
        process: 'process/browser',
        Buffer: ['buffer', 'Buffer'],
  }]);
};
Run Code Online (Sandbox Code Playgroud)