c# - svg2png 性能

标签 c# node.js asp.net-core asp.net-core-2.0

我对 svg2png 的速度有困难,想知道是否有任何方法可以改进它。我正在使用 D3 创建雷达图。这一切都是由 Node.js 在 jsdom 中呈现的。使用 svg2png 将生成的 SVG 转换为 PNG。这样做的目的是将图像插入到提供给最终用户的报告中。应用程序中使用了渲染雷达图的相同 JavaScript(无需 Node.js),并且运行速度非常快。

使用.NET core 2.1和Node.js v8.11.2

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

调用 Node 服务;

public async Task<string> GetRadarChartAsync(dynamic options)
{          
  return await _nodeServices.InvokeAsync<string>("./wwwroot/js/node-radar-chart.js", options);
}

像这样调用并提取 base64 图像。

Task<string> result = (Task<string>)mapped_function.DynamicInvoke(objects.ToArray<object>());
string img_base64 = result.Result;

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));

}

2018 年 8 月 14 日更新

之前错误地将此问题标记为 Node 和 .NET Core 2.1 之间的调用问题。进一步调查显示 svg2png 导致了该问题。

进一步更新

问题可能是由于 svg2png 使用 PhantomJS 造成的。提议的想法是允许 svg2png 在多次调用中使用相同的 PhantomJS 实例,但目前还没有关于此问题的开发。请参阅svg2png github .

我必须解决速度问题,直到出现更好的解决方案。

最佳答案

当我尝试NodeServices samples on GitHub时(尤其是服务器端渲染)那么使用 .NET 2.0 时调用时间最少为 1 秒。当我用 .NET 2.1 尝试时,如果我没记错的话,我认为它减少到了 100 毫秒或更短。因此,NodeServices 调用时间可能从 2.0 到 2.1 得到了巨大的改进。

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

关于c# - svg2png 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51814060/

相关文章:

Node.js "net"连接负载平衡

node.js - AWS Lambda Cryptic Node.js 错误 : Unknown application error occurred

asp.net - 如何添加对 ASP.NET Core 1.0 MVC 项目的项目引用

razor - 项目中不存在目标 "ResolveTagHelperRazorGenerateInputs"

c# - 如何从sql日期中删除时间

c# - 如何在 Winforms Chart 中填充 3D 图表

ruby-on-rails - 启动 Rails Server 时启动 NodeJs

c# - 创建引用 ActionFilters、HTTPContext、HTTPException 等的 .Net Standard 库

c# - 我想在将鼠标悬停在 ASP.NET 标签上时显示一条消息

c# - 在 ASP.NET MVC 站点上设置 Wordpress 永久链接