对于应用程序的实现来说,在编程方法的选择上,选择比努力重要。
儿子读初二,自己学习编程,他自己捣鼓也从来不问我,在熟悉了Python和WebSocket编程后开始做一些应用,想以此为后台来实现一个网站的全部程序,我也不好打击他,说了他也不会听,只能让他尝试着去做了。
不夸张地说,在我眼里,他已经很厉害了!
WebSocket的使用也相对简单,使用端给指定的地址和端口发送消息,后台从缓冲区里接收字符然后解析做其他处理后,再返回结果给前端。
二进制文件(视频文件、图片)的传输和普通字符、16进制的文件(Word等)需要自己写语句来处理,在前端处理的时候,他只是把数据分片储存在一个变量里,用标记来分隔。后台需要使用正则表达式来一一提取,比较麻烦。
为什么不使用JSON格式来传输呢?
其实,做网站肯定是ASP、PHP或者JavaWeb来得方便和快捷。Python是可以做,起码也用Flask。有现成的不用,非要自己从头来过,这个是选择上的错误。
再努力,再成功,一句话总结就是战术上的成功掩盖不了战略上的失败。毕竟不是开发一门语言或者实现某一个框架,只是为了实现一个普通的网站而已。
Socket是通讯协议,C/S应用程序使用它来开发通讯程序,20多年前这个很流行,用它可以很快地实现两个应用系统的通讯,最典型的就是QQ。WebSocket也一样,网站后台程序可以使用它来实现端对端的相互通讯。
但如果以此来开发网站应用程序,白白地浪费时间和精力,那就不值当了。
多了解一些知识,适当地拓宽知识面可以让自己少犯这样的低级错误。
一位同事要做一个统计,主表是单位,子表是各个单位的人员名单,要统计各个单位有多少人,按单位排序。
他给我看了程序,解释了一下,提取单位列表,排序,然后使用一个循环来依次统计每个单位的人数,数据是对的。
我说,这个统计一条语句就可以了,为什么要这样麻烦呢?!
select a.C02 ,count(b.C25) as C03 from EisDict a,computerAssetsInfo b where a.C02=b.C25 group by a.C02 order by a.C03
就是两个关联表的统计查询而已。
他按照我说的试了一下,报错,提示语句有问题,但不知道哪里出了问题,我说你直接到MS SQL Server里面的查询器去执行,这样就知道错误了。
提示好像是聚合语句里没有排序字段所导致的。
那就改一下:
select a.C02 ,count(b.C25) as C03 from EisDict a,computerAssetsInfo b where a.C02=b.C25 group by a.C02,a.C03 order by a.C03
把排序字段加到聚合函数里结果就出来了,也排序正常了。
直接使用SQL语句就快多了。
很多人喜欢使用if语句,比如在提交前检查用户的数据,很多if的嵌套让人看着头晕。
我习惯使用if语句分开,方便查看。
let strFalse='';//错误提示
let canSubmit=true;//默认是可以继续
if(curSelectTemplateFile.length==0) {
canSubmit=false;
strFalse="请选择模板文件!";
}
if(curSelectBookmark.length==0) {
canSubmit=false;
strFalse="书签不能为空!";
}
$.ajax({//检查数据库ID是否存在
url:'pspIsExist.php',
data:json_str,
type:'POST',
datetype:'json',
async:false,//不能异步
success:function (data) {
if(data=='YES'){
canContinue=false;
strFalse="要插入的记录重复!";
}
}
});
//......其他检查
if(canSubmit){
//执行提交
//......执行代码
}else{
//提示错误
//......提示错误的代码
}
这只是个人习惯,但是同样的语句,选择不同的组合也带来不同的效果。
在判断分类上,多使用switch等让自己很快就能明白逻辑。
在传输上,更多地选择JSON格式或者XML格式而不是自定义的字符数据包可以让你省去很多的时间去封包和拆包。
我们只是做低端的一些应用开发,大神们已经为我们准备了很多方便开发的工具,有好的工具和方法为什么不用呢?
开始写应用程序之前,多了解和掌握这些可以为我们带来很大的便利,这些需要平日里花一点时间去积累和总结。