仓酷云

标题: PHP网页设计最小化数据传输――在客户端存储数据 [打印本页]

作者: 因胸联盟    时间: 2015-2-4 00:18
标题: PHP网页设计最小化数据传输――在客户端存储数据
不断巩固,摸透大部分PHP常用函数,并可理解OOP,MYSQL优化,以及模板客户端|数据   将法式输入为其他的言语是法式员喜欢的工作之一,在WEB上咱们有
两个分歧编程情况:客户端(阅读器)和办事器端,依据HTTP协定的界说,
咱们可以在编写在客户端输入其他言语的办事端法式,咱们选择了作为服
务端言语、javascript作为客户端输入。在本问中咱们将向您演示如许用
该计划把数据存储在客户端,而且在诸如:聊天室、旧事体系或其他您想
完成的使用上到达办事端和客户端(阅读器)的最小的数据传输。

请求以下撑持:
    PHP4
    JavaScript
    Frames

次要思惟:
     
    咱们一向试图用PHP开辟一个基于HTTP协定的聊天室(HTTP CHAT ROOM),
虽然对聊天来讲HTTP协定并非个好协定,然而它可以不受防火墙或代办署理影响,
PHP完整可以完成该功效而不用利用JAVA APPLETS,关于聊天室次要有两个成绩:
第1、因为IE 不撑持SERVER PUSH 手艺,所以咱们只要用CLIENT PULL手艺(既
客户端主动刷新),第二个成绩就更深一层了:由于该思惟是在客户端刷新,所以服
务端每次必需传送一切的动静,这意味着大批的数据传输,这也恰是聊天室延迟的主
要缘由,本文试图处理该成绩:
   利用框架手艺(frames) 你可以刷新指定页面,而不用从头装载其余页面,这可
以削减办事/客户端(C/S)数据传输量。咱们的模子就是基于该计划。
    "master"文件:界说框架布局
    "loader"页面:导入数据
    "display"页面:显示数据
    在该计划,"loder"框每"x"秒主动刷新一次――咱们的思惟是把数据存储在"master"
文件内,如许"loder"页面只需向办事端恳求客户端所没有的数据就能够了咱们利用工夫戳标(timestamp)
记每一个动静来决意那些动静必需传给客户端那些不用传输。咱们利用PHP4。0的会话办理(session)
存储客户真个最初更新的工夫戳(last timestamp)以使工夫戳对办事端和客户端都可见。当"loader"文件
从"master"文件收到数据(注重:"master"文件很大,然而它只传送一次)时,就刷新显示页("diaplay")
而"display"页只是复杂的挪用"master"文件的名为"displaymsgs()"的javascript 函数显示动静。该函数静态显示
存储在"master"文件的数据,以下是大体流程图:
    1。阅读器恳求"master"页(框架),"master"页从办事器端传送到客户端(阅读器),然后"master"
    文件生成框架,而且将"loader"和"display"页调到客户端。
    2。在办事端,"loader" 文件将剖析:假如客户端没界说"timestamp" session 变量,"loder"文件将
    从办事端失掉一切数据,并生成javascript代码将数据存入"master"文件,然后将"timestamp"变量存为
    session 变量。
    3。"loder"页面熟成javascript 代码刷新 "display"页面。
    4。刷新恳求使得"display"页面挪用"diaplaymsgs()"javascript 函数显示数据
    5。每隔"x" 秒回到步调2

咱们可以该思惟以下:
    ========================================================
    "master"文件:十分大,界说了displaymsgs() 函数和存储数据和初始值。
    "loader"文件:小,从办事端取回数据,生成javascript 代码
    "display"文件:十分小,挪用"master"文件的"diaplaymsgs()"函数
    =========================================================
    注:“master"文件只传送一次
        "loder" 和 "display" 文件每隔"x"秒刷新一次
        第一次传送的时分"loder"能够会很大,但今后就会很小
        "diaplay"文件一向不变

