急于开发Web的客户端


10

在过去的几个月中,我意识到Web开发中的客户端脚本令人兴奋。但是,尽管服务器端技术已经成熟,稳定并且为后端开发人员所接受,但是客户端技术还不成熟(即与大型服务器端框架相比),并且被许多历史悠久的开发人员所讨厌。然而,如今,每个人都在进行客户端开发。我个人希望大型服务器端框架在2-5年内消失,并关注当前趋势。

为什么会这样?用HTML5 / JS开发的新的和“分散的”客户端怎么可能优于大型且经过深思熟虑的服务器端解决方案?


4
您是否有任何资料可以验证您的假设?Javascript几乎与Internet一样古老,而且我认为服务器端编程不会很快出现在任何地方。
tdammers

1
为了澄清,我的假设仅限于前端。我看到在UI逻辑,渲染和类似方面都向客户端转移。当然,服务器端永远不会消失,而是简化为REST-api(或SOAP)。
布鲁诺·谢珀

3
这种转变来来去去。通常,一旦引入了新的炫酷技术(Shockwave,Flash,JavaFX,Flex)或大型新js框架试图“占领世界”(工具,jQuery等),前端开发就会变得越来越流行
Andrzej Bobak

1
@VainFellowman:您真的不想在客户端脚本中使用SOAP。有太多的开销,解析起来很痛苦,并且您不会赢得太多,因为具有动态类型规则的Javascript仍然无法充分利用SOAP的类型信息。
tdammers

1
@tdammers我不想要,真的我不想要。我看不到在HTTP上使用SOAP的任何意义。REST适用于几乎所有情况。
布鲁诺·谢珀

Answers:


7

这是真的:

急于开发Web的客户端

但是它不仅限于客户端,它是一个完整的堆栈运动。

我知道这可能令人惊讶。拜托,听我说。

为什么会这样?用HTML5 / JS开发的新的和“分散的”客户端怎么可能优于大型且经过深思熟虑的服务器端解决方案?

首先,两者都经过深思熟虑。

其次,因为它更好。

好问题。

但是“更好”是主观的,因此,您的问题的答案是:哪种更好?

重新查看问题:

用HTML5 / JS进行“分散”的客户端开发怎么可能优于大型服务器端的解决方案?

Because small is nimble.
And big is clunky.

这是灵活性。

似乎没什么大不了的。可以?灵活性。

但是,灵活性是一切的基础。灵活性方面的一项改进-全面改善。

可维护性。可扩展性。可扩展性。模块化。可用性。用户体验。

而且实施起来更快。这是现实。更快更好。

This is why Windows 8 made JS a first-class citizen.

HTML5-JS,不是时尚,它不会消失。我们只是看到了将增长为平板电脑提供计算内容和交互行为的技术的种子。平板电脑。

智能手机是自1950年代电视以来使用最快的大众媒体。现在,我们不仅拥有智能手机-我们还有平板电脑。

Mozilla和Windows已经在开发该操作系统,它将在其市场上的未来设备上运行-> HTML / JS。

仍然存在许多解决方案和创新。

基于灵活性,正在出现一堆完整的JS。

希望对您有所帮助。


1
好答案!但是服务器端框架会带来相同的好处,不是吗?
布鲁诺·谢珀

1
是的,先生,服务器端框架有望带来同样的好处。需要知道的是,新兴技术还有意外发现的其他好处。它在io中处于最低级别(c)。线程等待。在JS中,它具有回调。它不等待。因此,有一个最低级别的io优化。现在,这种默默地被Microsoft大量采用。这就是为什么他们的操作系统是JS的原因。最终,这将在所有级别上产生优化和元优化。因为语言很灵活。简单看不见的东西。未知。希望能有所帮助。
杰克·斯通

1
我选择接受此答案,因为它是最完整的答案。所有其他人都有长处,但这是最确定的。谢谢大家!
布鲁诺·谢珀(BrunoSchäpper)2012年

9

这个故事总是有两个方面。服务器端和客户端代码都有其优缺点。

客户端脚本的优势包括:

  • 可以使响应速度更快,无需服务器往返即可进行广泛的更改。
  • 代码在客户端上运行,从而减少了服务器上的资源使用。
  • 逻辑和表示之间的分离变得物理上的。
  • 有时更容易实现负载平衡,尤其是在使用按请求身份验证的情况下。

但是服务器端脚本也有很多优点:

  • 您可以控制运行代码的机器。
  • 几乎一切皆有可能-如果您的服务器可以做到,那么脚本也可以。
  • 用户无法在运行脚本之前对其进行修改。
  • 用户不能使用脚本阻止程序阻止脚本运行。
  • 用户看不到脚本的作用,只能观察输出。
  • 该代码将与您可以想象的每个客户端可靠地协同工作,包括屏幕阅读器,文本Web浏览器,搜索引擎蜘蛛,抓取工具,累加器,IRC机器人,超低端计算机,脚本阻止的浏览器,随便您如何命名。
  • 用户插件不太可能损坏。

