草庐IT

关于 php:Codeigniter: 逐步加载 Views

codeneng 2023-03-28 原文

Codeigniter: load Views progressively

我最近将我的抓取/解析 PHP 代码移至 Codeigniter。它使用 cURL 和 SimpleHtmlDom 类从目标 URL 检索数据,这些数据随后由模型函数几个其他库处理。

有几个对外部 Web 和 API 的请求,所以原始 PHP 脚本需要 20 秒才能加载完整的页面,但没关系,因为 PHP 被分成几个块,而下面的进程正在运行页面已经在渲染 HTML,用户可以在处理和显示其余数据时读取 HTML。

切换到 Codeigniter 的问题是,在完全执行 Controller 脚本之前不会呈现 HTML,即使数据进程被拆分为块并由单独的 Views 加载。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class HomePage extends CI_Controller {

public function index()
{
    $this->load->library('simple_html_dom');
    $this->load->library('library1');
    $this->load->library('library2');
    $this->load->library('library3');

    $this->load->model('HomePage_model');
    $this->load->view('templates/header');

    $targeturl = 'http://www.example.com';

      $variable1 = library1::method1($targeturl);
      $variable2 = $this->HomePage_model->method2($targeturl);
      $data1 = array('variable1' => $variable1, 'variable2' => $variable2);

    $this->load->view('first_set_of_data', $data1);

      $variable3 = library2::method2($targeturl);
      $variable4 = $this->HomePage_model->method3($targeturl);
      $data2 = array('variable3' => $variable3, 'variable4' => $variable4);

    $this->load->view('second_set_of_data', $data2);

      $curlinfo = $this->HomePage_model->cURLmethod($targeturl);
      $data3 = array('curlinfo' => $curlinfo);

    $this->load->view('third_set_of_data', $data3);

    $this->load->view('sidebar');
    $this->load->view('templates/footer');
    }
}

/* End of file homepage.php */
/* Location: ./application/controllers/homepage.php */

我并没有试图优化我的代码以使其运行得更快,它已经被修改了好几次......我正在尝试做的是逐步加载视图作为每个视图对应的数据已准备就绪,而其他视图的数据正在处理中。

  • 在 codeigniter 或任何框架中,最好的方法是使用 ajax 方法在页面加载后加载额外的数据。
  • 感谢@Ahmad 的帮助。我是 Ajax 的新手,您能否介绍如何实现它或链接到我可以开始学习的文章?


听起来像是一个不雅的解决方案的问题。我想你被迫砍掉所有视图,以便在另一个视图中不调用任何视图,并根据请求加载每个相关视图。

所以不是 views/index.php 有:

1
2
3
4
5
<html>
<body>
<? $this->load->view('content') ?>
</body>
</html>

你会有 view/index_start.php:

1
2
<html>
<body>

view/index_end.php:

1
2
</body>
</html>

在它们之间,在每个请求之后加载单独的视图。从控制器加载所有视图。同样,不推荐这种设计。

1
echo $this->load->view('file', array(), TRUE)

  • 谢谢你的帮助,罗宾。但是,这就是我已经尝试过的......控制器当前加载 view('templates/header') 和 view('templates/footer') 中间有几个视图,并且仍然不会逐步显示它们。
  • 你确定你是在正确的时刻加载它们吗?如果您在 2 个视图之间进行大量调用,会发生什么?也尝试运行一个 echo $this->load->view('file', array(), TRUE) 代替。它可能会解决它。
  • 谢谢! echo $this->load->view('file', array(), TRUE) 解决了这个问题。无论如何,我会尝试像@Ahmad 建议的那样实现一个 ajax 解决方案。
  • 是的,请考虑这种方法。这是一个更合乎逻辑的解决方案,因为大多数浏览器更喜欢一次拥有整个网站,然后加载许多不同的繁重内容。

有关关于 php:Codeigniter: 逐步加载 Views的更多相关文章

  1. ruby - 如何在续集中重新加载表模式? - 2

    鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende

  2. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  3. ruby-on-rails - 使用 config.threadsafe 时从 lib/加载模块/类的正确方法是什么!选项? - 2

    我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co

  4. ruby-on-rails - 从应用程序中自定义文件夹内的命名空间自动加载 - 2

    我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty

  5. ruby - Ruby 是否有类似于 Perl 的 "perl -d"的逐步调试器? - 2

    Ruby是否有逐步调试器,类似于Perl的“perl-d”? 最佳答案 ruby-debug(对于ruby1.8),debugger(对于ruby1.9),byebug(对于ruby​​2.0)以及trepanning系列都有一个-x或--trace选项。在调试器内部,命令setlinetrace将打开或关闭线路跟踪。这是themanualforruby-debug原来的答案已经修改,因为数据噪声文章的链接,唉,不再有效了。还添加了ruby​​-debug的后继者 关于ruby-Ruby

  6. ruby-on-rails - 关于 Ruby 的一般问题 - 2

    我在我的rails应用程序中安装了来自github.com的acts_as_versioned插件,但有一段代码我不完全理解,我希望有人能帮我解决这个问题class_eval我知道block内的方法(或任何它是什么)被定义为类内的实例方法,但我在插件的任何地方都找不到定义为常量的CLASS_METHODS,而且我也不确定是什么here,并且有问题的代码从lib/acts_as_versioned.rb的第199行开始。如果有人愿意告诉我这里的内幕,我将不胜感激。谢谢-C 最佳答案 这是一个异端。http://en.wikipedia

  7. ruby-on-rails - 使用 gmaps4rails 动态加载谷歌地图标记 - 2

    如何只加载map边界内的标记gmaps4rails?当然,在平移和/或缩放后加载新的。与此直接相关的是,如何获取map的当前边界和缩放级别? 最佳答案 我是这样做的,我只在用户完成平移或缩放后替换标记,如果您需要不同的行为,请使用不同的事件监听器:在你看来(index.html.erb):{"zoom"=>15,"auto_adjust"=>false,"detect_location"=>true,"center_on_user"=>true}},false,true)%>在View的底部添加:functiongmaps4rail

  8. ruby-on-rails - 是否可以让 ActiveRecord 为使用 :joins option? 加载的行创建对象 - 2

    我需要做这样的事情classUser'User',:foreign_key=>'abuser_id'belongs_to:gameendclassGame['JOINabuse_reportsONusers.id=abuse_reports.abuser_id','JOINgamesONgames.id=abuse_reports.game_id'],:group=>'users.id',:select=>'users.*,count(distinctgames.id)ASgame_count,count(abuse_reports.id)asabuse_report_count',:

  9. ruby - 我怎样才能更好地了解/了解更多关于 Ruby 的知识? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我最近开始学习Ruby,这是我的第一门编程语言。我对语法感到满意,并且我已经完成了许多只教授相同基础知识的教程。我已经写了一些小程序(包括我自己的数组排序方法,在有人告诉我谷歌“冒泡排序”之前我认为它非常聪明),但我觉得我需要尝试更大更难的东西来理解更多关于Ruby.关于如何执行此操作的任何想法?

  10. ruby - 运行 rackup private_pub.ru -s thin -E production 命令时无法加载此类文件 -- thin (LoadError) - 2

    我指的是pubrailscasttutorial并已正确执行所有步骤,但在运行最后一个命令时,即rackupprivate_pub.ru-sthin-Eproduction为了架设faye服务器,我收到以下错误:/usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in`require':cannotloadsuchfile--thin(LoadError)from/usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in`require'from/var/lib/gems/1.9.1/gems

随机推荐