在决定何时大量使用客户端代码方面的考虑因素

5
我正在开发一个网站,它将有一个相当广泛的管理部分。前端非常简单,不需要复杂的用户界面,因此我不打算在那里使用太多客户端代码。
我正在尝试在这个阶段确定在客户端放置多少逻辑来管理部分。我正在使用Ruby on Rails - 作为一种极端情况,我可以完全在服务器端生成管理页面,并使用极轻的客户端代码进行一些基本增强。在另一个极端,我可以使用像AngularJS这样的框架,为管理部分创建单页应用程序,并通过JSON与服务器通信。
我认为极端的客户端方法的主要缺点是会有显著的初始页面加载时间,并且在移动设备上会感觉很沉重。我看到的优势是,在初始加载后它将更加响应,并且服务器上的应用程序将纯粹是API,易于扩展或以其他方式使用,如果需要的话。
我看到了关于Basecamp如何通过最少的客户端代码实现快速响应的这篇文章。虽然他们谈论了他们实现速度提升的方法,但他们没有提到坚持使用重服务器端代码的原因。
那么,我如何确定客户端和服务器端代码之间的正确平衡?我真的很感激任何关于此的见解,我没有考虑到的利弊以及我可以查阅的资源。谢谢!

Twitter在客户端渲染过多时遇到了问题,因此选择了服务器端渲染。这里有一些有用的阅读材料:http://openmymind.net/2012/5/30/Client-Side-vs-Server-Side-Rendering/ - Sam
2
重要的初始页面加载是一个谬论。如果需要大量用户交互,那么在这个 AJAX 的时代,没有比点击 3 次页面来执行任务更糟糕的了。 - charlietfl
当然,您可以通过最初加载完整JavaScript资产的某些子集,并在显示初始视图后获取其余部分来优化初始页面加载。仅当资产未缓存时,页面加载才会变慢。 - Pointy
使用客户端代码,您可以同时执行多个操作;而使用后端代码,则必须等待服务器完成当前操作才能开始下一个操作。对于像管理员这样的高级用户来说,花费更少的时间等待会提高满意度。 - dandavis
这里的使用情况将包括慢速连接和移动设备。我想更重的内存占用将影响移动设备 - 对此有什么见解吗?另外,为什么Twitter和Basecamp选择服务器端渲染(两者都是相当近期的决定)? - Rahul Sekhar
1个回答

5
这是一个非常有趣的话题,我想很多开发人员都在问自己同样的问题。
首先,这真的取决于手头的项目。但是以下是一些可能会帮助您做出决策的要点。
界面
如果您的应用程序将具有复杂的用户界面,并且需要大量的用户交互(点击、拖动等),并且应该“感觉响应”,更像桌面应用程序,那么我认为客户端方法是正确的选择。
然而,你说:
引用:
前端非常简单,不需要复杂的用户界面,因此我不打算在那里放太多客户端代码。
Rails和开发经验
看起来DHH,因此间接地Rails并不太关心客户端重型方法。
你必须记住,Rails起源于Basecamp,并且最近的功能(在Rails 4中引入的,例如俄罗斯套娃缓存和turbo links)是为Basecamp开发的。如果您查看新版本的UI,则可以看到这些功能背后的原因,但并不是每个应用程序和用户界面都适合这种以文档为中心的模型。因此,对于37signals(以及所有与性能有关的数字),请持保留态度(例如,他们使用的缓存硬件非常出色,而不是每个人都能负担得起这样的设置)。
还要记住,Angular和Ember是相当年轻的项目,并且(特别是Ember)正在经历许多(可能会导致令人沮丧的API修复)变化。
同时,请问自己,您更喜欢哪种开发环境?
Ruby / Serverside开发风格,具有TDD和RSpec以及快速反馈循环,与在浏览器中调试和编写JavaScript相比。 (尽管像Ember Inspector这样的项目正在取得很大进展并改善体验。)不要低估这一点,因为您将花费大量时间在这些环境中。
速度
正如DHH在他的文章中提到的那样,他们能够通过更传统的服务器端方法取得出色的结果。
我认为如果不为两种架构编写相同的应用程序并对每个应用程序进行一些性能测试,就无法获得科学结果。
当然,这是一个理想而不现实的情况,但我认为它甚至不需要:它取决于UI和您的应用程序的感知速度/性能。如果您拥有“单页”UI,用户大部分时间都在一个页面上忙碌,客户端方法可能会被视为更加“灵敏”,并且从下载JavaScript产生的初始性能损失将被弥补。
API
如果您计划为应用程序编写良好的JSON API,则可以提出支持客户端方法的很好的论据。eviltrout:
“富客户端应用程序的一个惊人的副作用是,您最终会获得经过战斗测试的API。我们的应用程序自第一天起就使用了我们自己的API,因此我们知道它有效。”
参考资料/阅读材料/观看材料
您可以关注的人/项目:

再次强调,这取决于你正在进行的项目类型。如果这是一个不太严肃的应用程序,你对新技术和客户端框架(如Ember和Angular)感到好奇,并且想要尝试一下:我完全支持。

这是目前非常“热门”的话题,未来几年也将如此,我非常关注它的发展。希望这能稍微有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接