关于AJAX、B/S、C/S的几个思考
B/S为何难于提供好的用户交互体验?
最大问题有几个:
(1)无状态的HTTP协议
WINDOWS窗体间能够通过内存直接交换信息,但作为B/S架构通讯基础协议的HTTP是无状态的。
如果将浏览器看成是客人,Web服务器看成是旅馆,在HTTP协议的管理之下,会出现这种情况:不管某客人来访多少次,Web服务器都将其视为第一次的访客。这样一来,客人每次都得带齐身份证件供旅馆工作人员“验明正身”。
HTTP协议的无状态,导致Web服务器的“六亲不认”,这固然能添加Web服务器的吞吐量,却给应用系统的开发带来了麻烦。因为应用系统中常常有许多业务处理流程,天生就是信息流转的,即原始数据从一端进去,从另一端出来时应该已经过某些处理,怎可想象整个业务流程中的信息会流失?于是,在HTTP各请求间共享信息就成了件麻烦事,这就是HTTP请求的“状态保持”问题。每个B/S系统都必须解决这个问题。微软想了一些“歪招”,比如充分利用HTML网页的中隐藏域,再在Web服务器上做些手脚,于是ASP.NET拥有了一套在各个HTTP请求之间维持状态的技术:SESSION,COOKIE,VIEWSTATE,PROFILE,APPLICATION。
然而问题并没有完全解决。比如,C/S系统中常见的收集用户输入信息的对话框,主窗体与对话框之间有着信息的交换(又分为两种:模式的和非模式的,前者对话框不关掉,主窗体不能被激活),在B/S架构之下,由于浏览器的每个请求是独立的,要在两个独立的浏览器窗口间实现类似于模式对话框这种直接的信息交换,我还真不知道该怎样干。
AJAX使用以下这种的方法来“摸拟”出模式窗体:将主窗体与对话框“合二为一”,对话框在HTML中就是一个DIV元素,平时是隐藏的,需要时再显示它。微软的AJAX CONTROL TOOLKIT中甚至为这一功能设计了一个控件。诸如此类的小伎俩,在B/S开发中不胜枚举。
能够看到,许多在C/S轻而易举就可实现的功能,在B/S中要实现则大费周折。
(2) 特殊的运行环境——浏览器
B/S系统的前端运行环境是浏览器,这就带来了诸多的限制,不能干许多事,比如直接访问硬件(例如打印机),也无法充分利用硬件的资源。例如,现在的新电脑都是双核的,你能直接用JAVASCRIPT加HTML写出一个多线程程序以充分利用这两颗“奔腾的芯”?
而C/S系统则直接运行在OS(操作系统)之上,能够调用OS提供的所有功能,这种限制就不存在了。
相关文档:
Boss说,要看OpenGL,看了快一个月,总算出了个像样的东西,用C写了个3D迷宫,
虽然只有350行
代码,不过边学边写,足足写了一周时间,还是小有成就感的,活活活!
&n ......
function verify() {
//解决中文乱麻问题的方法1,页面端发出的数据作一次encodeURI,服务器段使用new String(old.getBytes("iso8859-1"),"UTF-8");
//解决中文乱麻问题的方法2,页面端发出的数据作两次encodeURI,服务器段使用URLDecoder.decode(old,"UTF-8")
var url = &qu ......
//#include "stdafx.h"
/*
描述:纯c模拟类,纯c编写c++类,纯c实现c++类的简单范例,结构模拟类,struct 编写class.
c编写类是实现纯c编写com组件的基础。
*/
#include <stdio.h>
typedef struct _Vtbl
{
void (*AddRef)(struct CObject* obj,int);//所有的函数的第一个参数类似class的隐匿的 ......
just get a json
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<mce:script src="jquery-1.3.2.min.js" mce_src="jq ......
C 和 C++ 字符串字面量(String Literal)既有相同之处,又有一些区别。了解这些内容对于加深字符串字面量以及相关一些概念的理解、澄清一些常见的概念误区不无助益。本文以普通字符串字面量 "hello" 为例总结说明如下。
相同点:
字符串字面量是对象
C/C++ 中的对象(Object)指的是一块存储区。字符串字面量是不需要创 ......