如何提高codeigniter的性能

Posted

技术标签:

【中文标题】如何提高codeigniter的性能【英文标题】:How to improve performance on codeigniter 【发布时间】:2018-03-01 11:49:41 【问题描述】:

我有一个用 Codeigniter 编写的程序,退出时速度很慢。

当我调试程序时,我意识到有一个步骤持续了 10 秒

会话:使用“文件”驱动程序初始化的类

这里是完整的调试

INFO - 2017-09-20 12:56:05 --> Config Class Initialized
INFO - 2017-09-20 12:56:05 --> Hooks Class Initialized
DEBUG - 2017-09-20 12:56:05 --> UTF-8 Support Enabled
INFO - 2017-09-20 12:56:05 --> Utf8 Class Initialized
INFO - 2017-09-20 12:56:05 --> URI Class Initialized
INFO - 2017-09-20 12:56:05 --> Router Class Initialized
INFO - 2017-09-20 12:56:05 --> Output Class Initialized
INFO - 2017-09-20 12:56:06 --> Security Class Initialized
DEBUG - 2017-09-20 12:56:06 --> Global POST, GET and COOKIE data sanitized
INFO - 2017-09-20 12:56:06 --> Input Class Initialized
INFO - 2017-09-20 12:56:06 --> Language Class Initialized
INFO - 2017-09-20 12:56:06 --> Loader Class Initialized
INFO - 2017-09-20 12:56:06 --> Helper loaded: url_helper
INFO - 2017-09-20 12:56:06 --> Controller Class Initialized
INFO - 2017-09-20 12:56:06 --> Database Driver Class Initialized
INFO - 2017-09-20 12:56:06 --> Helper loaded: string_helper
INFO - 2017-09-20 12:56:06 --> Helper loaded: form_helper
INFO - 2017-09-20 12:56:06 --> Helper loaded: language_helper
DEBUG - 2017-09-20 12:56:06 --> Session: "sess_save_path" is empty; using "session.save_path" value from php.ini.
INFO - 2017-09-20 12:56:06 --> Session: Class initialized using 'files' driver.
INFO - 2017-09-20 12:56:16 --> Language file loaded: language/french/messages_lang.php
INFO - 2017-09-20 12:56:16 --> File loaded: C:\wamp\www\SESAME\application\views\template/header.php
INFO - 2017-09-20 12:56:16 --> File loaded: C:\wamp\www\SESAME\application\views\connect_user.php
INFO - 2017-09-20 12:56:16 --> File loaded: C:\wamp\www\SESAME\application\views\template/footer.php
INFO - 2017-09-20 12:56:16 --> Final output sent to browser
DEBUG - 2017-09-20 12:56:16 --> Total execution time: 10.8679

您能帮我找出性能低下的原因吗?

【问题讨论】:

所以这个“延迟”只发生在注销时而不发生在其他页面上?我注意到的是日志报告 $config['sess_save_path'] 没有被设置...你是什么会话设置的配置文件以及与注销关联的代码是什么? CI 是目前最快的框架之一——我不确定这个等待时间是在会话加载期间还是在其他地方发生——所以你必须提供加载这些驱动程序的代码(会话驱动程序和语言文件) 您可以设置其他方式或尝试使用绝对路径 您的网站是否使用频繁的 AJAX 请求? @Narf 您能否发表一些关于提高性能的建议,因为 Codeigniter 需要很多改进。我在 GitHub 上也发了一个,你们还没解决。 【参考方案1】:

我认为“会话:使用‘文件’驱动程序初始化的类。”需要时间。

文件驱动程序: “文件”驱动程序使用您的文件系统来存储会话数据。

根据Codeigniter Session 文档,您可以更改数据库或其他位置(如文件、redis、memcached)中的存储引擎会话。

$config['sess_driver'] = 'database';
$config['sess_save_path'] = 'ci_sessions';


CREATE TABLE IF NOT EXISTS `ci_sessions` (
        `id` varchar(128) NOT NULL,
        `ip_address` varchar(45) NOT NULL,
        `timestamp` int(10) unsigned DEFAULT 0 NOT NULL,
        `data` blob NOT NULL,
        KEY `ci_sessions_timestamp` (`timestamp`)
);

另外,你可以设置绝对路径:

更具体地说,它不支持在 session.save_path 中使用的 PHP 目录级别和模式格式,并且为了安全起见,它具有大多数硬编码选项。相反,$config['sess_save_path'] 仅支持绝对路径。

【讨论】:

会话类不是问题。从字面上看,Session 类构造函数所做的最后一件事是使日志条目“会话:使用...初始化的类”。这是一种需要很长时间才能加载的语言。 我刚试过这个方法,并没有真正解决我的问题【参考方案2】:

我想我找到了问题的原因。

事实上,我的控制器每次都加载它是一个相当重的类(registered_user - 当我评论它时,程序变得更快 - )

public function __construct() 
    parent::__construct();
    $this->load->model('user_inscription');
    $this->load->model('user_connexion');
    $this->load->model('mouchard');
    $this->load->model('synchronisation');
    $this->load->helper('string');
    $this->load->helper('form');
    $this->load->helper('language');
    $this->load->library('session');
    //$this->load->library('registered_user');
    $this->load->library('sendsms');

这是课程。它连接到一个 oracle 数据库。我不知道为什么要花这么多时间来实例化。

class Registered_user 

    private $query;
    private $connexion;

    public function __construct($host, $port, $serviceName, $user, $passwd) 
        $baseLink = '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(Host = ' . $host . ')(Port = ' . $port . '))) (CONNECT_DATA = (SERVICE_NAME = ' . $serviceName . ')))';
        $this->connexion = oci_connect($user, $passwd, $baseLink);
    

    public function getConnexion() 
        return $this->connexion;
    

    public function setQuery($query) 
        /*set the query*/
    

    public function getInfos() 

        $stid = oci_parse($this->connexion, $this->query);
        oci_execute($stid);

        $row = oci_fetch_array($stid, OCI_ASSOC + OCI_RETURN_NULLS);

        return $row;
    


【讨论】:

以上是关于如何提高codeigniter的性能的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter:分析和性能

如何修改在 codeigniter 中完成的图像处理功能以提高效率

改善极慢 Codeigniter 网站的方法

Codeigniter 数据库访问 - ORM 性能

java中大量数据如何提高性能?

如何提高 Sql server 中 Distinct Query 的性能