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应用开发工具及语言需要具备的功能探索的更多相关文章

  1. python3.4学习笔记(九) Python GUI桌面应用开发工具选择

    python3.4学习笔记(九) Python GUI桌面应用开发工具选择 Python GUI开发工具选择 - WEB开发者http://www.admin10000.com/document/96 ...

  2. WebKit Web Inspector增加覆盖率分析和类型推断功能

    WebKit中的Web Inspector(Web检查器)主要用于查看页面源代码.实时DOM层次结构.脚本调试.数据收集等,日前增加了两个十分有用的新功能:覆盖率分析和类型推断.覆盖率分析工具能够可视 ...

  3. 基于BPM的低代码开发平台应具备什么功能

    一个BPM平台应该具备什么样的功能    用户在选型BPM软件的时候往往不知道该关注哪些功能,什么样的BPM软件能满足国内企业应用需求,笔者从多年BPM研发和实施经验提炼了中国特色BPM应该具备的功能 ...

  4. 我需要在Web上完成一个图片上传的功能

    我需要在Web上完成一个图片上传的功能. 这个页面需要能从手机中选择图片上传. 首先,这个页面是从微信上面触发的,所以修改了微信的的入口地址,增加了身份识别号作为传参. 跳转到页面的时候,页面先检查身 ...

  5. java web实现 忘记密码(找回密码)功能及代码

    java web实现 忘记密码(找回密码)功能及代码 (一).总体思路 (二).部分截图 (三).部分代码 (一).总体思路: 1.在 找回密码页面 录入 姓名.邮箱和验证码,录入后点击[提交]按钮, ...

  6. 宣布发布 Windows Azure 导入/导出服务的预览版以及 Web 和移动解决方案场景的若干增强功能

    客户评估基于云的存储解决方案时,面临的挑战之一是以经济高效.安全快速的方式从 Blob 存储区移进和移出大量数据.今天,我们很高兴地宣布发布 Windows Azure 导入/导出的预览版,这款新服务 ...

  7. Web开发者应当开始学习HTML5的新功能

    据国外媒体报道,谷歌开发者业务部门高管马克·皮尔格雷姆(Mark Pilgrim)在WWW2010会议上表示,尽管还需要进一步完善,HTML5已经获得大多数平台支持,适合完成大多数任务. 但并非所有人 ...

  8. C语言 实现逆置功能

    C语言 实现逆置功能 //凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1. 字符串的逆置 方法1:利用数组 #include<stdio.h> ...

  9. Fastjson是一个Java语言编写的高性能功能完善的JSON库。

    简介 Fastjson是一个Java语言编写的高性能功能完善的JSON库. 高性能 fastjson采用独创的算法,将parse的速度提升到极致,超过所有json库,包括曾经号称最快的jackson. ...

随机推荐

  1. Hduacm—5497

    #include <cstring> #include <cstdio> #include <iostream> using namespace std; type ...

  2. 修改PE文件的入口函数OEP

    修改入口函数地址.这个是最省事的办法,在原PE文件中新增加一个节,计算新节的RVA,然后修改入口代码,使其指向新增加的节.当然,如果.text节空隙足够大的话,不用添加新节也可以. BOOL Chan ...

  3. zabbix3.0部署(LAMP)

    0.1 初始化 #!/bin/sh yum clean all systemctl stop firewalld.service systemctl disable firewalld.service ...

  4. ScrollView中嵌入ListView,GridView冲突的解决(让ListView全显示出来)

    ScrollView中嵌入原生ListView或GridView,会出现ListView,GridView显示不全的问题. 解决方法:重新构造一个ListView或GridView,重写OnMeasu ...

  5. jQuery 通用表单方法

    表单验证一直是一个麻烦的事情,让很多人望而退步,之前想过一个验证的好方法,但是有bug,昨晚请教了juyling.com的王员外,顺利解决. 以下是js代码     function mySubmit ...

  6. 《JAVA学习笔记 (final关键字)》

    [14-9]面向对象-final关键字 /* 继承的弊端,打破封装性. 不让其他类继承该类,就不会有重写. 怎么能实现呢?通过Java中的一个关键子来实现,final(最终化). [final关键字] ...

  7. Listview之优化BaseAdapter中的getView中的contentView

    BaseAdapter中getView中改动的地方: @Override public View getView(int position, View contentView, ViewGroup a ...

  8. JSON.parse()和JSON.stringify() 的用法区别

    parse用于从一个字符串中解析出json对象,如 var str = '{"name":"huangxiaojian","age":&qu ...

  9. 转 15款免费WiFi(入侵破解)安全测试工具

    转:http://www.ctocio.com/security/cloudsecurity/6594.html 一.Vistumbler扫描器 WiFi 扫描器能能发现附近AP的详细信息,例如信号强 ...

  10. vega prime 1.2 (视景仿真)

    Vega Prime 1.2 (视景仿真) MPI的视景仿真渲染工具Vega是世界上领先的应用于实时视景仿真.声音仿真和虚拟现实等领域的软件环境,它用来渲染战场仿真.娱乐.城市仿真.训练模拟器和计算可 ...