Ajax 项目三个月,谈谈感受,发发牢骚,并分享一个javascript/ajax调试程序
5月底的时候,我还在求职
现在哪个公司招人啊,我想去当程序员了(限广州)
http://community.csdn.net/Expert/topic/4780/4780511.xml?temp=.87698
转眼一算,现在已经工作两个半月了(6月8日上班).
我和几个同事在项目中只负责 JavaScript 这一块,被称为javascript项目小组
项目比较大,而且几乎全部采用 Ajax技术. 我们用的prototype框架. 客户端转换 xml+xsl
几个月下来感触如下:
1.因为全部采用ajax技术,所以,对开发人员要求比较高,可以说是非常的高.我们用层来模拟
窗口,拖动,最大化,最小化,关闭,拖动边缘改变窗口,改变空间叠放顺序.这些层窗口不是1个,而是
n个,而且每个都是动态生成,层中信息内容也由ajax动态加载.
这种感觉就好象当前用 turbo C++ 来编写window程序界面那样痛苦.
2.来自浏览器的骚扰
很多代码可以在ie下面工作得很好,但是在FF浏览器就惨不容睹.
有时候好不容易把ie 和 ff搞定了,你的窗口,层却被遨游,myie等浏览器当广告拦截了.
曾经有一段时间被遨游搞得头晕,同一个函数,同一行代码建立的层,有些被它当做广告kill掉了
有些确不会,让人抓狂.(好象是面积小的层,内容小的层,遨游就把他当广告,内容多的层就不会),
反正,感觉对层的生杀权利都不在自己手上
3.随着项目越大,代码中间的冲突越来越明显,隐蔽的错误更难找到,更隐蔽,更难调试.
主要体现在html元素的id命名, 函数名的命名,全局变量的命名,这些在后期更容易和其他程序员
的代码冲突,重复,被他们污染. 而且这种错误往往很难找到.
(其症状是程序不定期的莫名奇妙的发生随机错误)
4.对于第3点,尽管事先开发小组有考虑,约定过命名规范来避免这种错误,但是有些组员是新加入的
有些代码是以前些过的,或者从网上copy的.... 现在我的主页面javascript代码已经超过3000行,
除此以外还包含了10左右的 *.js 文件,4个我写的,6个其他程序员写的.
在长达几千行的代码中找个错误,那感觉谁能体会呢?
5.现在ajax技术流行,很多公司团体都想用 ajax技术开发网站,但是你们是否想过, ajax网站对
javascript技术的要求是非常高的. css,dom,xml,xsl,javascript,兼容firefox,性能 等等,哪一个
不是非常的熟悉都可能导致开发的失败. 幸好我们这个项目对 javascript层的估计没出什么问题.
分了几个程序员专职javascript,几个程序员专职php,不然,....项目就不可控了....
对于调试,以前基本上用最原始的 alert(), document.write()来调试,效率非常低下.而且
ajax的数据更难调试,在网上找了找,也没有找到个合适的,所以,干脆我自己写了一个调试程序.
经过几个组员的试用,感觉,还不错,现在分享给大家.
本来是基于 prototype.js 的, 刚才分离出来了,不用prototype.js也可以单独工作了.
代码如下:
先做个小广告: (想找个同事)
我们公司现在在招 javascript工程师(若干,真正有本事的来几个都要)
地点: 广州..天河北.. (也就是华南师范大学旁边)
要求技术:
不要求你精通asp,php,jsp,ui设计等 精通这精通那.精通A精通B
服务器端编程,php或者 ajax请求的xml数据的生成,数据库操作都有专门的开发小组负责
美工设计,ui有专门的UI小组负责
只要求你熟悉 javascript,xsl,dom 这些就可以了,因为你的工作是专职写javascript代码
待遇看水平而定,看自己的能力和谈判技巧了.每周上五天班
如果你对javascript,ajax有足够的自信和兴趣,愿意来广州工作,愿意做我同事,
那给我发简历吧 (haveatry823@126.com)
技业有专攻,因为是专职Javascript程序员,在javascript程序方面,没有三板斧至少也要有两把斧头吧.
/********************debug.js***************************************/
// 兼容FireFox的事件处理模式
function getEvent(){
if(document.all) return window.event;
func=getEvent.caller;
while(func!=null){
var arg0=func.arguments[0];
if(arg0){
if(typeof(arg0)=="object" && arg0.preventDefault && arg0.stopPropagation) return arg0;
}
func=func.caller;
}
return null;
}
/*
为了兼容那些不使用prototype.js的程序,写的两个函数
如果事先引入过prototype.js, 下面两个Array.prototype 就不需要了
*/
if (!Array.prototype.map){
Array.prototype.map=function(f){
for(var i=0,ret=[];i<this.length;i++) ret.push(f(this[i],i))
return ret
}
}
if (!Array.prototype.inject){
Array.prototype.inject=function(ret,f){
for(var i=0;i<this.length;i++) ret=f(ret,this[i],i)
return ret
}
}
/*
格式化数字或者字符为每三位分逗号的格式 123456--->123,345 1234---> 1,234
参数可以是数字或者字符串,返回字符串
*/
function formatNum(s){
return (""+s).split("").reverse().map(function(x,i){return (i%3 || !i)?x:x+","}).reverse().join("")
}