CPU使用率飙升至100%

时间:2015-10-12 01:25:31

标签: php jquery json ajax

我想每隔15秒从其他服务器动态获取数据xml。然后将xml数据转换为json并将其保存到我服务器上的新文件中。

这是我的jquery代码:

(function($){
    function getData() {
        $.ajax({
            url: 'data.php',
            type: 'GET',
            dataType: 'json',
            beforeSend: function () {},
            success: function (response) {
                console.log(response);
            }
        });
    }

    var refreshData = setInterval(getData, 15000);

    getData();
})(jQuery);

这里是data.php文件中的代码。

// load class
<?php
require_once 'class/rii.class.php';

// get data
$data = new RII_Data( 'http://theotherservertoget/pri2.xml' );

// generate json
$data->generate_json();

这里是rii.class.php文件中的代码。

<?php
class RII_Data {
    private $options = array();

    function __construct(  $url = '' ) {
        $this->options['url'] = $url;
    }

    private function get_json( $url ) {
        $xml_string = @file_get_contents( $url );
        $xml_string = str_replace( array( "\n", "\r", "\t"), '', $xml_string );
        $xml_string = trim (str_replace( '"', "'", $xml_string ) );
        $xml = simplexml_load_string( $xml_string );
        $json = json_encode( $xml );
        return $json;
    }

    private function print_json( $json ) {
        header('Content-Type: application/json');
        echo $json;
        exit;
    }

    public function generate_json() {
        $json = $this->get_json( $this->options['url'] );
        $this->print_json( $json );
    }
}

运行js后我的服务器总是停机, 我犯了错误吗?

1 个答案:

答案 0 :(得分:1)

var refreshData = setInterval(getData, 15000);

您正在使用预先加载方法每15秒刷新一次页面。我认为这是导致您的Web服务器消耗大量资源的问题 您应该只更新已更改的内容,而不是将所有xml重新转换为json 编辑:simplexml将整个xml树转换为会占用大量资源的对象。如果你可以摆脱它,使用字符串操作函数来完成工作,它会更好。
的问候,