最好加载整个页面然后显示一个片段,或只加载片段?

时间:2011-08-03 16:22:12

标签: jquery codeigniter load performance

这更像是“我是否正确思考”而不是问题。

我有一个控制器,以及一个加载标题视图,动态内容视图和页脚视图的函数。

在我的内容视图中,有一个链接点击利用jquery更改内容。它通过加载(使用.load())完全相同的控制器但传递var $ ajax ='yes'来实现这一点;

使用这个我的控制器知道不再加载页眉/页脚,而只是加载内容部分。

这很有效。

然后我偶然发现了jqueries加载片段的能力。我是否认为我的做事方式在资源使用方面更好是正确的,因为利用片段加载,我将加载整个页面,然后只显示片段..I.E无保存。

假设这是正确的,有没有办法实现我想要有效实现的目标,而不需要:

if(!$ajax){load header/footer}

在每个基于ajax的控制器功能的开头?

2 个答案:

答案 0 :(得分:0)

我有一段时间没有使用过codeigniter,但是如果我没记错的话,它有一个名为IS_AJAX_REQUEST的常量,所以你不需要将它与请求本身一起传递。

回答你的问题,如果你创建扩展CI控制器的基本控制器类(不知道确切的类名,对不起),并使所有其他控制器扩展它,这是可能的。

然后你可以编写自定义渲染函数来检查IS_AJAX_REQUEST并仅渲染完整的布局或特定的视图。

但你必须弄清楚如何对待重定向和东西。或者也许不是渲染视图,而是想输出JSON。

回答你的另一个问题,是的,最好只加载html的一部分而不是渲染完整的文件并从中获取一部分。但是你可以计算你的页眉和页脚的大小。我认为不是那么多。所以我猜你应该主要是为了改善用户体验。

答案 1 :(得分:0)

Codeigniter以检查请求是否来自AJAX源的方式构建

$this->input->is_ajax_request();

所以你不需要传递$ajax就知道它是ajax。

我认为在服务器端检查ajax比使用jquery的.load()和选择器更有效,因为你仍然在请求中加载整个页眉/页脚,jquery只是很聪明挑选你想要的内容。因此,就性能而言,除了没有整页刷新之外,您没有看到任何静态页面的改进。