假如您对以上的思绪仍是不太清晰的话,以下咱们将创立一个聊天室详细解说该办法,这个聊天室只是为了复杂的演示
所以能够并非很有效,然而您完整可使用该思惟创立更庞杂的聊天室,记住这个思惟并非只用与聊天室 。:)

    起首请您利用mysql数据库表单:
        ============================
        create table testeable (
              timestamp datetime,
              message    text
        );
        ============================
    "master"文件以下:
        ================================================
        <script>
            lines=new Array();
            function displaymsgs() {     
              for(i=0;i<lines.length;i++) {
                 display.document.write(lines[i]);
                 display.document.write('<BR>');
                  }
            }
        </script>
        <frameset cols="1" rows="20,60,20" border="0">
        <frame name="loader" src="loader.php">
        <frame name="display" src="display.php">
        <frame name="form" src="form.php">
        </frameset>
        ==================================================
        注:"form"文件是讲话框,供应用户输出讲话框。

        "display"文件内容:
        =====================
        <script>
        top.displaymsgs();
        </script>
        ====================
        "display"文件是否是很小? :)
         
        "loader"文件:
        ====================
        <?php  

        session_start(); // 在这利用 Sessions !  

        if(!isset($timestamp)) {  
            //假如"timestamp"没有界说,则界说并设为0  
            $timestamp=0;      
        }  

        $dab=mysql_connect("localhost","user","password");  // 翻开数据库
        mysql_select_db("testbase",$dab);  

        // 查找客户端所没有的信息  
        $query="select * from testeable where timestamp>'$timestamp'";  
        $result=mysql_query($query,$dab);  
        $msgs=array();  

        // 在这个轮回,咱们存储最新动静/数据,并设置"timestamp"为以后最大值
         
        while($res=mysql_fetch_array($result)) {  
            $msgs[]=$res["message"];  
            if($res["timestamp"]>$timestamp) {  
                $timestamp=$res["timestamp"];  
            }  
        }  
        session_register("timestamp"); // 注册"timestamp"变量

        echo '<script>';  

        // 在这个轮回咱们生成javascript代码
        // 把最新从办事端失掉的数据存储到"master"页面里(注重:利用"top"指向最顶窗口(master)
         
        for($i=0;$i<$count($msgs);$i++) {  
            ?>  
            top.lines[top.lines.length]="<?php print("$msgs[$i]"); ?>";  
            <?php  
        }   

        //如今咱们将生成"javascript"代码 ,使 "display"页刷新

        ?>  
        top.display.location.reload();  
        </script>  

        <!-- 注重是用 javascript 的"setInterval()" 办法使得"loader"页面每隔4秒刷新一次  -->  
        <body onLoad="window.setInterval('location.reload()',4000);">  
        </body>  
        =======================================
         
        "form"页面:
        ====================
        <?php  

        session_start();  

        if (!isset($timestamp)) {  
              $timestamp=0;  
        }  

        // 显示表单,发生"timestamp"变量.  
        if (isset($msg)) {  
                $dab=mysql_connect("localhost","root","seldon");  
                mysql_select_db("testbase",$dab);  
               $query="insert into testeable(timestamp,message) values(now(),'$msg')";  
               mysql_query($query,$dab);  
               // 失掉timestamp 后的一切动静
                $query="select * from testeable where timestamp>'$tt'";  
               $result=mysql_query($query,$dab);  
               $msgs=array();$i=0;$timestamp=0;  
                while($res=mysql_fetch_array($result)) {  
                    $msgs[]=$res["message"];  
                    if($res["timestamp"]>$timestamp) {  
                            $tt=$res["timestamp"];  
                    }  
                }  
                session_register("timestamp");  
                 
            ?>  
              <script>  
              <?php  
                 for($i=0;$i<$count($msgs);$i++) {  
            ?>  
                top.lines[top.lines.length]="<?print("$msgs[$i]");?>";  
            <?php  
             }  
              ?>  
            top.display.location.reload(); //刷新"display"页
              </script>  
        <?php  
    }  
    ?>  
    <form name="foo" action="<?php print("$PHP_SELF"); ?>" method="post">  
    Message:<input type="text" name="msg">  
    <input type="submit" name="newmsg" value="send">  
    </form>  
    =====================================================
    注:咱们使得在"form"页提交讲话时,即刻刷新"display"页面,这可以到达对讲话人来讲即刻讲话即刻
    显示,更表现及时性。
     
   正如您所看到的,这个聊天室很复杂,这就是最小化客户/办事(C/S)数据传输妙技,利用这个手艺您可以到达最
   小的数据传输,再次提示您:该手艺并非这用于聊天室!
=======================================================
以上在win98+apache1.3+php4.03平台测试经由过程!
  对我一点用处没有啊,我知道该怎么学,但是我想如何才能更快的学,一周速成,啊不,24小时速成那种,皮皮你有没?
作者: 老尸    时间: 2015-2-4 11:18
使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的
作者: 小魔女    时间: 2015-2-8 23:11
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
作者: 若天明    时间: 2015-2-26 12:44
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
作者: 透明    时间: 2015-2-26 12:55
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
作者: 小女巫    时间: 2015-3-7 00:16
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
作者: 飘飘悠悠    时间: 2015-3-13 09:08
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
作者: 简单生活    时间: 2015-3-17 16:09
我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。
作者: 活着的死人    时间: 2015-3-17 23:11
基础有没有对学习php没有太大区别,关键是兴趣。
作者: 飘灵儿    时间: 2015-3-19 18:40
Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81
作者: 再见西城    时间: 2015-3-28 04:05
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
作者: admin    时间: 2015-3-31 01:56
个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
作者: 分手快乐    时间: 2015-4-1 17:11
Ps:以上纯属原创,如有雷同,纯属巧合
作者: 爱飞    时间: 2015-4-4 08:11
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
作者: 海妖    时间: 2015-4-6 02:09
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
作者: 不帅    时间: 2015-4-11 16:35
学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql
作者: 精灵巫婆    时间: 2015-4-16 16:11
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
作者: 第二个灵魂    时间: 2015-4-16 22:20
这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己
作者: 柔情似水    时间: 2015-5-1 10:08
建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。
作者: 冷月葬花魂    时间: 2015-5-5 06:02
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2