6

我正在开始一个新项目,它将使用 HTML5 画布呈现复杂的图形。

目前,我们有一个 Windows 窗体实现,我们希望将其迁移到 Web。因此,布局、绘图对象和所有绘图元数据都是在 C# 中生成的。我们只需要实现绘图,我们将使用 HTML5 画布。

服务器端将是 ASP MVC。它将计算绘图模型,并将其发送给客户端。然后客户端将使用画布来表示数据。

问题是绘图模型有时可能很大。也许 10Mb-50Mb 的元数据。将所有绘图数据从服务器发送到客户端的最佳方式是什么?

将模型用于在 JavaScript 中创建绘图对象的页面中的脚本

这将是标准方式。我将使用 C# 中的绘图对象生成一个模型,然后将这些对象转换为 JavaScript。

  • 优点:易于实施
  • 缺点:页面会很重。

从返回绘图数据的控制器返回 JsonResult

例如,我可以使用 jQuery 来获取它。此选项失败,因为我达到了 maxJsonLength 属性。我知道它可以在 web.config 中更改,但这似乎不是一个好主意。3.

  • 优点:易于实现,可以使用 ajax 从服务器加载绘图对象并向用户报告进度。
  • 缺点:更改 Web.config 中的 maxJsonLength 属性似乎不是一个好主意。

使用服务器中的绘图数据生成临时脚本文件并将其包含在客户端页面中

服务器会生成一个JS脚本文件中的绘图数据。然后服务器会将这个页面作为 JavaScript 包含在客户端页面中,因此绘图数据将被加载到客户端中。这种加载也可以使用 ajax 来完成。

  • 优点:就像下载一个文件,如果它很大,那不会有问题。
  • 缺点:更难实施。需要管理临时文件,我们需要知道文件何时传输,然后将其删除。

其他选择

任何其他选项都将受到欢迎,因为我不是 HTML 编程专家。

4

2 回答 2

1

我认为我会采取一些不同的方法。我将使用servicestack,在这里我假设您已将业务轮胎分开。现在,我将使用骨干 jsangular js而不是 canvas 。还有很多其他的 UI 生成框架。现在,使用 require js 之类的库,我只推送 UI 生成所需的详细信息,或者使用 UI 所需的 UI 推送 HTML。所以,这里的速度会更快,页面会更轻。一旦缩小的 Javascript 到达客户端,它将不会加载,而仅用于计算和呈现页面上的 html 部分。单页应用程序将与桌面一样快。差不多就这么多了。我希望这对你有用。我已经添加了链接,如果您需要更多详细信息,请告诉我。

于 2013-01-09T09:26:18.123 回答
0

将繁重的部分(子页面上的脚本和数据)放在轻量级页面的 iframe中,以便可以异步加载繁重的内容。这具有第一个 script-on-page 选项易于实现的优点,同时获得了第三个 load-as-separate-script-file 选项的优点(并且没有临时文件管理缺点)。

在 iframe 加载时,您可以显示加载图像,以便用户知道发生了什么。

于 2012-11-28T15:31:05.240 回答