Web应用开发工具及语言需要具备的功能探索
1 前言
最近一个多月在做Web项目,用到的技术有(也不算泄漏公司机密吧):
后台:Struts 2(with JSP/FreeMarker)、Spring、Hibernate、MySQL、Web Service(only dubbo interface);
前台:jQuery series;
Web服务器:tomcat。
虽然比较厌恶被别人称为做Java Web的,但没有做过的事情还是有挑战性的,一周内几乎天天加班足可以我的态度。
好像有成就感的计算机硕士应该觉得这些活儿是些"平凡"的凑工分的活儿,"纯"技术活儿怎么的也得是云计算、并行/分布式计算、数据分析/大数据等等高大上的。
为什么又是partial?
原计划是准备第一遍看完Python Django再回过头来写的,但是现在有更重要的事情,而作为结构化拖延症患者,自然就选择了这个不是很费脑细胞和时间的活儿,看能不能写完。
废话流太多了,该入正题了!
2 HTTP
每个Web开发者都应该感谢Fielding等人关于HTTP的工作,喜欢看飞机结构、功能说明书的学究可以去看RFC,想零基础起步学习开飞机的可以看[1]。
简单的Web应用中用的最多的MIME类型是text/html、application/json,暂时还用不到REST。
HTTP 2的一些新特性,在处理TCP连接、客户端和服务端交互方式等有了质量属性(*ities)方面的支持。这既是机遇,也是挑战。
3 Web应用开发工具需要具备的功能
想跳出Java Web这个小框框,但发现对其他的开发工具没有足够的发言权,还是主要是Java Web开发工具吧。
IDE/编辑器是必需的!有语法高亮错误提示、自动补全?多多益善。
一个足够轻量而有不是太轻量的Web服务器,tomcat够了吧?不!没有热部署功能,改个Action或DAO接口Java类实现,都得重启一遍,想想人家PHP,多开心啊(LAMP不予评价),好像我们也有JSP啊,把业务/数据访问逻辑堆到JSP页面上是石器时代过来的吧。我目前没有看到很好的解决办法,只是尽量让启动的速度稍微快一点,保证等待的时间不超过一根烟的时间。
Web服务器支持静态资源是必须的,动态内容呢?每次重新生成?这应该是开发语言实现本身需要考虑的事情。Web服务器应该提供足够多的配置项,虚拟根路径、应用模块页面路径切分什么的,但也不要太多,毕竟它的职责只是收发HTTP请求/响应,过多的话就越权了啊。
4 Web应用开发语言需要具备的功能
好像应该是语言族,产品经理大多会把Web浏览器当前Web"富"客户端。
还是动态内容!
数据从哪儿来?数据库,甭管内存/进程、集中式/分布式、开源/商业的数据库,该开发语言的Bridge/Connector/Adapter模块/库总得有一套。
根据什么条件生成动态内容?应用逻辑一般很好实现,开发语言应该很方便的接收前台传过来的参数,不就是GET/POST嘛,稍微成熟稳定的框架足可以保证程序员手头很干净,至于multipart传个文件/视频,车到山前自有路嘛。话外,切分请求URL对应应用逻辑处理在当前项目中有使用,玩的真嗨,由衷的击节赞叹。
如果是恶意请求怎么办?诸如DoS攻击就不是语言本身能够解决的事情了,加些过滤器/拦截器切面基本上可以解决权限判断、SQL注入攻击了。
动态内容响应怎么生成?最“省力”的方法是对每个请求在线生成唯一的响应,够快、但不便于应付产品经理鬼魅似的变更。模板!又引入了个DSL语言,这年头不懂个几门编程语言都不好意思叫自己程序员,为了应对随时到来的polyglot language时代,多会门手艺多条出路嘛。模板语言又该有些什么功能?命令式的条件判断、循环是必须的,便利的数据格式转换等也是多多益善的。
数据流是怎么处理的?在哪里接收请求参数?业务处理前端还是响应页面上,不考虑性能的话随便。又怎么把响应数据堆到或传给响应页面上呢?推/拉随便啦。
至于富页面,糟糕的JavaScript规范、军阀混战式的浏览器实现,有人认为这是机遇,我认为是遭遇。还好项目组里用的是jQuery(core, UI, Widget)、有专业的前端工程师,他每次用CSS都让我一愣一愣的,还是让专业的人做专业的事情吧。至于ajax请求,每次面对产品经理不合理的页面逻辑,我很乐得用。
5 高级特性
这部分内容不是工具和语言本身能够处理的问题,需要融合包括业务逻辑、实施方案、用户行为等作出决策,没有提供解决方法。
我十分愿意相信业务主管总是唱着这首歌在指派任务的:Harder Better Faster Stronger.
性能调优
这是一个综合性的问题,尽管已有大量成功的实践经验被共享,但仍属于百家争鸣、深受应用架构师/开发者经验和taste影响的问题。
业务流整合,页面端、服务器端的优化,一起为了快速响应的用户体验。
优化思路包括从网络模型堆栈挖掘(长连接等)、页面端优化(CDN、压缩等)、服务端(业务流程梳理、数据拆分存储等)。
缓存
响应越来越慢了!慢的令人发齿啊!
局部性原理用的好,你好,我也好。
再听听缓存的声音:凭什么大家活得时间一样长啊,我明显比你用的多啊;为什么只能存这么多,还有大部分屁股露在外面呢?
rps/tps
程序员的那句“这个功能实现不了”被列为跟“您的菜马上好”、“钱我先帮你存着”、“往里走,里边还有空位”等一样的真实的谎言时,我很震惊。
需求很简单:页面从这里跳到这里、这里要显示这些,再跳到这里、要显示这些。你知道浏览器跟Web服务器交互了几次、Web服务器又跟数据库交互了多少次啊,把这个很炫的功能拿掉我能少写很多代码啊。
至于页面脚本放置位置等页面端优化可以参考成熟的团队总结出来的经验。
关键的还是得有个profile,数据足够说明你的怀疑是否正确。
用户行为跟踪、分析、个性化
恩,高级话题。还用不着扯上NoSQL,能保证每个页面被访问次数一样吗?哪些页面流会被用户经常的连续性访问?
还个性化,个性化什么?消息提醒啊?推啊拉啊!推荐内容?我的职位是什么来着。
参考资料
[1]Gourley D., Totty B., Sayer M. et al.HTTP权威指南[M]. 北京: 人民邮电出版社. 2012.
Web应用开发工具及语言需要具备的功能探索的更多相关文章
- python3.4学习笔记(九) Python GUI桌面应用开发工具选择
python3.4学习笔记(九) Python GUI桌面应用开发工具选择 Python GUI开发工具选择 - WEB开发者http://www.admin10000.com/document/96 ...
- WebKit Web Inspector增加覆盖率分析和类型推断功能
WebKit中的Web Inspector(Web检查器)主要用于查看页面源代码.实时DOM层次结构.脚本调试.数据收集等,日前增加了两个十分有用的新功能:覆盖率分析和类型推断.覆盖率分析工具能够可视 ...
- 基于BPM的低代码开发平台应具备什么功能
一个BPM平台应该具备什么样的功能 用户在选型BPM软件的时候往往不知道该关注哪些功能,什么样的BPM软件能满足国内企业应用需求,笔者从多年BPM研发和实施经验提炼了中国特色BPM应该具备的功能 ...
- 我需要在Web上完成一个图片上传的功能
我需要在Web上完成一个图片上传的功能. 这个页面需要能从手机中选择图片上传. 首先,这个页面是从微信上面触发的,所以修改了微信的的入口地址,增加了身份识别号作为传参. 跳转到页面的时候,页面先检查身 ...
- java web实现 忘记密码(找回密码)功能及代码
java web实现 忘记密码(找回密码)功能及代码 (一).总体思路 (二).部分截图 (三).部分代码 (一).总体思路: 1.在 找回密码页面 录入 姓名.邮箱和验证码,录入后点击[提交]按钮, ...
- 宣布发布 Windows Azure 导入/导出服务的预览版以及 Web 和移动解决方案场景的若干增强功能
客户评估基于云的存储解决方案时,面临的挑战之一是以经济高效.安全快速的方式从 Blob 存储区移进和移出大量数据.今天,我们很高兴地宣布发布 Windows Azure 导入/导出的预览版,这款新服务 ...
- Web开发者应当开始学习HTML5的新功能
据国外媒体报道,谷歌开发者业务部门高管马克·皮尔格雷姆(Mark Pilgrim)在WWW2010会议上表示,尽管还需要进一步完善,HTML5已经获得大多数平台支持,适合完成大多数任务. 但并非所有人 ...
- C语言 实现逆置功能
C语言 实现逆置功能 //凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1. 字符串的逆置 方法1:利用数组 #include<stdio.h> ...
- Fastjson是一个Java语言编写的高性能功能完善的JSON库。
简介 Fastjson是一个Java语言编写的高性能功能完善的JSON库. 高性能 fastjson采用独创的算法,将parse的速度提升到极致,超过所有json库,包括曾经号称最快的jackson. ...
随机推荐
- java中的日志组件-log4j
1.为什么使用日志组件 Log4J是Apache的一个开放源代码项目,它是一个日志操作包,通过使用Log4J,可以指定日志信息输出的目的地,如控制台.文件.CUI组件.NT的事件记录器:还可以控制每一 ...
- 用K2 smartforms开发一个应用程序究竟比ASP.NET快多少?
这次试验的起因是一场内部辩论. “用K2 smartforms开发一个应用程序究竟比ASP.NET快多少?” 我们推测是快4倍. 但是经过测试发现,我们推测错了. 本文记录了试验的规划.过程以及令人惊 ...
- Vi不显示insert
edit file :/etc/vim/vimrc.tiny set compatible -> set nocompatible or install vim
- matlab代码 图像处理源码
非常不错的找图像处理源码的地方,源码搜搜. http://www.codesoso.com/Category.aspx?CategoryId=56
- DataNode,NameNode,JobTracker,TaskTracker用jps查看无法启动解决办法
查看tasktracker的50060的地址无法正常查看,主要有两个原因,一个是在/tmp目录下有以前使用2.02版本留下的文件没有删除,二个是因为端口被占用了 解决方法: 一.删除/tmp目录下所有 ...
- IIS 6.0 401 错误
1.错误号401.1 症状:HTTP 错误 401.1 - 未经授权:访问由于凭据无效被拒绝 分析: 由于用户匿名访问使用的账号(默认是IUSR_机器名)被禁用,或者没有权限访问计算机,将造成用户无 ...
- hadoop2.x通过Zookeeper来实现namenode的HA方案以及ResourceManager单点故障的解决方案
我们知道hadoop1.x之前的namenode存在两个主要的问题:1.namenode内存瓶颈的问题,2.namenode的单点故障的问题.针对这两个问题,hadoop2.x都对它进行改进和解决.其 ...
- POJ 1185 炮兵阵地(经典的状态压缩DP)
题意:中文题. 思路,经典的状态压缩题目. 由于列长比较小,我们可以以行为阶段用状态压缩来做. 由于攻击只占两个格,这样从行的角度看,第i行的炮兵只与前i-1和前i-2行有关系.这样如果用j,k,l分 ...
- UVa 10328 - Coin Toss (递推)
题意:给你一个硬币,抛掷n次,问出现连续至少k个正面向上的情况有多少种. 原题中问出现连续至少k个H的情况,很难下手.我们可以试着将问题转化一下. 设dp[i][j]表示抛掷i个硬币出现连续至多j个H ...
- TCP同步传送数据示例(简洁、清楚)
转自:http://www.2cto.com/kf/201206/134841.html 本例子写了个简单的TCP数据传送功能.没有使用BinaryWriter,BinaryReader,而是使用Ne ...