锁定老帖子 主题:REST+RIA方案
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2007-07-25
hax 写道 treenode 写道 hax 写道 我前公司那个商城,原来是基于xslt转换成html片段更新进去的,这个模式在实际中暴露出很多问题。
我个人的看法,xslt是“向正确的方向迈出的错误的一步”。服务器生成XML格式的数据,浏览器根据XSLT转换为界面,这个思路和REST已经很接近。但是界面上的问题并不适合完全用XML来解决,那个时候人们太迷信XML是万能药了。 不是那个时候人迷信的问题。 主要的问题是xlst并不能保证你分离内容和样式。反而会倾向于把html作为presentational语言。如果xslt中包含了操作内容的js,那更是混乱之源。 xslt用来分离内容和样式完全做到了。 用html是浏览器的问题 带有js是交互设计和ajax实践的问题。 再项目中你是如何用xslt的 ? 在我的系统中xslt和webapp是分离的。 xslt资源本身是独立的可以自由编辑的 在设计交互界面的时候可以灵活编辑xslt, 也就是说xslt虽然是运行在server端 但它是和view 交互同步开发的。 再简单的说就是开发webapp的时候不用考虑xslt |
|
返回顶楼 | |
发表时间:2007-07-25
hax 写道 (1)不知道怎样才叫合理的规划。目前我看到的两种主流做法,a、由服务器组织成页面片段,再发到客户端;b、服务器只发送变化的数据,客户端根据数据生成对应的HTML DOM。前者比较容易处理,也是depot例子所使用的做法,但是此方法需要发送的数据量更大,而且从原理上来讲是比较低效的(因为页面结构并没有变化,变化的只是数据,不需要都重复发送)。协议上优化并没有根本解决此问题。后者和Flex在效率上就没有什么差别了,不过用JS代码生成HTML DOM开发效率很低,也不利于页面设计。有没有所谓的“客户端动态页面模板”技术?如果有,那么这个问题是可以解决的。 (2)不用考虑页面缓存,服务器就可以专心考虑如何缓存数据与资源,这正好是服务器的专长,不是么? (3)对于数据请求,flash和ajax是没有区别的,完全取决于服务器的响应速度。flash的优点是只请求数据不需要请求页面。这个区别在切换页面的时候会体现出来。 (4)套用一句老话,“不是你的错误,却是你的问题”。应用99%的时候都很好,但突然之间给你一个大大的HTTP 500错误,或是进度条转了100多圈还没有任何反馈,这是用户体验最差的地方,如果界面不是一次性下载完成的,迟早会遇到这个问题。 |
|
返回顶楼 | |
发表时间:2007-07-25
treenode 写道 hax 写道 (4)套用一句老话,“不是你的错误,却是你的问题”。应用99%的时候都很好,但突然之间给你一个大大的HTTP 500错误,或是进度条转了100多圈还没有任何反馈,这是用户体验最差的地方,如果界面不是一次性下载完成的,迟早会遇到这个问题。 用flash就可以只发一次请求吗 ? 不可能 如果需要一个动作中含有多次请求 flash一样需要等待server返回数据 估计用户体验好不到哪去。 |
|
返回顶楼 | |
发表时间:2007-07-25
hax 写道 你批错人了。早期是浏览器为了互相争夺用户,而盲目推出未经良好设计的新功能。罪不能怪在w3c上,都是浏览器厂商的问题。尤其是IE在竞争中获胜后,MS背弃了web开发者,背弃了遵循标准的承诺。直到ff重新成了有力的竞争者,MS才对自己的产品做了一些改进。 这个事情需要一分为二的来看,没错,早期浏览器确实是在为了争夺用户而匆忙推出新功能,可是这时候w3c在哪呢?当IE和NN各自实现了不标准、但是确实能解决Web开发者问题的方案时,w3c为开发者做了什么呢?等IE事实上统治了互联网的时候才慢吞吞的来“统一标准”,俟河之清,人寿几何,为什么那么多网页only for IE,因为人家实在是没有耐心慢慢等待你的标准了。 后来Web标准逐渐得到大众认可,MS在这个时候仍然顽固的抵制标准,这就很成问题了。不过历史的说,我认为当初微软做的并没有错。 |
|
返回顶楼 | |
发表时间:2007-07-25
winterwolf 写道 用flash就可以只发一次请求吗 ? 不可能 如果需要一个动作中含有多次请求 flash一样需要等待server返回数据 估计用户体验好不到哪去。 前面说了,flash总是要请求数据的,但不用请求页面,最多取不到数据,不会突然出现一个“页面找不到”或“服务器内部错误”之类的死给你看。 |
|
返回顶楼 | |
发表时间:2007-07-25
treenode 写道 winterwolf 写道 用flash就可以只发一次请求吗 ? 不可能 如果需要一个动作中含有多次请求 flash一样需要等待server返回数据 估计用户体验好不到哪去。 前面说了,flash总是要请求数据的,但不用请求页面,最多取不到数据,不会突然出现一个“页面找不到”或“服务器内部错误”之类的死给你看。 那么你认为xmlhttp会显示“页面找不到”或“服务器内部错误”了 ? xmlhttp也不请求叶面的 资源 和 view不时叶面 view只是加工过的数据罢了 谈谈多次请求的处理吧 我认为除非必要 否则应该尽量让server处理将多次请求变成一次请求 一方面速度快用户体验好。 另外这样设计更合理 网络是分布样式缓存 没必要将本应中间缓存的数据也甩到客户端 |
|
返回顶楼 | |
发表时间:2007-07-25
treenode 写道 (1)不知道怎样才叫合理的规划。目前我看到的两种主流做法,a、由服务器组织成页面片段,再发到客户端;b、服务器只发送变化的数据,客户端根据数据生成对应的HTML DOM。前者比较容易处理,也是depot例子所使用的做法,但是此方法需要发送的数据量更大,而且从原理上来讲是比较低效的(因为页面结构并没有变化,变化的只是数据,不需要都重复发送)。协议上优化并没有根本解决此问题。后者和Flex在效率上就没有什么差别了,不过用JS代码生成HTML DOM开发效率很低,也不利于页面设计。有没有所谓的“客户端动态页面模板”技术?如果有,那么这个问题是可以解决的。 (2)不用考虑页面缓存,服务器就可以专心考虑如何缓存数据与资源,这正好是服务器的专长,不是么? (3)对于数据请求,flash和ajax是没有区别的,完全取决于服务器的响应速度。flash的优点是只请求数据不需要请求页面。这个区别在切换页面的时候会体现出来。 (4)套用一句老话,“不是你的错误,却是你的问题”。应用99%的时候都很好,但突然之间给你一个大大的HTTP 500错误,或是进度条转了100多圈还没有任何反馈,这是用户体验最差的地方,如果界面不是一次性下载完成的,迟早会遇到这个问题。 合理规划我主要是指js脚本,即按需脚本载入,应按照一个合理的颗粒度来切分实际的装载单元。推而广之,页面也是一样。哪些页面可以被合并到一个single page里,哪些需要时再载入,哪些需要切换到一个新的page,这些都是需要规划的,有些时候还需要实践检验。 你所谓不考虑页面缓存如果是指服务器端逻辑,那是不用考虑的。但是响应客户端的时候,你需要向客户端交代,每个资源是否可以缓存,多久过期,这样中间代理和客户端都可以采取一个很好的缓存策略。 你说flash只要请求数据。Ajax当然也可以只请求数据。问题是一个大flash或者完全的spa,其实实际效果都并不好。所以要合理规划。 h-t-t-p500(javaeye识别url存在问题)或者进度条假死,这些是设计和实现是否周到的问题,不是架构的问题。Ajax当然也可以有很好的错误处理。还有,初次下载的时候,你的服务器死了,就算flash,不一样404嘛。 |
|
返回顶楼 | |
发表时间:2007-07-25
treenode 写道 这个事情需要一分为二的来看,没错,早期浏览器确实是在为了争夺用户而匆忙推出新功能,可是这时候w3c在哪呢?当IE和NN各自实现了不标准、但是确实能解决Web开发者问题的方案时,w3c为开发者做了什么呢?等IE事实上统治了互联网的时候才慢吞吞的来“统一标准”,俟河之清,人寿几何,为什么那么多网页only for IE,因为人家实在是没有耐心慢慢等待你的标准了。
后来Web标准逐渐得到大众认可,MS在这个时候仍然顽固的抵制标准,这就很成问题了。不过历史的说,我认为当初微软做的并没有错。 你这种观点不公平。W3C又不是上帝,他不过是个行业组织而已,对厂商又没有强制力。况且我们都知道,在商业机遇和竞争前,你会把遵循标准放在首位吗?当然是不断推出新功能,先笼络住开发者再说,管它将来如何呢?这是一个现实的世界,所以,虽然样式表的思想早有了,但是浏览器厂商没有先想着怎么设计一种样式表语言来满足需求,而是不断的添加新标签,因为这样最简单!至于你说“确实能解决开发者问题”,那不过是解决了缺乏经验,目光短浅的开发者的问题。所以今日之不幸,实是为当时开发者还债也。 不幸的是,时至今日,大多数开发者仍然是这样的。有时候人们还大言不惭的说worse is better。 所以说,我认为w3c虽然也有要改进处,但在连续推出html/css等非常棒的规范已经是尽责了。 至于你说w3c等ie占到统治地位后才来统一,完全是你的臆测,并非事实。 事实上,在ie还不如netscape的时候,ms还是对规范很有兴致的,他是最早部分实现css1的浏览器。到98年webstandard运动兴起,netscape终于决定转向符合规范的Gecko开发计划,这也与当时ns丧失大量市场份额有关。讽刺的是,这是ms却逐渐放弃了改善浏览器的符合规范程度的步伐。 至于说only for ie,这只能证明两点,第一,微软的市场策略是成功的,不管他是用什么手段。第二,许多开发者是愚昧而可怜的。他们不是没有耐心,而是基于一些其他原因。 待续。 |
|
返回顶楼 | |
发表时间:2007-07-25
FLEX何必用REST呢? 后台用J2EE直接做, FLEX直接CALL SERVICE LAYER METHODS, 返回的都是BINARY DATA. FLEX直接使用ACTIONSCRIPT的CLASS (AS CLASS MAP 到 JAVA CLASS).
BINARY数据比XML SIZE要小很多, 而且不需要在XML和数据之间转换, 没有OVERHEAD. 何必扯着REST呢? 用更简单更高效的实现方法就行了啊! |
|
返回顶楼 | |
发表时间:2007-07-26
winterwolf 写道 那么你认为xmlhttp会显示“页面找不到”或“服务器内部错误”了 ? xmlhttp也不请求叶面的 资源 和 view不时叶面 view只是加工过的数据罢了 谈谈多次请求的处理吧 我认为除非必要 否则应该尽量让server处理将多次请求变成一次请求 一方面速度快用户体验好。 另外这样设计更合理 网络是分布样式缓存 没必要将本应中间缓存的数据也甩到客户端 不请求页面当然不会出问题。我说的本来就不是xmlhttp,不要对号入座啊。 多次请求情况下,请求次数肯定是越少越好。从前包括现在许多Web应用中,一个表单就要POST一次,这并不是很合理的作法。有些时候BatchUpdate会更好,不过我还不知道有没有什么框架直接支持这样的功能。 |
|
返回顶楼 | |