0

最近、スクレイピング/解析する PHP コードを Codeigniter に移動しました。cURLSimpleHtmlDomクラスを使用して、ターゲット URL からデータを取得します。このデータは、後でモデル関数によって他のいくつかのライブラリによって処理されます。

外部 Web および API へのいくつかの要求があるため、元の PHP スクリプトは完全なページをロードするのに最大 20 秒かかりましたが、PHP がいくつかのブロックに分割され、下位のプロセスが実行されている間にページがすでにレンダリングされていたため、問題ありませんでした。残りのデータが処理および表示されている間にユーザーが読み取ることができる HTML。

Codeigniter に切り替える際の問題は、データ プロセスがブロックに分割され、個別のビューによって読み込まれる場合でも、コントローラー スクリプトが完全に実行されるまで HTML がレンダリングされないことです。

<?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 */

私は自分のコードを最適化しようとしているわけではないので、より速く実行されます.すでに何度か修正されています.他のビューは処理中です。

4

1 に答える 1

1

洗練されていないソリューションの問題のように聞こえます。ビューが別のビュー内で呼び出されないように、すべてのビューを切り刻むことを余儀なくされ、リクエストごとに関連する各ビューをロードすることを余儀なくされると思います。

したがって、次の代わりにviews/index.php

<html>
<body>
<? $this->load->view('content') ?>
</body>
</html>

あなたが持っているでしょうview/index_start.php

<html>
<body>

view/index_end.php:

</body>
</html>

それらの間で、各リクエストの後に個別のビューをロードします。コントローラーからすべてのビューをロードします。繰り返しますが、このデザインはお勧めできません

echo $this->load->view('file', array(), TRUE)
于 2012-11-12T10:58:37.760 に答える