对于高度动态的Web应用程序,以客户端为中心的方法一直是一种流行的选择,因为它是提供像桌面一样的响应式用户体验的唯一方法:如果没有客户端脚本,则用户的每一项操作都需要一轮回合。跳闸,这意味着至少延迟半秒,通常会更长。但是对于一个信息站点来说,该站点基本上只是一堆从数据库提供的静态页面(例如Wikipedia),其优势是微不足道的,而服务器端脚本的优势仍然是压倒性的。

观察到的炒作来自两个最新发展的组合:

  1. HTML5及其相关技术的日冕。花费了太长时间,但是现在我们终于有了一个标准,其中包含制作这些动态桌面式Web应用程序而不堆积黑客的一切所需的一切,以及能够正确实现它们的主流浏览器。
  2. 可用的处理能力。当今的商用台式PC的功能与入门级Web服务器一样强大,客户级手机实际上是2005年的台式计算机,现代javascript实现足以有效地实现性能平衡:到目前为止,客户端资源比服务器便宜资源。

实际上,就以服务器为中心和以客户端为中心的方法所擅长的方面而言,没有任何改变。改变的是,以客户为中心现在比以前更容易,更便宜并且性能更好,这使其成为比以前更多的应用程序的可行选择。


硬道理... +1。
2012年

8

服务器端将始终存在。您不能坐在客户端上处理所有事情。例如,您不想为微控制器使用Backbone.js MVC设计,而是从生产车间桥式起重机实时向您发送参数。

不要相信炒作。


告诉我。Windows 8中的JS是炒作吗?-1。我同意第一点,但是关于炒作的第二点需要澄清。
2012年

JS并不是客户端专用的,并且已经有一段时间了。
Erik Reppen

@ClintNash ya,实际上。Ms使j's能够构建win8应用程序,以增加其平台的潜在开发人员数量。这是对人们选择学习台式机技术而不是台式机技术的一种回应。但是作为已经知道c#/ wpf的版本,我认为没有理由使用html / js构建Win8应用程序。
安迪

@ErikReppen这是真的,但是仅js并不能在服务器上削减它,您需要一个内置的框架。坦率地说,在服务器上使用脚本的渴望使我感到困惑。我们已经做到了,那是经典的ASP,我真的不希望重复这种经历。
安迪2014年

@Andy在经典的ASP(尤其是Web表单)上,您会发现与任何JS开发人员都无休止的协议,而他们有不幸碰上了那些我们绝对不想再回到那里的工具。但这是过去十年来人们最不为人所知的基于标签的服务器端脚本编写工具,而且可能是有史以来最受欢迎的最轻视的瘦客户端解决方案。将其与诸如Python以及现在服务器端的JS之类的东西相提并论就是要告诉人们骑马。
2014年

6

2009年,我已经从服务器端PHP框架切换到与服务器端Web服务绑定的客户端ExtJS解决方案。

我迁移的原因是:

  1. 通过减少服务器上的端点和代码数量来提高安全性。
    通过使用Web服务,您可以验证Web服务边界上的输入,并可以更精确地控制服务器的I / O。没有服务器端UI层可以混淆您的安全体系结构。
  2. 由于减少了服务器往返次数
    ,因此提高了性能。体系结构发生了变化,因此数据获取的发生频率可能​​降低,并且可以使用UI呈现在本地缓存数据,而根本不需要往返。往返是导致Web应用性能下降的原因。
  3. 由于UI
    的可缓存性,因此提高了性能。UI层可以完全托管在CDN上。我什至通过将UI代码放入HTML5应用程序缓存中来构建脱机Web应用程序。
  4. UI的保真度更高(丰富的客户端控件)
  5. 第三方开发人员可以使用与我自己的前端使用的相同的API,并且如果他们共享功能,我可以轻松地跨模块重复使用API​​。
    这意味着更少的开发,质量检查,文档等。
  6. 我更喜欢用JavaScript编程,而不是PHP,Python或Java

但是,毫无疑问,现在发生的是炒作。它将崩溃,许多Web应用程序将再次使用服务器端UI架构。


什么,炒作?-1当Windows 8使JS成为一流公民时,祝您好运。是的,也许用node.js编写的服务器端UI架构。我们需要学习它,因为它是非阻塞的。
Jack Stone

我认为我们不会在短期内返回胖客户端解决方案。但是,如果我为ExtJS遇到的任何问题都比发泄预制Web UI复杂得多(即,不管最初的计划是什么,所有问题),我都为ExtJS所困扰,那么我可以理解为什么替代方案似乎不太理想。
埃里克·雷彭

6

