-1

我有一个大数据库来从 Ajax 响应中获取动态图像。我怎样才能让它快如闪电

图像采用逗号分隔形式,例如

img4.jpg、img3.jpg、img5.jpg、img7.jpg、img11.jpg、img1.jpg、img2.jpg、img3.jpg、img6.jpg、img8.jpg

我的 php 代码。

function childImgsGrid(){

        $parentImgId = $_POST['parentImgId'];

        $query = mysql_query("select child_imgs_id,child_imgs from parent where parent_img_id = $parentImgId") 
                or die(mysql_error());

        $result = mysql_fetch_array($query);
        $arrayOfImages = explode(",", $result['child_imgs']);
        $i=1;
        foreach($arrayOfImages as $nameOfImage){

            echo "<li><a href='#lookbook' ><div class='view'><img src='images/slide/".$nameOfImage."'></a></li>";

        }
    }

对于阿贾克斯

var parentImgId = $anchor.attr("id");

                var dataString = 'queryString=childImgsGrid'+'&parentImgId='+parentImgId; 

                var arrayOfImages = new Array();

                $glob.ajax({
                    type: "POST",
                    url: "ajaxtemplate.php",
                    data: dataString,                   
                    cache: false,
                    success: function(response) {
                        $glob('#grid').html(response);
                    }
                });
4

1 回答 1

1

总的来说,这是一个非常广泛的话题,但我会尝试对此事进行一些说明。

  1. 图片的优化版本

    与 Facebook 一样,添加图像后,您可以使用后台作业来创建图像的低质量版本。当请求图像时,会显示此低质量图像,同时在后台加载原始高质量图像。一旦完成加载,只需更换。

  2. 预加载

    如果您知道或知道需要显示哪些图像(画廊中的常见情况是预加载接下来的 2 或 3 张图像),您可以在无需用户输入的情况下获取它们。因此,当用户打开图像 #443 时,您会在后台将其与 #444、#445 一起加载。

  3. 使用内存存储

    如果数据库记录非常大,并且假设您将图像保存在文件系统中而不是作为数据库中的 blob,并且检索基于唯一键(主键或其他键),您可以实现 memcache 或 redis 之类的东西,以便查询非常快。

  4. 节点.js

    如果图像请求的数量变得非常多,请考虑使用像 node.js 这样的异步服务器响应架构。

特定的用例和技术将改变上述每一个的实现,但整体概念应该是可靠的。

于 2012-11-24T09:23:49.237 回答