说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

富Web应用开发的七大原则

HTML文档下载 WORD文档下载 PDF文档下载
针对富Web应用,开发者应该注意哪些要点?原文作者Guille认为如何让用户以最快的时间获得想要的数据尤为重要,开发者应注重七大原则,包括:服务器渲染、即时响应用户输入、响应数据/状态变更、增强历史记录处理等。
 【编者按】对于Web开发者而言,除了具拥有精湛的开发技术外,还应具备一些软技能。而针对富Web应用,开发者应该注意哪些要点呢?原文作者Guille认为如何让用户以最快的时间获得想要的数据尤为重要,开发者应注重以下七大原则。译文如下:


网络上有关Web开发未来的热门讨论有很多,比如:JavaScript能否替代实现诸如历史记录、网页浏览、页面渲染等浏览器功能?开发者应该放弃后端,直接进行HTML渲染吗?单页面应用会流行起来吗?

要解答上述问题,我会尝试以JavaScript为突破口,从用户体验方面进行考虑;如何能让用户以最快的时间获得想要的数据是我最为看重的。

1. 服务器渲染是必须的

目前有个比较错误的分立观点:“服务器渲染与单页面应用的对立。”如果我们真的想最大程度地提升用户体验和性能,把这两者区别对待、互为排斥都不是好的解决方法。

首先,当进行页面传送时,互联网连接本身有个理论速度限制。地理位置上两点间的传输速度受到地域、带宽、路由等因素影响;减少两点之间往返的通讯次数显得尤为关键。一个足够灵活的系统应当能够均衡好浏览器端和服务器端的代码渲染工作,减少网站和网络应用之间的差别。

2. 即时响应用户输入

当用户访问某个网站时,每个交互动作都应该尽量做到少延迟、快响应。

HTML中文档的连接是透过超链或<a>标签完成的。当点击这些链接时,浏览器会发送一个请求,这个请求被接收和响应前的用时是无法确定的。相反,JavaScript能够针对用户输入做出即时的响应。例如谷歌或百度,现在我们在其首页进行输入时,不用点击搜索或确定,浏览器会自动进入搜索结果页面;还有就是智能提醒,边输入边提醒的功能也是非常人性化的。


只要在Google搜索栏敲任何一个键,都会直接跳入搜索结果页面

3. 响应数据/状态变更

现在无论是采用传统的页面刷新还是AJAX交互来对静态页面执行更新都显得稍稍落伍了。目前更好的做法是自行更新(self-updating)。

如果有款应用同时打开了多个标签/页面,如果用户进行了登出操作,所有已打开的标签都应该能同时失效。要想做到类似的自行更新,状态协调(state reconciliation)是需要多加考虑的。在只是更新少量数据的参合,我们往往很容易忽略了长时间连接中断后该如何让程序作出正确响应。比方说休眠电脑数天后再打开,我们的程序该如何对这个状态(如机器状态标识码)进行处理呢?如果我们想在初始页面传送数据,在客户端脚本装载前必须确保数据是可访问的。一旦发生连接中断,脚本建立的初始连接必须能够进行会话恢复。


每个页面都指向了同一个会话和登入状态

4.控制与服务器的数据交换

在万维网中,客户端和服务器端的数据交换一般限于已下几种形式:

  1. 点击连接,GET获取了新的页面,然后渲染这个页面;
  2. 通过POST或GET提交表单,然后渲染新页面;
  3. 异步装入一个图像或对象,然后渲染它。

其中,上述第二种方式最容易出问题。从性能角度来看,不断触发新页面来发送数据是个效率极差的做法。例如下面这个曾经令人抓狂的错误:


现在网络上有丰富的APIs(如XMLHttpRequest,EventSource)不但能帮助我们很好地控制数据流向,同时能帮助增强用户体验,如表单的填写、发送。

如前述的状态协调,如果程序检测到连接中断后,把数据暂存起来将能帮助日后的会话恢复。服务工作器(Serviceworker)的引入在这时就变得非常重要了。它能够让JavaScriptWeb应用在后台运行。即使程序没有开启,我们仍然能够在后台同步用户数据。

5.增强历史记录处理

一般来说,页面状态的过渡依赖于URL的变更;这给我们带来了增强历史记录管控的机会。