推动客户端解决方案热情的另一个因素是移动应用程序的增长。如果您主要基于客户端JavaScript和AJAX创建网站,并且还构建本机iOS和Android应用程序,那么这三个人很有可能可以使用相同的REST服务来处理所有数据。 。


好吧... +1。
杰克·斯通

确实很好。
布鲁诺·谢珀

4

首先,用户看不到(有时甚至不在乎)没有服务器的情况。不管服务器端代码编写得如何好,如果客户端部分做得不好,用户将不会欣赏该应用程序。有时,即使是漂亮的UI也比功能更重要。

大型而强大的服务器托管非常昂贵。在客户端实现某些逻辑(验证除外)会便宜得多。因此,您可以使用较小的(因此,更便宜的)服务器托管,因为它不会加载太多。

这些都是尽管不稳定的原因,客户端技术却越来越受欢迎的原因。此外,(几乎)所有现代浏览器都支持JS和HTML / CSS。

应用程序的这两部分不能分开存在。而且互联网在不久的将来似乎不会消失。
我也不认为这种big server-side frameworks可能性也不会消失。总会有一些公司负担得起,并会利用它们的显着优势。


4

客户端Web开发与Web浏览器以及随时间变化的浏览器紧密结合在一起。由于Web浏览器的页面呈现引擎发生了重大变化,因此您现在提供的解决方案可能在几个月内无法工作。某些浏览器与标准不兼容,因此为了获得预期的结果,开发人员需要付出更多的努力。

有一些解决方案试图解决此问题。例如,如果您使用jquery,则可以确保您的脚本将在此特定jquery库支持的浏览器上运行。但是,只有它的作者才能为您提供与某些/大多数/所有浏览器的兼容性。问题是哪个团队会更好地支持您。会是motools团队,jquery团队或其他团队吗?如果他们不提供对特定Web浏览器的支持,则您的项目可能无法在该浏览器中运行。

您似乎已经兴奋了很长时间。当引入Shockwave及其后续Flash时,我看到了它,一旦交付了复杂的js库,首先是使用motools,然后是jquery,我就开始经历了丰富的用户界面的“大逆转”(我开始以此顺序使用它们)。有Flex和JavaFX。但是它们都无法在市场上获得很大份额。有些要求使用及时将最终用户暴露给安全漏洞的插件,而有些则由于某些自定义设置(例如,在客户端浏览器中禁用了JavaScript)而无法在客户端上运行。

另一方面,服务器端解决方案通常只编写一次。您无需担心一切都会失败,并且在新的Firefox / Chrome / IE / Opera交付后就必须重写。您也不必担心客户端会尝试篡改您的应用程序和/或破坏数据。


1
那不是纯粹的想象力吗?当客户端更改时,您可能必须更改服务器端的内容,因为在某些时候您将无法生成HTML / JS / CSS。
布鲁诺·谢珀

1
还有一件事,“客户端Web开发与Web浏览器紧密结合”-Web技术是官方标准,只要您坚持执行标准,而不是将应用程序耦合到浏览器即可。虽然不久前这还不是真的,但目前看来。
布鲁诺·谢珀(BrunoSchäpper)2012年

首先,请阅读一些浏览器是如何不遵循标准的(例如Internet Explorer)。SOme的情况随着时间的推移而发生了变化,但是即使使用IE7,由于它自己解释我所写内容的方式,我仍然遇到了可怕的问题。另请阅读一些有关跨浏览器兼容性的文章。如果每个Web浏览器供应商都遵循该标准,则将不存在此问题。第二,如果数据集发生更改,那么您就必须更改业务逻辑,这很明显。但是,当新的IE发行时,您必须重写大约30%的代码,只是为了使代码在新的浏览器上工作,这是错误的
Andrzej Bobak 2012年

当然,我知道使所有功能在每种浏览器中都能正常工作是多么痛苦。但是无论服务器端还是客户端,都必须完成这项工作(因为无论如何最终都必须使用浏览器)。我当然同意你的第二点。但是,我看不到有30%的内容会被重写。可能需要进行一些更改,但是我怀疑它与过去一样糟糕。另一方面,如果要替换服务器端堆栈,则必须基于服务层重做所有操作。因此,您非常紧密地耦合到服务器端实现。可能是从用户界面的顶部到模型。
布鲁诺·谢珀

-1

完全同意您的观点。我还相信,除了您要说的以外,我们还将看到REST的大幅下降和websocket的大量增加,这是我们看到站点与服务器进行通信的主要方式。Vert.x,Node.js等。整个服务器端以及客户端都在转向事件驱动的编程。Java EE,PHP,Rails等。它们都需要适应,否则很快就会丢失。


如果没有任何解释,如果有人发表不同意见,此答案可能会变得毫无用处。例如,如果有人发表诸如“我们不会看到REST急剧下降和Websocket激增”这样的说法,那么这个答案将如何帮助读者选择这些不同的观点?考虑将其编辑为更好的形状
咬2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.