如何提高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的性能的主要内容,如果未能解决你的问题,请参考以下文章