agent124 发表于 2024-8-14 23:26:08

我所理解的web程序

本帖最后由 agent124 于 2024-8-14 23:41 编辑

我学习web程序,花了几年的时间才真正理解,入门。这当然不是因为web程序有多难,而是我自己水平不高。但是以前在csdn论坛上,也不时看到有些从事web程序开发,干了一两年的人,问出来的问题,在我看来,仍然没有真正理解web程序。这似乎也说明web程序也不一定非常好理解。现在把我的理解写出来,虽然不一定很准确,表达也不一定很清楚。

web程序的内容当然很多,也有很多不同于桌面程序的地方,比如安全和性能方面的考虑。但这些差异是属于大致了解框架后再深入的内容。学习web程序,首先要掌握它的大致框架。web程序的本质就是作为客户端的浏览器和服务端的交互过程。不管用什么技术实现的web框架,基本不脱这个路子。在学习web程序的过程中,理解了这个交互过程,就基本掌握了大致的框架,虽然很多细节不可能一下子掌握,但是掌握了这个框架,就心中有数,不会见树不见林。细节可以在实践中慢慢熟悉,但是首先要了解大致的框架,这样就不会朦朦胧胧,一知半解。

当然,还有一种现在已经用得不多的浏览器插件方式。比如已经淘汰的flash和微软的silverlight,以及ActiveX技术。这些技术,相当于是附着于浏览器的小客户端,和纯粹基于浏览器的web程序,有所不同,各自设计了一套和服务器端交互的手段。因为大多已不常用,所以也不讨论了。

浏览器访问服务器,通常是“单向的”。浏览器访问服务器,服务器返回数据后,连接就断开了,而不是一直连着。由于这个原因,也出于安全方面的考虑,通常服务器不能直接调用浏览器端乃至浏览器所在的机器上的程序(早期的web程序较宽容,允许这样做,比如asp,用vbscript写,可以访问本地文件系统等),也不能主动联系浏览器,而只能被动接受请求。微软曾经有并不断开连接,而是保持这个连接,从而服务器能够主动通知浏览器的技术。但这个只能在连接服务器的客户端很少,比如内部局域网的情况下才能实现,所以应用不广。浏览器和服务器的交互,基本上就是浏览器向服务器发出请求,服务器响应请求,返回数据或者实现某种操作,然后浏览器发出下一个请求......这么一个过程。(当然,这个过程可以是异步的,就是浏览器不一定非得等到收到服务器的响应后,再进行下一步,而是可以发出响应后,直接做别的事,等服务器响应后,再接收服务器返回的结果。)

所以,在学习web程序时,关键就是弄清哪些是在服务器端做的,哪些是在浏览器端做的;浏览器是如何向服务器端发出请求,服务器端如何接收请求并处理,如何返回处理结果;浏览器收到服务器发回的数据后,又是如何处理的。理解了这几点,就大致把握了web程序的框架。各种技术的具体实现方法当然差别很大,但万变不离其宗,只要把握住了这几点,就基本上掌握了技术的关键。下面稍微展开说一下。

web程序大致可分为重心放在浏览器客户端,和重心放在服务器端两种。也就是通常说的所谓廋客户端和胖客户端。比如asp.net就是重心放在服务器端的,php也是。这类程序,大致就是网页内容(包括页面和少量javascript程序)都是在服务器端生成,然后发送给浏览器,浏览器大致就是使用这些“现成”的结果(虽然也会执行少量的javascript)。而angular, vue等框架是重心放在浏览器端的。这类程序,虽然一开始javascript还是要从服务器端拿来,但是网页的大部分内容和功能,是靠浏览器拿到从服务器传过来的javascript程序后,执行这些程序,才实现的。

javascript是主要在浏览器端执行的程序(当然现在有在服务器端执行的Node.js),它通常储存在服务器端,浏览器发出请求时,服务器就返回javascript程序,然后这些程序就在浏览器端执行。所以,所谓asp.net的后台“调用”前台的javascript,实际上也是这样一个过程,而不是说服务器端可以直接把手伸到浏览器执行javascript。

浏览器将数据发回服务器端,大致就是递交表单(submit)和ajax(比如调用rest服务等)两种方式。现在多用后一种,因为可以避免刷新整个页面,提高用户体验。

当初没接触angular之前,听一个同事说angular是“双向绑定”,并不理解,心想浏览器和服务器如何实现双向绑定?后来才明白,原来angular是在浏览器端分了几个层次,大致就是界面和数据层,这两个层次间实现双向绑定,简单地说界面一变化,数据层也相应改变,反之也如此。至于和服务器端的交互,仍然是通过rest服务发送数据而已。理解了这一点,angular的大致框架就把握住了。当然,很多细节是要花时间熟悉的。比如我开始接触angular,就花了好几天时间,才搞定在同一个端口部署angular程序和相应的asp.net web api。



origin 发表于 2024-8-15 15:39:37

总结
网页内容主要是作者 agent124 对 Web 程序的理解和分享,包括 Web 程序的基本框架、与桌面程序的差异、以及客户端和服务器端的交互过程。

观点

[*]Web 程序的核心是浏览器与服务器之间的交互过程,这个过程是单向的,即浏览器向服务器发送请求,服务器响应后连接断开。
[*]Web 程序与桌面程序的主要差异在于安全和性能方面的考虑。
[*]历史技术如 Flash、Silverlight 和 ActiveX虽然曾经是浏览器插件方式的一部分,但由于现在用得较少,所以不再讨论。
[*]Web 程序可以分为重心放在服务器端和重心放在浏览器端两种,前者如 ASP.NET 和 PHP,后者如 Angular 和 Vue。
[*]浏览器向服务器发送数据的方式包括递交表单和 AJAX,其中 AJAX 因为可以避免整页刷新而更受欢迎。
[*]Angular 的 “双向绑定” 是指浏览器端内部层次之间的双向绑定,而与服务器端的交互仍然是通过 REST 服务完成的。
[*]在实际操作中,作者分享了自己在接触 Angular 时的一些经验,如部署 Angular 程序和 ASP.NET Web API 的挑战。

机器人总结的,不知道对不对。反正我是没看懂楼主在说什么。

agent124 发表于 2024-8-15 19:46:59

origin 发表于 2024-8-15 15:39
机器人总结的,不知道对不对。反正我是没看懂楼主在说什么。

可能我没表达清楚,其实我要强调的是这句:

在学习web程序时,关键就是弄清哪些是在服务器端做的,哪些是在浏览器端做的;浏览器是如何向服务器端发出请求,服务器端如何接收请求并处理,如何返回处理结果;浏览器收到服务器发回的数据后,又是如何处理的。理解了这几点,就大致把握了web程序的框架。

gongqi 发表于 2024-8-16 08:54:58

我曾经用VB6做过一个ERP系统,后来为了赶时髦,又用asp做了一套web的,算是从C/S进步到了B/S。
记得当时用asp的时候,重点不在我是谁这样的哲学问题,而是在asp的语言问题。
页: [1]
查看完整版本: 我所理解的web程序