以前做的教师后台系统是asp做的,
要再次改版,
想用php语言,ajax程序做后台
因为数据实时再查,也不能用缓存。
用ajax做后台行的通吗?
我们标准是10W人在线用户,
使用不要出现数据延迟什么的!
请问纯ajax做得通吗?
有没有人做过承载量人多的。
大家提下意见,
使用ajax,还是不用ajax好呢?

解决方案 »

  1.   

    如果一定要用ajax来实现,你还有选择吗
      

  2.   


    这是我们内部分歧的问题,
    开发团队5个人,
    有1个人不想使用,
    有4个人坚持要使用,
    这不想使用的是我!
    因为这个系统是我维护的!
    他们几个是开发部的!
    以前经常出现ajax查询延迟时间,
    很多老师反映速度太慢,让后我更改大部分不用ajax,
    现在用户量又在增加!
    数据库支撑不了,要重做读写分离!
    开发部人员和我不是一个部门,
    他们只管做功能,不去考虑性能
    就怕出现以前的问题,到时候还是我来改
    他们说必须做出1个能让他们信服大量用户使用数据反映慢的证据和理论
    他们才同意修改,
    所以很纠结,就想问问,ajax在php语言中,也会出现这种问题吗?
    有没有这个方面大量在线用户使用ajax解说这个利与弊问题!
    或者有经验的人解说下。
      

  3.   

    ajax很适合刷新页面部分数据,“实时”更新“他们只管做功能,不去考虑性能”这是重点,你不参与开发,就不要去干涉技术,只要坚持最后要做压力测试。
      

  4.   

    asp 能完成的任务 php 自然也能完成
    AJAX (Asynchronous JavaScript And XML) 异步的 javascrip 和 XML
    不知道你如何用它做后台
    访问量大的时候数据延时,首先需要提升硬件性能。没有高速公路,再好的车也跑不起来
      

  5.   

    服务器以前买的7W左右,
    asp出现这个问题,我改好啦!
    我也想用压力测试!
    就是找不到好的软件
    好多都付费,
    能承载10W人访问的压力测试软件现在还好,才做2个多月,这个系统起码做1年,万一最后压力测试出问题
    还是要做1年,时间耗不起!毕竟考试系统以后都是我来维护,有没有人做过这么用户量的后台啊!
    他们做ajax后台是,不管什么操作,都是用ajax写
    添加改查,全是这样写。数据很多的,表里上亿条数据都有的,差不多200G数据吧!
    数据库采用读写分离,但程序,我很郁闷。
      

  6.   

    还有,我也参加技术开发了,毕竟我也是程序员
    只是不是一个部门。
    现在我想退出,
    主管不同意,做最后,做坏了,
    肯定怪我技术没沟通好,
    所以出现这个问题,
    有没有做过ajax压力测试的,
    很需要一些数据参考!!
      

  7.   

    //判断用户类型
    function checkAdminUserType(uid, opt_type)
    {
    var states = 0;
    if (opt_type == 1) {
    states = 1;

    $.ajax({
    type: 'get',
    cache: false,
    url: 'admin_user_management_action.php',
    data: {method: 'query_admin_user', PAGEINDEX: 1 , SPLITNUM: 1, UID: uid, GID: '', UTYPE: '',
    ACCOUNT: '', PASS: '', REALNAME: '', SFZCODE: '', MOBILEPHONE: '', TEL: '', STATES: states,
    CREATETIME: '', AREA: '', SCHID: ''},
    success: function(result){
    var ret_obj = eval("("+result+")");
    if (ret_obj.RETCODE == 1) {
    if (ret_obj.RETOBJ[0].UTYPE == 3) { //代理商用户
    queryAgentIsExist(uid, opt_type);
    }
    if (ret_obj.RETOBJ[0].UTYPE == 1 || ret_obj.RETOBJ[0].UTYPE == 2 || ret_obj.RETOBJ[0].UTYPE == 16
    || ret_obj.RETOBJ[0].UTYPE == 17 || ret_obj.RETOBJ[0].UTYPE == 18) {
    //老师,正副校长,班主任,教导主任
    queryTeacherClassIsExist(uid, opt_type);
    }
    } else {
    alert('异常');
    return false;
    }
    },
    error: function(){alert('异常');return false;}
    });
    }; //查询代理商信息是否存在
    function queryAgentIsExist(uid, opt_type)
    {
    var states = 1;
    if (opt_type == 1) {
    states = 0;
    }
    $.ajax({
    type: 'get',
    cache: false,
    url: '../agent/agent_management_action.php',
        data: {method: 'query_agent', PAGEINDEX: 1, SPLITNUM: 1, AID: '', UID: uid, NAME: '',
        LINKNAME: '', LINKMBPHONE: '', CNAME: '', STATES: states, CREATETIME: ''},
    success: function(result){
    var ret_obj = eval("("+result+")");
    if (ret_obj.RETCODE == 1) {
    if (opt_type == 1) {
    deleteAgentRecord(ret_obj.RETOBJ[0].AID);
    } else {
    recoverAgentRecord(ret_obj.RETOBJ[0].AID);
    }

    },
    error: function(){alert('异常');return false;}
    });
    }; //删除代理商信息
    function deleteAgentRecord(aid)
    {
    $.ajax({
    type: 'get',
    cache: false,
    url: '../agent/agent_management_action.php',
    data: {method: 'delete_agent', AID: aid},
    success: function(result){
    var ret_obj = eval("("+result+")");
    if (ret_obj.RETCODE != 0) {
    alert('异常');
    return false;
    }
    },
    error: function(){alert('异常');return false;}
    });
    }; //恢复代理商信息
    function recoverAgentRecord(aid)
    {
    $.ajax({
    type: 'get',
    cache: false,
    url: '../agent/agent_management_action.php',
    data: {method: 'recover_agent', AID: aid},
    success: function(result){
    var ret_obj = eval("("+result+")");
    if (ret_obj.RETCODE != 0) {
    alert('异常');
    return false;
    }
    },
    error: function(){alert('异常');return false;}
    });
    }; //查询老师所管理的班级信息是否存在
    function queryTeacherClassIsExist(uid, opt_type)
    {
    var states = 1;
    if (opt_type == 1) {
    states = 0;
    }
    $.ajax({
    type: 'get',
    cache: false,
    url: '../teacher/teacher_class_management_action.php',
    data: {method: 'query_teacher', PAGEINDEX: 1, SPLITNUM: 1, TID: '', UID: uid, AREA: '', SID: '',
    STATES: states, MOBILEPHONE: '', CREATETIME: ''},
    success: function(result){
    var ret_obj = eval("("+result+")");
    if (ret_obj.RETCODE == 1) {
    if (opt_type == 1) {
    deleteTeacherClassRecord(ret_obj.RETOBJ[0].TID);
    } else {
    recoverTeacherClassRecord(ret_obj.RETOBJ[0].TID);
    }

    },
    error: function(){alert('异常');return false;}
    });
    }; //删除老师所管理的班级信息
    function deleteTeacherClassRecord(tid)
    {
    $.ajax({
    type: 'get',
    cache: false,
    url: '../teacher/teacher_class_management_action.php',
    data: {method: 'delete_teacher', TID: tid},
    success: function(result){
    if (ret_obj.RETCODE != 0) {
    alert('异常');
    return false;
    }
    },
    error: function(){alert('异常');return false;}
    });
    }; //恢复老师所管理的班级信息
    function recoverTeacherClassRecord(tid)
    {
    $.ajax({
    type: 'get',
    cache: false,
    url: '../teacher/teacher_class_management_action.php',
    data: {method: 'recover_teacher', TID: tid},
    success: function(result){
    if (ret_obj.RETCODE != 0) {
    alert('异常');
    return false;
    }
    },
    error: function(){alert('异常');return false;}
    });
    }; //恢复查询记录
    function recoverSelectedRecord()
    {
    var recover_uid_str = "";
    var recover_record_num = 0;
    $('input[name="uid"]:checked').each(function(){
    if (recover_uid_str == "") {
    recover_uid_str = $(this).val();
    } else {
    recover_uid_str = recover_uid_str +','+ $(this).val();
    }
    recover_record_num = recover_record_num+1;
    });
    if (recover_record_num == 0) {
    alert("请选择要恢复的内容");
    return false;
    }
    $.ajax({
        type: 'get',
        cache: false,
        url: 'admin_user_management_action.php',
        data: {method: 'recover_admin_user', UID: recover_uid_str},
        success: function(result){
        var ret_obj = eval("("+result+")");
        if(ret_obj.RETCODE == -1){
        alert(ret_obj.RETMSG);
        return false;
    } else {
    alert(ret_obj.RETMSG);
    var current_record_num = total_record_num-(current_index-1)*split_num;
    var total_page_num = Math.ceil(total_record_num/split_num);
    if (recover_record_num == current_record_num && current_index == total_page_num) {
    if (current_index != 1) {
    current_index = current_index -1;
    }
    }
    queryAdminUser();
    recoverAgentAndTeacher(recover_uid_str);
    return true;
    }
        },
        error: function(){alert('异常');return false;}
    });
    };
      

  8.   

    ajax查询延迟时间慢跟ajax没关系,还是跟服务器有关,想办法优化一下服务器端,比如缓存
      

  9.   

    没有ajax压力测试,只有服务器压力测试,ajax是在每个人自己的浏览器里能有什么压力
      

  10.   

    到底ajax也是请求而已,压力测试还是看你的系统设计和数据库优化
      

  11.   

    我来学习的。。改优化还得优化。 跟ajax 没多大关系。
      

  12.   

    俺说啦,和服务器没关系,不是ajax1下子就出来结果,用ajax要等会才出来,
    所以头痛这个,没啥理由啊,
      

  13.   

    如果是500万条数据的话,就不是ajax的问题,而是数据库优化的问题,另外关系型数据库不适合海量数据
      

  14.   


    你知道ajax为什么要等吗?是因为php没有执行结束,为什么会不马上结束?因为你的数据库查询太慢。
      

  15.   

    不会的,一样的SQL,我测试过,PHP直接访问刷的1下,
    ajax要等3-5分钟才显示出来,测试的时候没事,大量数据访问的时候出现问题,
    你和俺那几个开发部人一样,老说其他问题
    关键我想知道你有没有用ajax做过在线1W人以上的网站,
    数据查询全是高效查询语句,并且建立好索引的。
    如果做过在线1W人以上,数据量达到上亿条查询,
    俺就认为我怀疑是错误的,俺就不在过问这个事情啦,
    现在就是想找有没有做过经验的人,想请教下,
      

  16.   

    如果Ajax都受不起,那么其他方式可能也受不了。Ajax可以尽可能减少数据传输的消耗。
      

  17.   

    严重怀疑你描述的这种差异。ajax 只是一种客户端技术。对于服务器端程序来说,一个“页面刷新的请求”和一个“ajax请求”是没有什么本质区别的,绝不会仅仅因为是“ajax请求”就需要执行3-5分钟。普遍而言,网站采用了 ajax 技术后,会增大服务器端的访问压力,但要搞清楚因果关系,之所以访问压力会增大,往往是因为 ajax 实现的“页面不刷新,局部数据刷新”的效果实在太好了,导致设计人员倾向于更多地使用局部动态刷新。这不是 ajax 技术本身有什么性能问题。
    ————————————————————————————————
    基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
      

  18.   

    同样是一次请求,怎么可能会导致这么大的性能差距呢?
    如果真出现这种情况,只能说明你们的系统设计有严重的问题,不管ajax还是直接访问,性能差距不可能有这么大。
    除非,ajax代码写的极烂,一个页面的展示需很多次请求。
      

  19.   

    不知道,反正高峰期ajax反映很慢!不使用的就很快
      

  20.   

    整后后台用AJAX实现就体现不了它的有效率,部份数据可以用到它,后台最好就直接用PHP,直接用,何必要用AJAX再调用PHP呢,也方便查找错误,还有兼容问题,都要考虑的
      

  21.   

    其实没有那么长时间,大部分时间是正常的,只是人多的时候,很慢,差不多等2分钟左右,人少了,就没事啦!!!我意思说有没有人做过1W人在线以上的,访问正常的,不要写缓存,因为ajax写的是后台,数据要实时更新
      

  22.   

    1. ajax只是HTTP请求的一种综合应用,对服务器端来说,它和点击链接激发的请求没有两样。而在实际应用上可以减轻网络传输量(可以不必重复传输一些数据),缓解带宽压力。
    2. 关于你描述的,ajax请求很慢,那是服务器端的响应慢,或者是网络原因。与用不用ajax无关!
      

  23.   

    同意22楼,23,27楼, 如果普通页面很快,而ajax页面慢, 有可能是前端页面设计的问题, 同时有好几个ajax请求以及js的问题等...
    这个可以用firebug,Yslow等工具分析前端..............
      

  24.   

    个人认为ajax是把双刃剑.
    使用了ajax之后,程序和视图界面设计有可能会很明显影响到服务器的性能. 
    设计得好,可以降低服务器开销.设计得不好,因为异步的特性,用户的不经意的行为都可能成倍增加数据库查询次数等等.绝对可以拖垮一个服务器.
      

  25.   

    瓶颈不在Web服务器上, 一台垃圾服务器撑3,4W个连接是稀松平常的事.瓶颈在于数据库要接受10W人并发读写, 肯定就要做分离了, mysql主从读写分离解决这个问题即可。具体还要看需求,解决办法不是死的,程序员是要动脑子设计的。另外ajax请求频繁必须部署fcgi。
      

  26.   

    同意helloyou0说的,跟同意helloyou0同意的。这个ajax没关系。估计ajax响应结果处理的不好,错误异常等处理不好这样用户就会处于一直"等待"的状态……,常规的请求是一个连接,ajax也是,常规能挺住ajax怎会挺不住?ajax还会减小了多余额外的数据。另,ajax是好,但还要看你怎么使用了,否则可能还会让用户体验变差。
      

  27.   

    ajax应该不是慢的原因,因为ajax只是提交参数和返回结果,程序执行完全是由后台代码来承担的,也就是说性能好不好完全在于后台的程序写得好不好,包括数据库的操作部分。
      

  28.   

    不知我这样说对不对ajax是个页面部分刷新的方式,这个跟数据库查询慢没关系的(无论前端怎么做后台还是一样查数据库)
      

  29.   

    首先你测试就有问题,同时1W人在线你直接访问php如果很快才能说明你ajax有问题,如果出现这个问题最有可能就是本来一次请求的ajax就能完成,然后由于写得不合理导致了很多次请求,这样相当于同时1W*几,导致请求翻翻
    你的这个系统在于数据库,要不停的读写,所以你首先想到的是先数据库优化,然后优化ajax(废弃不必要的请求)
      

  30.   

    都是理论帝,我也想知道有没有人用ajax做过在线1W人以上的网站。
      

  31.   

    我想做个这种的人不多,毕竟完全用ajax且同时在线达到lz说的那个多很少,不过我说过,lz测试的时候说纯php的比ajax的快那么多,我想的就是  是同一个级别下访问测试出现的这种问题么?
      

  32.   

    我想知道关AJAX什么事...一个访问你输出的内容有多少。
      

  33.   

    看看通过ajax请求是不是返回了很多没用的数据
      

  34.   

    1万人同时在线这个数据对做网站性能来说是没有太大意义的,你要搞清楚你们网站的PV,访问量是多少?如果每秒1万人的访问量,不要说全中国,就是全世界也没有几个人做过,那得要承受几亿的PV呐!
    看了一下你的ajax代码,ajax嵌套ajax,不能合并一下吗?网络请求的开销很大的,有可能问题就在这了!ajax由于请求的数据量较少,照理应该比常规的网站访问速度更快,不大可能会出现更差的情况!
      

  35.   

    ajax 就是和速度果断没关系啊。他是在浏览器运行的脚本吧
    主要还是后台请求 和响应的时间,这部分做好了,
      

  36.   

    恩,都是新手写ajax,所以郁闷
      

  37.   

    当数据无变化是读取memcache中的数据,如果有变化,将ajax数据写入memcache中,再显示,这样你页面数据显示速度会提高不少。
      

  38.   

    看了所有评论,我觉得,是前端代码写得不好,明明十万的在线人数,因为前端代码的原因,重复的ajax访问导致变成三四十万甚至上百万的在线负载so,叫前端好好写代码
      

  39.   


    为什么你不让他们给你个jajx写后台的理由,不是有项目主管吗?跟主管说说你担心的问题啊!让领导干涉一下或许也是不错的!
      

  40.   

    看了楼主贴出来的代码后 发现个ajax使用过度的问题。
    手续就判读用户类型这个方法来说checkAdminUserType 发送ajax请求admin_user_management_action.php返还一堆json 数据 根据一些数据的情况调用
    //查询代理商信息是否存在 的方法queryAgentIsExist 而该方法又发送ajax 处理该逻辑。
    下面还有很多类似的情况。。
    那为什么不把该逻辑放到第一次请求admin_user_management_action.php 页面一次性处理完呢。而反复的吧数据拿出来 发送ajax 传回去又处理 又返还数据有发送。。这  这。。我可能水平有限。无法理解里面的你们技术员的得到之处。。所以导致一次逻辑发送了N个ajax 处理。。希望有哪位大哥也帮我解惑下。//判断用户类型
    function checkAdminUserType(uid, opt_type)
    {
    var states = 0;
    if (opt_type == 1) {
    states = 1;
    }  
    $.ajax({
    type: 'get',
    cache: false,
    url: 'admin_user_management_action.php',
    data: {method: 'query_admin_user', PAGEINDEX: 1 , SPLITNUM: 1, UID: uid, GID: '', UTYPE: '',
    ACCOUNT: '', PASS: '', REALNAME: '', SFZCODE: '', MOBILEPHONE: '', TEL: '', STATES: states,
    CREATETIME: '', AREA: '', SCHID: ''},
    success: function(result){
    var ret_obj = eval("("+result+")");
    if (ret_obj.RETCODE == 1) {
    if (ret_obj.RETOBJ[0].UTYPE == 3) { //代理商用户
    queryAgentIsExist(uid, opt_type);
    }
    if (ret_obj.RETOBJ[0].UTYPE == 1 || ret_obj.RETOBJ[0].UTYPE == 2 || ret_obj.RETOBJ[0].UTYPE == 16
    || ret_obj.RETOBJ[0].UTYPE == 17 || ret_obj.RETOBJ[0].UTYPE == 18) {
    //老师,正副校长,班主任,教导主任
    queryTeacherClassIsExist(uid, opt_type);
    }
    } else {
    alert('异常');
    return false;
    }
    },
      

  41.   

    楼上很多的确实是对的。Ajax不可能是造成响应慢的原因。Ajax说到底只是一种前台技术,对后台不产生影响。惟一的可能是ajax请求不当,频繁向后台发出请求,导致数据库卡住。数据量大的情况下,是有可能:一次请求很快, 多次请求同时进行则卡住大半天的。
      

  42.   

    10W用户同时在线使用,才用一台6W的服务器?没搞错吧,这个访问量已经是互联网门户级别了关于是否用ajax,我劝楼主还是别用了
    用了会有更好的用户体验,但相应也要付出更高的成本,开发成本和维护成本,特别是如果还用了CDN的情况下,ajax请求必须要支持自动重发才行对于你们目前的技术水平,建议还是不要用了
      

  43.   

    首先,大数据量的操作时间耗费最多的是在服务端,这和ajax没什么关系吧?ajax只负责请求的发起和数据接收处理,所以个人认为你们的系统功能处理耗时和ajax没什么直接的关系,除非是开发人员的水平有限,页面ajax请求处理有问题,不过既然你们能接触到这种项目,估计这也不是问题。其次,很好奇你们是怎么编写脚本文件的,看了下你发的部分代码,建议再次封装ajax请求功能,这样代码冗余会少很多,还有就是做好功能块归类处理,别一个脚本包含所有功能,那样页面加载耗时多。建议详细测试下,看看ajax耗时多的原因,若服务器压力太大,一个页面n多个ajax请求才能完成所需数据处理的话,频繁的 请求-->功能处理-->响应 是会耗时很多的。
      

  44.   

    简单啊,看看后台花了多久,前台花了多久,FIREBUG都能看到~     根据结果找原因,这里说没用~