New: Optimize speed of loading lang files ith hidden option MAIN_OPTIMIZE_SPEED
This commit is contained in:
parent
9ad1cc6788
commit
987f4452b5
@ -23,22 +23,39 @@
|
|||||||
* \version $Id$
|
* \version $Id$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
global $shmkeys,$shmoffset;
|
||||||
|
|
||||||
|
$shmkeys=array('main'=>1,'admin'=>2,'dict'=>3,'companies'=>4,'suppliers'=>5,'products'=>6,
|
||||||
|
'commercial'=>7,'compta'=>8,'projects'=>9,'cashdesk'=>10,'agenda'=>11,'bills'=>12,
|
||||||
|
'propal'=>13,'boxes'=>14,'banks'=>15,'other'=>16,'errors'=>17,'members'=>18,'ecm'=>19,
|
||||||
|
'orders'=>20,'users'=>21,'help'=>22,'stocks'=>23,'interventions'=>24,
|
||||||
|
'donations'=>25,'contracts'=>26);
|
||||||
|
$shmoffset=100;
|
||||||
|
|
||||||
|
|
||||||
/** \brief Read a memory area shared by all users, all sessions on server
|
/** \brief Read a memory area shared by all users, all sessions on server
|
||||||
* \param $memoryid Memory id of shared area
|
* \param $memoryid Memory id of shared area
|
||||||
* \return int 0=Nothing is done, <0 if KO, >0 if OK
|
* \return int 0=Nothing is done, <0 if KO, >0 if OK
|
||||||
*/
|
*/
|
||||||
function dol_getshmop($memoryid,$size)
|
function dol_getshmop($memoryid)
|
||||||
{
|
{
|
||||||
$shmkey = ftok($memoryid, 'D');
|
global $shmkeys,$shmoffset;
|
||||||
print 'dol_getshmop memoryid='.$memoryid." shmkey=".$shmkey."<br>\n";
|
|
||||||
if (! function_exists("shmop_open")) return 0;
|
if (empty($shmkeys[$memoryid]) || ! function_exists("shmop_open")) return 0;
|
||||||
|
$shmkey=($shmkeys[$memoryid]+$shmoffset);
|
||||||
|
//print 'dol_getshmop memoryid='.$memoryid." shmkey=".$shmkey."<br>\n";
|
||||||
$handle=@shmop_open($shmkey,'a',0,0);
|
$handle=@shmop_open($shmkey,'a',0,0);
|
||||||
if ($handle)
|
if ($handle)
|
||||||
{
|
{
|
||||||
$data=unserialize(shmop_read($handle,0,$size));
|
$size=trim(shmop_read($handle,0,6));
|
||||||
|
if ($size) $data=unserialize(shmop_read($handle,6,$size));
|
||||||
|
else return -1;
|
||||||
shmop_close($handle);
|
shmop_close($handle);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return -2;
|
||||||
|
}
|
||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -47,23 +64,27 @@ function dol_getshmop($memoryid,$size)
|
|||||||
* \param $data Data to save
|
* \param $data Data to save
|
||||||
* \return int <0 if KO, Nb of bytes written if OK
|
* \return int <0 if KO, Nb of bytes written if OK
|
||||||
*/
|
*/
|
||||||
function dol_setshmop($memoryid,$data,$size=0)
|
function dol_setshmop($memoryid,$data)
|
||||||
{
|
{
|
||||||
$shmkey = ftok($memoryid, 'D');
|
global $shmkeys,$shmoffset;
|
||||||
|
|
||||||
|
//print 'dol_setshmop memoryid='.$memoryid."<br>\n";
|
||||||
|
if (empty($shmkeys[$memoryid]) || ! function_exists("shmop_write")) return 0;
|
||||||
|
$shmkey=$shmkeys[$memoryid]+$shmoffset;
|
||||||
$newdata=serialize($data);
|
$newdata=serialize($data);
|
||||||
if (! $size) $size=strlen($newdata);
|
$size=strlen($newdata);
|
||||||
print 'dol_setshmop memoryid='.$memoryid." shmkey=".$shmkey." newdata=".strlen($newdata)."bytes size=".$size."<br>\n";
|
//print 'dol_setshmop memoryid='.$memoryid." shmkey=".$shmkey." newdata=".$size."bytes<br>\n";
|
||||||
if (! function_exists("shmop_write")) return 0;
|
$handle=shmop_open($shmkey,'c',0644,6+$size);
|
||||||
$handle=shmop_open($shmkey,'c',0644,$size);
|
|
||||||
if ($handle)
|
if ($handle)
|
||||||
{
|
{
|
||||||
$shm_bytes_written=shmop_write($handle,$newdata,0);
|
$shm_bytes_written1=shmop_write($handle,str_pad($size,6),0);
|
||||||
if ($shm_bytes_written != strlen($newdata))
|
$shm_bytes_written2=shmop_write($handle,$newdata,6);
|
||||||
|
if (($shm_bytes_written1 + $shm_bytes_written2) != (6+strlen($newdata)))
|
||||||
{
|
{
|
||||||
print "Couldn't write the entire length of data\n";
|
print "Couldn't write the entire length of data\n";
|
||||||
}
|
}
|
||||||
shmop_close($handle);
|
shmop_close($handle);
|
||||||
return $shm_bytes_written;
|
return ($shm_bytes_written1+$shm_bytes_written2);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -72,18 +93,4 @@ function dol_setshmop($memoryid,$data,$size=0)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|||||||
@ -681,6 +681,7 @@ else
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Show HTML header
|
* \brief Show HTML header
|
||||||
* \param head Optionnal head lines
|
* \param head Optionnal head lines
|
||||||
|
|||||||
@ -226,15 +226,20 @@ class Translate {
|
|||||||
|
|
||||||
// Enable cache of lang file in memory (faster but need more memory)
|
// Enable cache of lang file in memory (faster but need more memory)
|
||||||
// Speed gain: 40ms - Memory overusage: 200ko (Size of session cache file)
|
// Speed gain: 40ms - Memory overusage: 200ko (Size of session cache file)
|
||||||
$enablelangcacheinmemory=false;
|
$enablelangcacheinmemory=$conf->global->MAIN_OPTIMIZE_SPEED;
|
||||||
if ($enablelangcacheinmemory)
|
//$enablelangcacheinmemory=true;
|
||||||
|
|
||||||
|
if ($alt == 2 && $enablelangcacheinmemory)
|
||||||
{
|
{
|
||||||
require_once(DOL_DOCUMENT_ROOT ."/lib/memory.lib.php");
|
require_once(DOL_DOCUMENT_ROOT ."/lib/memory.lib.php");
|
||||||
$tmparray=dol_getshmop('DOL_LANG_'.DOL_VERSION.'_'.$newdomain,65536);
|
$tmparray=dol_getshmop($newdomain);
|
||||||
if (is_array($tmparray) && sizeof($tmparray))
|
if (is_array($tmparray) && sizeof($tmparray))
|
||||||
{
|
{
|
||||||
$this->tab_translate=$tmparray;
|
$this->tab_translate=array_merge($this->tab_translate,$tmparray);
|
||||||
|
//print $newdomain."\n";
|
||||||
|
//var_dump($this->tab_translate);
|
||||||
$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
|
||||||
|
$fileread=1;
|
||||||
$found=true;
|
$found=true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -287,10 +292,10 @@ class Translate {
|
|||||||
$fileread=1;
|
$fileread=1;
|
||||||
|
|
||||||
// To save lang in session
|
// To save lang in session
|
||||||
if ($enablelangcacheinmemory && sizeof($tabtranslatedomain))
|
if ($alt == 2 && $enablelangcacheinmemory && sizeof($tabtranslatedomain))
|
||||||
{
|
{
|
||||||
require_once(DOL_DOCUMENT_ROOT ."/lib/memory.lib.php");
|
require_once(DOL_DOCUMENT_ROOT ."/lib/memory.lib.php");
|
||||||
$size=dol_setshmop('DOL_LANG_'.DOL_VERSION.'_'.$newdomain,$tabtranslatedomain,65536);
|
$size=dol_setshmop($newdomain,$tabtranslatedomain);
|
||||||
}
|
}
|
||||||
//exit;
|
//exit;
|
||||||
break; // Break loop on each root dir
|
break; // Break loop on each root dir
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user