你们是否愿意阐明客户端-服务器程序员面临(必须克服)才能理解(并能够转向)Web应用程序编程的困难?
想想一个已经编写 Windows 窗体客户端-服务器数据库应用程序至少 10 年的人。
你们是否愿意阐明客户端-服务器程序员面临(必须克服)才能理解(并能够转向)Web应用程序编程的困难?
想想一个已经编写 Windows 窗体客户端-服务器数据库应用程序至少 10 年的人。
HTTP 的本质是服务器不会只是坐在那里等待客户端的响应。它不能。(ASP.net 可以做到,但这是框架提供的一种错觉/抽象。证据:If IsPostBack
。)每个 HTTP 请求都是相互独立的,因此您必须在每个请求中包含足够的信息来提醒服务器它在做什么. 会话 cookie 在这里有点帮助,但要点是,一旦您需要输入,一切都会停止——下一个请求会重新开始一切。
现在,您在胖客户端中所做的大多数事情都将在 Web 服务器上完成。也就是说,一台服务器(或两台,如果你也算上数据库服务器)正在完成大部分/所有繁重的工作。那个在胖客户端上运行的慢得令人尴尬的解决方案现在正在耗尽所有用户之间共享的 CPU 周期。牢记性能和可扩展性作为次要目标(在让东西工作之后)。
应用程序的 UI 不再由您直接控制(除非您想成为笨蛋并需要 IE6,在这种情况下您不会长期开发 Web 应用程序)。您将需要在许多不同的浏览器中进行测试(至少是最新版本的 FF 和 Chrome,以及 IE 的 7-9 版本。如果可能的话,还有 Safari/Mac。如果您计划支持手机浏览器,则更多)。每个人都有自己的怪癖。对于必须工作的东西,您会希望坚持最低公分母,并且只使用浏览器怪癖来获得额外的刺激。并且不要在每个浏览器中尝试像素完美的一致性。这种方式很疯狂,特别是如果您必须支持旧版本的 IE、手机等。而是尝试足够灵活的布局,以使小的渲染差异不是什么大问题。
几乎按照定义,您有时会为两种不同的环境(浏览器和服务器)同时使用 3 种不同的语言(HTML、Javascript 和您的服务器端语言)。您需要始终了解您的代码将在何时何地运行,以及它在那里时会有哪些限制。服务器代码和客户端代码之间有一道墙,默认情况下它们不共享变量。如果你需要他们,你需要提供一种方法来做到这一点。