New: First dev to try to use shared memory to optimize speed.
This commit is contained in:
parent
f677b9f9b3
commit
9ad1cc6788
@ -688,7 +688,7 @@ extension=php_pdo_mysql.dll
|
|||||||
;extension=php_pdo_sqlite.dll
|
;extension=php_pdo_sqlite.dll
|
||||||
;extension=php_pgsql.dll
|
;extension=php_pgsql.dll
|
||||||
;extension=php_pspell.dll
|
;extension=php_pspell.dll
|
||||||
;extension=php_shmop.dll
|
extension=php_shmop.dll
|
||||||
;extension=php_snmp.dll
|
;extension=php_snmp.dll
|
||||||
;extension=php_soap.dll
|
;extension=php_soap.dll
|
||||||
extension=php_sockets.dll
|
extension=php_sockets.dll
|
||||||
|
|||||||
@ -28,6 +28,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
require_once("./pre.inc.php");
|
require_once("./pre.inc.php");
|
||||||
|
require_once(DOL_DOCUMENT_ROOT."/lib/agenda.lib.php");
|
||||||
require_once(DOL_DOCUMENT_ROOT."/contact.class.php");
|
require_once(DOL_DOCUMENT_ROOT."/contact.class.php");
|
||||||
require_once(DOL_DOCUMENT_ROOT."/cactioncomm.class.php");
|
require_once(DOL_DOCUMENT_ROOT."/cactioncomm.class.php");
|
||||||
require_once(DOL_DOCUMENT_ROOT."/actioncomm.class.php");
|
require_once(DOL_DOCUMENT_ROOT."/actioncomm.class.php");
|
||||||
@ -128,23 +129,8 @@ if ($objectid > 0)
|
|||||||
$contact->fetch($act->contact->id);
|
$contact->fetch($act->contact->id);
|
||||||
$act->contact=$contact;
|
$act->contact=$contact;
|
||||||
|
|
||||||
$h=0;
|
$head=actions_prepare_head();
|
||||||
|
dol_fiche_head($head, 'documents', $langs->trans("Action"),0,'task');
|
||||||
$head[$h][0] = DOL_URL_ROOT.'/comm/action/fiche.php?id='.$objectid;
|
|
||||||
$head[$h][1] = $langs->trans("CardAction");
|
|
||||||
$hselected=$h;
|
|
||||||
$h++;
|
|
||||||
|
|
||||||
$head[$h][0] = DOL_URL_ROOT.'/comm/action/document.php?id='.$objectid;
|
|
||||||
$head[$h][1] = $langs->trans('Documents');
|
|
||||||
$hselected=$h;
|
|
||||||
$h++;
|
|
||||||
|
|
||||||
$head[$h][0] = DOL_URL_ROOT.'/comm/action/info.php?id='.$objectid;
|
|
||||||
$head[$h][1] = $langs->trans('Info');
|
|
||||||
$h++;
|
|
||||||
|
|
||||||
dol_fiche_head($head, $hselected, $langs->trans("Action"),0,'task');
|
|
||||||
|
|
||||||
// Affichage fiche action en mode visu
|
// Affichage fiche action en mode visu
|
||||||
print '<table class="border" width="100%"';
|
print '<table class="border" width="100%"';
|
||||||
|
|||||||
@ -27,6 +27,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
require_once("./pre.inc.php");
|
require_once("./pre.inc.php");
|
||||||
|
require_once(DOL_DOCUMENT_ROOT."/lib/agenda.lib.php");
|
||||||
require_once(DOL_DOCUMENT_ROOT."/contact.class.php");
|
require_once(DOL_DOCUMENT_ROOT."/contact.class.php");
|
||||||
require_once(DOL_DOCUMENT_ROOT."/user.class.php");
|
require_once(DOL_DOCUMENT_ROOT."/user.class.php");
|
||||||
require_once(DOL_DOCUMENT_ROOT."/cactioncomm.class.php");
|
require_once(DOL_DOCUMENT_ROOT."/cactioncomm.class.php");
|
||||||
@ -637,22 +638,8 @@ if ($_GET["id"])
|
|||||||
* Affichage onglets
|
* Affichage onglets
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$h = 0;
|
$head=actions_prepare_head();
|
||||||
|
dol_fiche_head($head, 'card', $langs->trans("Action"),0,'task');
|
||||||
$head[$h][0] = DOL_URL_ROOT.'/comm/action/fiche.php?id='.$_GET["id"];
|
|
||||||
$head[$h][1] = $langs->trans("CardAction");
|
|
||||||
$hselected=$h;
|
|
||||||
$h++;
|
|
||||||
|
|
||||||
$head[$h][0] = DOL_URL_ROOT.'/comm/action/document.php?id='.$_GET["id"];
|
|
||||||
$head[$h][1] = $langs->trans('Documents');
|
|
||||||
$h++;
|
|
||||||
|
|
||||||
$head[$h][0] = DOL_URL_ROOT.'/comm/action/info.php?id='.$_GET["id"];
|
|
||||||
$head[$h][1] = $langs->trans('Info');
|
|
||||||
$h++;
|
|
||||||
|
|
||||||
dol_fiche_head($head, $hselected, $langs->trans("Action"),0,'task');
|
|
||||||
|
|
||||||
$now=gmmktime();
|
$now=gmmktime();
|
||||||
$delay_warning=$conf->global->MAIN_DELAY_ACTIONS_TODO*24*60*60;
|
$delay_warning=$conf->global->MAIN_DELAY_ACTIONS_TODO*24*60*60;
|
||||||
|
|||||||
@ -25,6 +25,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
require("./pre.inc.php");
|
require("./pre.inc.php");
|
||||||
|
require_once(DOL_DOCUMENT_ROOT."/lib/agenda.lib.php");
|
||||||
require_once(DOL_DOCUMENT_ROOT."/lib/functions2.lib.php");
|
require_once(DOL_DOCUMENT_ROOT."/lib/functions2.lib.php");
|
||||||
require_once(DOL_DOCUMENT_ROOT."/contact.class.php");
|
require_once(DOL_DOCUMENT_ROOT."/contact.class.php");
|
||||||
require_once(DOL_DOCUMENT_ROOT."/cactioncomm.class.php");
|
require_once(DOL_DOCUMENT_ROOT."/cactioncomm.class.php");
|
||||||
@ -51,23 +52,8 @@ $act = new ActionComm($db);
|
|||||||
$act->fetch($_GET["id"]);
|
$act->fetch($_GET["id"]);
|
||||||
$act->info($_GET["id"]);
|
$act->info($_GET["id"]);
|
||||||
|
|
||||||
$h=0;
|
$head=actions_prepare_head();
|
||||||
|
dol_fiche_head($head, 'info', $langs->trans("Action"),0,'task');
|
||||||
$head[$h][0] = DOL_URL_ROOT.'/comm/action/fiche.php?id='.$_GET["id"];
|
|
||||||
$head[$h][1] = $langs->trans("CardAction");
|
|
||||||
$hselected=$h;
|
|
||||||
$h++;
|
|
||||||
|
|
||||||
$head[$h][0] = DOL_URL_ROOT.'/comm/action/document.php?id='.$_GET["id"];
|
|
||||||
$head[$h][1] = $langs->trans('Documents');
|
|
||||||
$h++;
|
|
||||||
|
|
||||||
$head[$h][0] = DOL_URL_ROOT.'/comm/action/info.php?id='.$_GET["id"];
|
|
||||||
$head[$h][1] = $langs->trans('Info');
|
|
||||||
$hselected=$h;
|
|
||||||
$h++;
|
|
||||||
|
|
||||||
dol_fiche_head($head, $hselected, $langs->trans("Action"),0,'task');
|
|
||||||
|
|
||||||
|
|
||||||
print '<table width="100%"><tr><td>';
|
print '<table width="100%"><tr><td>';
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
/* Copyright (C) 2008 Laurent Destailleur <eldy@users.sourceforge.net>
|
/* Copyright (C) 2008-2009 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
* Copyright (C) 2005-2009 Regis Houssin <regis@dolibarr.fr>
|
* Copyright (C) 2005-2009 Regis Houssin <regis@dolibarr.fr>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
@ -197,10 +197,9 @@ function show_array_last_actions_done($max=5)
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
\brief Define head array for tabs of agenda setup pages
|
* \brief Define head array for tabs of agenda setup pages
|
||||||
\return Array of head
|
* \return Array of head
|
||||||
\version $Id$
|
*/
|
||||||
*/
|
|
||||||
function agenda_prepare_head()
|
function agenda_prepare_head()
|
||||||
{
|
{
|
||||||
global $langs, $conf, $user;
|
global $langs, $conf, $user;
|
||||||
@ -220,4 +219,33 @@ function agenda_prepare_head()
|
|||||||
return $head;
|
return $head;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Define head array for tabs of agenda setup pages
|
||||||
|
* \return Array of head
|
||||||
|
*/
|
||||||
|
function actions_prepare_head()
|
||||||
|
{
|
||||||
|
global $langs, $conf, $user;
|
||||||
|
|
||||||
|
$h = 0;
|
||||||
|
$head = array();
|
||||||
|
|
||||||
|
$head[$h][0] = DOL_URL_ROOT.'/comm/action/fiche.php?id='.$_GET["id"];
|
||||||
|
$head[$h][1] = $langs->trans("CardAction");
|
||||||
|
$head[$h][2] = 'card';
|
||||||
|
$h++;
|
||||||
|
|
||||||
|
$head[$h][0] = DOL_URL_ROOT.'/comm/action/document.php?id='.$_GET["id"];
|
||||||
|
$head[$h][1] = $langs->trans('Documents');
|
||||||
|
$head[$h][2] = 'documents';
|
||||||
|
$h++;
|
||||||
|
|
||||||
|
$head[$h][0] = DOL_URL_ROOT.'/comm/action/info.php?id='.$_GET["id"];
|
||||||
|
$head[$h][1] = $langs->trans('Info');
|
||||||
|
$head[$h][2] = 'info';
|
||||||
|
$h++;
|
||||||
|
|
||||||
|
return $head;
|
||||||
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
89
htdocs/lib/memory.lib.php
Normal file
89
htdocs/lib/memory.lib.php
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
<?php
|
||||||
|
/* Copyright (C) 2009 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
* or see http://www.gnu.org/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file htdocs/lib/memory.lib.php
|
||||||
|
* \brief Set of function for memory management
|
||||||
|
* \version $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** \brief Read a memory area shared by all users, all sessions on server
|
||||||
|
* \param $memoryid Memory id of shared area
|
||||||
|
* \return int 0=Nothing is done, <0 if KO, >0 if OK
|
||||||
|
*/
|
||||||
|
function dol_getshmop($memoryid,$size)
|
||||||
|
{
|
||||||
|
$shmkey = ftok($memoryid, 'D');
|
||||||
|
print 'dol_getshmop memoryid='.$memoryid." shmkey=".$shmkey."<br>\n";
|
||||||
|
if (! function_exists("shmop_open")) return 0;
|
||||||
|
$handle=@shmop_open($shmkey,'a',0,0);
|
||||||
|
if ($handle)
|
||||||
|
{
|
||||||
|
$data=unserialize(shmop_read($handle,0,$size));
|
||||||
|
shmop_close($handle);
|
||||||
|
}
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** \brief Save data into a memory area shared by all users, all sessions on server
|
||||||
|
* \param $memoryid Memory id of shared area
|
||||||
|
* \param $data Data to save
|
||||||
|
* \return int <0 if KO, Nb of bytes written if OK
|
||||||
|
*/
|
||||||
|
function dol_setshmop($memoryid,$data,$size=0)
|
||||||
|
{
|
||||||
|
$shmkey = ftok($memoryid, 'D');
|
||||||
|
$newdata=serialize($data);
|
||||||
|
if (! $size) $size=strlen($newdata);
|
||||||
|
print 'dol_setshmop memoryid='.$memoryid." shmkey=".$shmkey." newdata=".strlen($newdata)."bytes size=".$size."<br>\n";
|
||||||
|
if (! function_exists("shmop_write")) return 0;
|
||||||
|
$handle=shmop_open($shmkey,'c',0644,$size);
|
||||||
|
if ($handle)
|
||||||
|
{
|
||||||
|
$shm_bytes_written=shmop_write($handle,$newdata,0);
|
||||||
|
if ($shm_bytes_written != strlen($newdata))
|
||||||
|
{
|
||||||
|
print "Couldn't write the entire length of data\n";
|
||||||
|
}
|
||||||
|
shmop_close($handle);
|
||||||
|
return $shm_bytes_written;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
print 'Error in shmop_open';
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Declare function ftok
|
||||||
|
*/
|
||||||
|
if( !function_exists('ftok') )
|
||||||
|
{
|
||||||
|
function ftok($filename = "", $proj = "")
|
||||||
|
{
|
||||||
|
$filename = $filename . $proj;
|
||||||
|
for ($key = array(); sizeof($key) < strlen($filename); $key[] = ord(substr($filename, sizeof($key), 1)));
|
||||||
|
return dechex(array_sum($key));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
@ -38,8 +38,8 @@ class Translate {
|
|||||||
var $defaultlang; // Langue courante en vigueur de l'utilisateur
|
var $defaultlang; // Langue courante en vigueur de l'utilisateur
|
||||||
var $direction = 'ltr'; // Left to right or Right to left
|
var $direction = 'ltr'; // Left to right or Right to left
|
||||||
|
|
||||||
var $tab_loaded=array(); // Tableau pour signaler les fichiers deja charges
|
|
||||||
var $tab_translate=array(); // Tableau des traductions
|
var $tab_translate=array(); // Tableau des traductions
|
||||||
|
var $tab_loaded=array(); // Array to store result after loading each language file
|
||||||
|
|
||||||
var $cache_labels=array(); // Cache for labels
|
var $cache_labels=array(); // Cache for labels
|
||||||
|
|
||||||
@ -215,31 +215,37 @@ class Translate {
|
|||||||
// Directory of translation files
|
// Directory of translation files
|
||||||
$scandir = $searchdir."/".$langofdir;
|
$scandir = $searchdir."/".$langofdir;
|
||||||
$file_lang = $scandir . "/".$newdomain.".lang";
|
$file_lang = $scandir . "/".$newdomain.".lang";
|
||||||
$filelangexists=is_file($file_lang);
|
$file_lang_osencoded=dol_osencode($file_lang);
|
||||||
|
$filelangexists=is_file($file_lang_osencoded);
|
||||||
|
|
||||||
//dol_syslog('Translate::Load Try to read for alt='.$alt.' langofdir='.$langofdir.' file_lang='.$file_lang." => ".$filelangexists);
|
//dol_syslog('Translate::Load Try to read for alt='.$alt.' langofdir='.$langofdir.' file_lang='.$file_lang." => ".$filelangexists);
|
||||||
|
|
||||||
if ($filelangexists)
|
if ($filelangexists)
|
||||||
{
|
{
|
||||||
// Enable cache of lang file in session (faster but need more memory)
|
$found=false;
|
||||||
// Speed gain: 40ms - Memory overusage: 200ko (Size of session cache file)
|
|
||||||
$enablelangcacheinsession=false;
|
|
||||||
|
|
||||||
if ($enablelangcacheinsession && isset($_SESSION['lang_'.$newdomain]))
|
// Enable cache of lang file in memory (faster but need more memory)
|
||||||
|
// Speed gain: 40ms - Memory overusage: 200ko (Size of session cache file)
|
||||||
|
$enablelangcacheinmemory=false;
|
||||||
|
if ($enablelangcacheinmemory)
|
||||||
{
|
{
|
||||||
foreach($_SESSION['lang_'.$newdomain] as $key => $value)
|
require_once(DOL_DOCUMENT_ROOT ."/lib/memory.lib.php");
|
||||||
|
$tmparray=dol_getshmop('DOL_LANG_'.DOL_VERSION.'_'.$newdomain,65536);
|
||||||
|
if (is_array($tmparray) && sizeof($tmparray))
|
||||||
{
|
{
|
||||||
$this->tab_translate[$key]=$value;
|
$this->tab_translate=$tmparray;
|
||||||
$this->tab_loaded[$newdomain]=3; // Set this file as loaded from cache in session
|
$this->tab_loaded[$newdomain]=3; // Set this file as loaded from cache in session
|
||||||
|
$found=true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
if (! $found)
|
||||||
{
|
{
|
||||||
if ($fp = @fopen($file_lang,"rt"))
|
if ($fp = @fopen($file_lang,"rt"))
|
||||||
{
|
{
|
||||||
if ($enablelangcacheinsession) $tabtranslatedomain=array(); // To save lang in session
|
if ($enablelangcacheinmemory) $tabtranslatedomain=array(); // To save lang in session
|
||||||
$finded = 0;
|
|
||||||
while (($ligne = fgets($fp,4096)) && ($finded == 0))
|
while ($ligne = fgets($fp,4096)) // Ex: Need 225ms for all fgets on all lang file for Third party page. Same speed than file_get_contents
|
||||||
{
|
{
|
||||||
if ($ligne[0] != "\n" && $ligne[0] != " " && $ligne[0] != "#")
|
if ($ligne[0] != "\n" && $ligne[0] != " " && $ligne[0] != "#")
|
||||||
{
|
{
|
||||||
@ -272,17 +278,21 @@ class Translate {
|
|||||||
//print 'XX'.$key;
|
//print 'XX'.$key;
|
||||||
$this->tab_translate[$key]=$value;
|
$this->tab_translate[$key]=$value;
|
||||||
|
|
||||||
if ($enablelangcacheinsession) $tabtranslatedomain[$key]=$value; // To save lang in session
|
if ($enablelangcacheinmemory) $tabtranslatedomain[$key]=$value; // To save lang in session
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$fileread=1;
|
|
||||||
fclose($fp);
|
fclose($fp);
|
||||||
|
$fileread=1;
|
||||||
|
|
||||||
// To save lang in session
|
// To save lang in session
|
||||||
if ($enablelangcacheinsession && sizeof($tabtranslatedomain)) $_SESSION['lang_'.$newdomain]=$tabtranslatedomain;
|
if ($enablelangcacheinmemory && sizeof($tabtranslatedomain))
|
||||||
|
{
|
||||||
|
require_once(DOL_DOCUMENT_ROOT ."/lib/memory.lib.php");
|
||||||
|
$size=dol_setshmop('DOL_LANG_'.DOL_VERSION.'_'.$newdomain,$tabtranslatedomain,65536);
|
||||||
|
}
|
||||||
|
//exit;
|
||||||
break; // Break loop on each root dir
|
break; // Break loop on each root dir
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user