【问题标题】:Php includes causing slow load times with ajax content loadPHP 包括导致加载时间缓慢的 ajax 内容加载
【发布时间】:2012-06-15 16:59:05
【问题描述】:

我目前正在处理this website,我需要一些关于 php 和 ajax 的帮助。 如果这是一个简单的解决方法,我深表歉意,但我到处寻找,但找不到解决方案。

不管怎样,左边的链接用ajax加载右边的内容。那是容易的部分。 'gallery' 下的子链接会加载这样的 php 文件:

<?php
include "connect_to_mysql.php";
include_once("classes/category.class.php");
include_once("classes/album.class.php");
include_once("classes/images.class.php");
$category = new category();
$categories = $category->loadAbstract();
?>
<div id="image_gallery">
<?php 
foreach ($categories as $category) {
    if ($category->hasAlbums()) {
        foreach ($category->albums as $album) {
            echo '<div class="album_container">';
                echo '<div class="sublinks" onClick="loadAlbum(\''.$album->getId().'\')">
                        <h4>'.$album->getName().'</h4>
                    </div>';
        }
    }
}
?>
</div>
<script>
    function loadAlbum(Id) {
        $.ajax({
            type: 'POST',
            url: 'loadalbum.php',
            data: "selectedAlbum="+Id,
            success: function(result) {
                        $("#"+Id).html(result);
                    }
        });
</script>

显然,这调用了 loadalbum.php,我必须添加相同的包括:

<?php 
include "connect_to_mysql.php";
include_once("classes/category.class.php");
include_once("classes/album.class.php");
include_once("classes/images.class.php");
$selectedAlbum=$_POST['selectedAlbum'];
?>

问题是每次我在左侧选择不同的类别时,它都必须调用这些类,然后当从该类别中选择一个专辑时,再次调用这些类。这大大减慢了加载时间,因为它必须不断从数据库中检索数据。

如果相册已经加载,我会使用一些 javascript 来阻止它加载相册,但是一旦在左侧选择了不同的链接,它就会返回到第一个方框。

有没有办法在网页打开时加载我的所有类,然后在我的 php 文件通过 ajax 加载时引用它们?

提前致谢!

【问题讨论】:

  • 没有。每个请求都是它自己的单独/专用的 HTTP 请求,并且每个请求是相互独立的。您可以考虑安装操作码缓存,或减少需要在 ajax 处理程序中加载的内容。
  • @mattedgod 抱歉,我没有意识到我的行为不当。我已经回去接受了对我有帮助的答案:)

标签: php jquery ajax class include


【解决方案1】:

我认为您需要重新定义实体关系。根据您的代码:类别、专辑和图像都具有同等地位。我不认为这是真的,但这不是我的设计。无论如何,将您的模型包含到您的控制器类中

<?php
require_once "classes/album.class.php";
require_once "classes/category.class.php";
require_once "classes/images.class.php";

class Controller
{
  public $album;
  public $image;
  public $category;

  public function __construct()
  {
   $this->album = new Album();
   $this->image = new Image();
   $this->category= new Category();
  }

  public invoke(){
    $categories = $this->category->loadAbstract();
    include "path-to-gallery.php";
  }
}

所以现在在您的控制器中,您可以访问所有模型。将您的数据操作函数放在模型类中并从控制器调用它们。包含的页面将预加载 $categories 数据。然后您可以在视图中循环遍历它。

两个重要说明:1) 要求必须在运行时存在的文件。如果他们不这样做,你会得到一个致命的错误。包含只会给出警告,可能会被抑制,并且 2) 要求和包含是语言结构,而不是方法。括号是不必要的。

我已经为您的控制器类提供了一个基本大纲。我的方式只是其他数百种 MVC 实现中的一种。许多人会争论我所写内容的细节。别担心。试着理解我提供的基础知识。如果有帮助,那就太好了。一定要接受答案。如果没有,请忽略它。

祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多