当浏览历史页面时,评论的折叠状态应该得到保留

例如,我们通过手机应用查看商品时,发现了心仪物品,一般情况下如果这时候进行购物车操作都会中止当前界面的访问;购物完毕后点击返回,如果先前已经翻看了很多页并滚动到某个位置,如果这时能根据历史记录准确地返回之前的位置,用户会对此非常赞赏的。再譬如,我们填写了某个表单,如果发送失败,点击返回后能自动帮助用户把已经填好的数据进行恢复,这也是能极大增强用户体验的。

6. 推进代码变更

如果程序的代码发生变更,采用什么方法来使客户端对此做出正确响应是很重要的。

一个好的代码更新推送机制是如果发现有新的版本,能够及时提醒客户端对此进行选择处理。又或者是在HTTP请求的头部信息中附加版本号信息,让服务器针对版本号作出正确处理。

更好的一个处理方法是进行热代码重载(hot codereloading)。它的意思是不需要对整个页面进行刷新,而只是对变更关联部分或模块进行在线更新。这需要对全局影响进行全面评估,防止部分模块更新后出现其它异常。

7. 预先感知

一个丰富的JavaScript应用能够有效识别用户输入并做出预感反馈。

典型的例子是当鼠标悬停在某个链接时,服务器已经开始着手准备数据,这将极大地减少渲染新页面用时。还有就是能针对鼠标动作做出交互反馈,如移动,碰撞,移出/入等。


这是一个用jQuery实现的感知鼠标动作的例子

写在最后:

Web仍然是当前信息传播的最重要媒介之一。当我们不断为页面添加动态交互的同时,我们必须确保新技术能很好地做好承上启下的角色。JavaScript是开拓新局面的当头先锋,随着其使用得更为广泛更为深入,用户体验也会迈进新的台阶。

原文链接:Rauchg

