Word Office Javascript API 性能

问题描述 投票:0回答:1

我想开发一个Word Addinn。通过它,我可以浏览 Word 文档的段落并自定义文档的格式。我想将单词的元音涂成红色。我已经开发了一个原型。然而,这并不是特别快,因为所有内容都是同步处理的。我还没有找到异步执行处理的方法。

有效

export async function run() {
  return await Word.run(async (context) => {
    const start = performance.now();

    const paragraphs = context.document.body.paragraphs;
    paragraphs.load("text");

    await context.sync();

    for (let i = 0; i < paragraphs.items.length; i++) {
      const paragraph = paragraphs.items[i];
      if (paragraph.text) {
        const wordsRangeCollection = paragraph.getRange().split([" "]);
        wordsRangeCollection.load("$none");
        await wordsRangeCollection.context.sync();

        console.log(wordsRangeCollection.items);
      }
    }

    await context.sync();

    const end = performance.now();
    console.log(`Execution time: ${end - start} ms`);
  });
}

不工作

失败
word-web-16.00.js:25 未捕获(承诺)RichApi.Error

export async function run() {
  return await Word.run(async (context) => {
    const start = performance.now();

    const paragraphs = context.document.body.paragraphs;
    paragraphs.load("text");

    await context.sync();

    await Promise.all(
      paragraphs.items.map(async (paragraph) => {
        if (paragraph.text) {
          const wordsRangeCollection = paragraph.getRange().split([" "]);
          wordsRangeCollection.load("$none");
          await wordsRangeCollection.context.sync();

          console.log(wordsRangeCollection.items);
        }
      })
    );

    await context.sync();

    const end = performance.now();
    console.log(`Execution time: ${end - start} ms`);
  });
}
ms-word office-js office-addins word-addins word-web-addins
1个回答
0
投票

您的两个实现都有一个循环中的

context.sync
。 (
map
方法是变相的循环。)这是一个性能杀手。请使用本文中的技术使
context.sync
脱离循环:避免在循环中使用 context.sync 方法

© www.soinside.com 2019 - 2024. All rights reserved.