PHP 包括导致 ajax 内容加载速度变慢


Php includes causing slow load times with ajax content load

我目前正在这个网站上工作,我需要一些关于php和ajax的帮助。如果这是一个简单的修复程序,我很抱歉,但我到处寻找,找不到解决方案。

无论如何,左边的链接使用 ajax 加载右边的内容。这是容易的部分。"图库"下的子链接加载一个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 来阻止它加载相册,但是一旦在左侧选择了不同的链接,它就会回到原点。

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

提前感谢!

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

<?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实现之一。许多人会争论我所写的内容的细节。别担心。只需尝试了解我提供的基础知识。如果有帮助,那就太好了。一定要接受答案。如果没有,则忽略它。

祝你好运。