亚洲高科技公司正在分享惠普、戴尔和IBM的云“午餐” Groupon创业启示:进军海外,请三思 天才之为责任:Unity CEO谈论Unity 4.0游戏引擎 中文版Evernote百宝箱上线:开发者海外推广新渠道 360产品被爆收集用户隐私 桌面安全路在何方 销售额达一万亿元 阿里巴巴成世界最大电商 共享软件海外营销策略与实战分析(武汉站)成功落幕 你未必知道的CSS故事:揭开leading的面纱 2013年 影响Web发展的5类API 《Warcraft是怎样炼成的》:多人对战、战争迷雾以及AI HBTC精彩回顾 Hadoop专家分享大数据技术工具与最佳实践 苹果iTV规格泄露:iOS应用开发的新蓝海 Facebook觊觎微信鼻祖WhatsApp,但谈不上收购 首款社交API应用 Facebook Messenger for Firefox正式上线! 共享软件海外营销策略与实战分析(沈阳站)成功落幕 移动之伤:为什么山寨游戏比原创更火? IBM在京发布PureData 主打数据交易处理、操作分析 Intel发布Hadoop免费版 全力拓展生态圈 突出图片搜索:微软向测试人员开放Socl社交搜索 豌豆荚创始人:和巨头竞争,我们拼产品和技术 “互联网女皇”报告解读:智能电视大趋势 苹果扩大其北卡罗莱纳州燃料电池发电场规模 Oracle回收站使用全攻略 微软这次很诚实:IE真的糟透了 Facebook进军短信业务,挑战微信鼻祖WhatsApp 从菜鸟到专家的五步编程语言学习法 亚马逊企业文化:从书贩到云服务巨头的催化剂 明年Google I/O大会日程敲定 或发Android“酸橙派”? 绝境求生,WebOS寄望Android Facebook在移动路上走过的那些弯路 曙光聂华:推动数据融合 请问各位sqlplus如何获得某个表的主键信息? ADO数据绑定记录死活插不进数据库 网络GIS开发者联盟诚邀软件界精英,共创伟业 仅以此诗献给天下的光棍们.................(转帖) 新年好 在页面添加select option 请问一个MDI基本问题 关于windows2000下打印机安装问题?急!在线等!!!! 打印vb窗体 有什么办法(产品)实现局域网内 IP 同 MAC 绑定,未经绑定关系建立的机器无法实现通信? 谁能给个关于递归的例子? 个人版的SQL SERVER 2000能提供多少连接阿? 网络GIS开发者联盟诚邀软件界精英,共创伟业 dlink网卡不能FTP? 快过年了,打算给父母还有爷爷奶奶买点东西,大家有什么好的建议? asp.net项目启动运行出错,详细信息如下: 怎样判断数据读取完毕? 求ERP的电子书、资料 如何才能做到c/s结构应用程序(pb开发的mis)访问数据库不安装oracle客户端??谢谢 高分请教做服务器,win2000server ???win2000系统,Epson 1600系列打印机,如何找到"自定义纸张"..谢谢 控件区别? 通过一组checkbox来控制按钮是否为disabled 如何通过SQL语句获取我的ORACLE版本号。 在线等,谢谢了…… 应该开个图书交流的版,大家就不必去买那么贵的新书了 ADOTable与ADOquery同步更新问题?? 给你看一张照片,这两人是谁 市面上的delphi的好书怎么这么少呀?哪位ggjj推荐一本好的delphi书籍!! 关于组件和控件的问题。 兄弟们,分数线出来啦!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! rows菜单update properties下 identity column 列表框作何解? 一个过滤问题 我的系统分析员成绩出来了,气死我了。39,39,55 感觉她作我的GF不错(附照片) 关于excel控件的使用中的第一步 请问哪位有显示CAD文件的组件 用SQL SERVER 2000把数据结构同数据导出到Oracle8i 时 只能够导出结构,why? 忍痛转让 小木可来接分! 各位,在pb里能够用java的类和函数么? 为什么FrameworkSDK里的例子都不能运行? 建议增加《无线应用》板块,包括SMS 函数定义为static有什么作用? 关于postgre,help~~~~~ 怎么在vb的datareport中,显示图片呀!很急,帮忙 谢谢! 邮件问题!控件的用法! 有谁用VC做过面向对象数据库ObjectStore的开发,想交流一下 为什么装了ADSL后经常性死机呢!谢谢 如何打印vb窗体 请大家帮忙看看我的CPU到底是什么烂货!!!谢谢了! 《旋风小子》“母子三人”20年后同台罗中旭录节目全程墨镜 遭女友劈腿情绪日本G奶女优白石茉莉奈快播首部AV写死鱼可乐事件牵扯出代言百事可乐大牌明刘嘉玲正面回应代孕母亲生子:要生自己美国龅牙混血狗狗风靡网络史上最牛作弊:作弊器缝进卫生巾带入考韩国绝色美女空姐莫文蔚黄色低胸露背纱裙艳压全场刘诗诗衣服破洞露臀部皮肤险走光李玟向丈夫承认整容 赞成微调不建议乱深圳“富二代”与嫩模激吻照 被曝竟是盘点杨幂古装唯美剧照(图)《一夜惊喜》曝范冰冰剧照 造型百变《不二神探》女神特辑 刘诗诗陈妍希柳贾斯汀比伯花费二十万美元 报名参加太李玉刚进军巴黎高级定制服装周 接轨国小S惊艳亮相身材玲珑有致 最怕被问大古天乐5年多天天写博客 网友不买账:王祖贤杰克逊合照曝光 大明星们逆天穿42岁杨钰莹与39岁林志颖曝合影 网水深50厘米的冲浪按摩池 差点吸走1踢足球击中抱孩子散步的母亲 8个月大网传:大量排汗有利于重金属排泄 是真青奥会女子4X100米混合泳中国夺冠北上广等一线城市房价首现全面下跌 楼“立法反家暴”重在制度协同江苏支教大学生走进贵州村小楼市持续低迷,调控之策应立足长远我省调10个玄武湖驰援山东南四湖大雨“路过”昆明 19日就会转弱鲁甸巧家一家亲 群众互助友爱共度难关[合资30年之五]汽车合资的发起者和南通扬尘防控不力企业不得投标广东省示范高中和“省一级”将交由社会9家滇企菜籽油在黔“被下架” 滇企喊8大领域新推55项改革措施女童放牛回家高烧不退 竟是被恙虫咬伤宿豫村级为农服务社全覆盖从“主动退市”到重新上市的启示跟“动总”一起感受韩国style大幅降低“三公”支出
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