0

I'm refactoring an API where there are user profiles from a profiles table and profile images in a separate table. Currently the API queries the profile tables, and then loops through the images table for associated image data (paths etc). There is logic built in that adds a default img path when a profile image isn't set. So if we are displaying 50 profiles there are 51 queries being run.

I'm considering refactoring where the initial profile query joins the image table. I'm now left with two options.

  1. I can loop through the results server side to build the image paths. I will have to loop through them again client side to display the results.
  2. I can loop through the results one time client side and build the image paths there. The path logic is easy and a simple if statement.

It seems 2 would be the logical choice. But is it? I guess this is part of a bigger question of when you are building out APIs and the client side interfaces when do you move code from the server to the client to keep the API fast at risk of slowing down the browser? How do you do this dance? I'm working on another API using Node for the jquery datatables plugin where there needs to be a lot more code to marry the backend, and it's been a bit of a tug of war determining how much I should hand over to the browser. A fast API is of not much use if you are crashing your visitors browsers.

4

3 回答 3

1

对我来说决定的小费是我是否通过暴露组件路径的一部分,以便客户端可以构建它,暴露一些我不想要的东西。

对比

我是通过构建图像路径服务器端来完成客户端可能不需要的工作,还是客户端可能必须重做的工作,例如有时将它们切碎。

在传递比需要更多的数据方面,我没有看到你所说的问题,第一个问题对我来说是最优先的问题。

在这种情况下有点拉伸,但客户端必须知道如何组成图像路径,设置一些约束,而如果这一切都在服务器端完成,则隐藏实现细节。尽管它们很简单,但这将是我的默认选项

正如你所说,这是一场拔河比赛。看待此类问题的另一种方法是,“正确”答案可能取决于您提出问题的时间。你可以走一条路,然后他们稍后会出现一些新的要求,现在它是错误的......

简单和一致是目标。最好的吗?20/20 后见之明。

于 2012-10-15T21:37:25.703 回答
0

当我过去看到并做过这个时,我发现最好不要在数据库中存储图像(就像你正在做的那样)。将它们放在浏览器可以链接到它们并从服务器传递路径的地方。

于 2012-10-15T21:18:12.463 回答
0

如果我理解正确..您正在显示某种配置文件列表,其中每个配置文件都有关联的图像...对吗?

从存储图像的方式中抽象出来(db 或 vfs 图像更快,但直接文件 - 至少具有较小的 MRU 缓存 - 更易于维护)。

解决方案 numero uno 是正确的方法。

它只是更简单,更“宁静”。我是客户端逻辑的忠实拥护者,但我们应该将它用于一个好的原因(例如 Soopa-UI)。数据库逻辑代码与服务器逻辑代码也是如此。我不喜欢 sql 并且不得不维护另一层问题,但我确实理解它在某些情况下对最终结果的影响。

编辑:哦......你只是存储路径。因此,如果您不是在做一些花哨的单页 Web 应用程序,那么在客户端构建路径还有另一个问题。客户端必须等待脚本完成加载,然后才能开始加载他的图像。

于 2012-10-15T21:41:05.617 回答