首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >svg2png性能

svg2png性能
EN

Stack Overflow用户
提问于 2018-08-13 01:05:54
回答 2查看 540关注 0票数 1

我对svg2png的速度有困难,我想知道是否有任何方法来改进它。我正在使用D3创建一个雷达图表。这都是由Node.js在jsdom中呈现的。生成的SVG将使用svg2png转换为PNG。这样做的目的是将图像插入到提供给最终用户的报告中。呈现雷达图的同样的javascript在应用程序中使用(没有node.js),工作速度非常快。

使用.NET核心2.1和Node.js v8.11.2

将svg转换为png所需的时间大约为2-3秒.

节点服务的调用;

代码语言:javascript
复制
public async Task<string> GetRadarChartAsync(dynamic options)
{          
  return await _nodeServices.InvokeAsync<string>("./wwwroot/js/node-radar-chart.js", options);
}

它是这样被调用的,并且提取了base64图像。

代码语言:javascript
复制
Task<string> result = (Task<string>)mapped_function.DynamicInvoke(objects.ToArray<object>());
string img_base64 = result.Result;

javascript包装器如下所示;

代码语言:javascript
复制
module.exports = function(callback, options, data) {

   const dom = new JSDOM(`<!DOCTYPE html><div id="body" class="radar-chart"></div>`); 

   var options1 = {
       window: dom.window,
       selector: '.radar-chart',
       data: JSON.parse(data.radar)
   }

   var options_combined = Object.assign(options1, options);

   var chart1 = new RadarChart(options_combined);

   // Convert SVG to PNG and return it to controller
   var svgText = chart1.html();

   svg2png(Buffer.from(svgText))           
      .then(buffer => buffer.toString('base64'))
      .then(buffer => callback(null, buffer));

}

更新14/8/18

以前,该问题被错误地称为节点和.NET Core2.1之间的调用问题。进一步的调查显示,svg2png是造成这一问题的原因。

进一步更新

问题很可能是由于svg2png使用PhantomJS造成的。建议的想法是允许svg2png在多个调用中使用相同的PhantomJS实例,但是到目前为止还没有关于这个问题的开发。见svg2png github

我将不得不处理我的速度问题,直到找到更好的解决方案。

EN

回答 2

Stack Overflow用户

发布于 2018-08-13 11:56:36

当我试用NodeServices样本在GitHub上的应用 (特别是服务器端呈现一个)时,使用.NET 2.0时调用时间最少为1秒。当我用.NET 2.1尝试它时,我认为如果我记得正确的话,它会减少到大约100 if或更少。因此,NodeServices调用时间有可能从2.0大幅度提高到2.1。

如果不可能升级,那么也许可以重构,以便只需要调用NodeServices一次。

票数 1
EN

Stack Overflow用户

发布于 2018-08-14 09:20:27

我从未使用过svg2png,但我看到您使用了buffer.toString('base64'),这可能不太有效。我可以想象会发生这样的事情:

  1. 整个缓冲区被读取到最后并同时转换为Base64,而Base64本身在磁盘上的大小方面效率不高(据我所知)。
  2. 然后,整个转换将从Node转移到ASP.NET,我想这里可能会进行一些序列化,这会对大量的Base64内容(?)很慢。

我会考虑在两面使用streams,因为这是通常用于媒体文件的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51814060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档