Новости Joomla

Человек на GitHub ускорил Joomla в 600 раз на объёме 150к+ материалов в 1700+ категориях

Человек на GitHub ускорил Joomla в 600 раз на объёме 150к+ материалов в 1700+ категориях

👩‍💻 Человек на GitHub ускорил Joomla в 600 раз на объёме 150к+ материалов в 1700+ категориях. На старте его сайт на Joomla 3 вообще не смог обновиться на Joomla 5. Пришлось делать экспорт/импорт материалов. Проделав всё это он запустил-таки этот объём данных на Joomla 5. Тестовый скрипт грузил 200 материалов из этого объёма всего за 94 секунды ))) А главная страница с категориями грузилась 20 секунд. Добавив индекс для таблицы #__content

CREATE INDEX idx_catid_state ON #__content (catid, state);
он сократил время загрузки категорий до 1 секунды. Затем наш герой решил поковырять SQL-запрос в ArticleModel, который отвечает за выборку материалов. И решил заменить тип JOIN на STRAIGHT_JOIN для категорий.
// ->from($db->quoteName('#__content', 'a'))->from(    $db->quoteName('#__content', 'a')    . ' STRAIGHT_JOIN ' . $db->quoteName('#__categories', 'c')    . ' ON ' . $db->quoteName('c.id') . ' = ' . $db->quoteName('a.catid'))// ->join('LEFT', $db->quoteName('#__categories', 'c'), $db->quoteName('c.id') . ' = ' . $db->quoteName('a.catid'))
Что сократило загрузку 200 материалов из 150к с 94 секунд до 5. К слову сказать, боевой сайт на Joomla 3 крутится на 12CPU 64GB рамы. А все манипуляции с кодом он делает на базовом 1CPU 1GB сервере и замеры скорости даны именно для базового сервера. Но это всё в дискуссии, хотя в идеале должно вылиться в Pull Requests. Мы - Open Source сообщество, где никто никому ничего не должен. Джунгли. Но человек ищет пути оптимизации Joomla и предлагает решения. Если оказать поддержку и предложить помощь хотя бы с тестированием самых разнообразных сценариев, то возможно эти улучшения смогут войти в ядро. Пусть не быстро, пусть через несколько лет, пусть не все, но войдут. Достаточно предложить руку помощи и приложить немного усилий.
Дискуссию на GitHub можно почитать здесь.@joomlafeed#joomla #community #php

0 Пользователей и 1 Гость просматривают эту тему.
  • 1 Ответов
  • 1804 Просмотров
*

reg-ad-site

  • Захожу иногда
  • 410
  • 14 / 3
  • Если помог, ставь +
На сайте нашел только тему для обратного процесса! Мне же нужно переделать php код для Joomla.
Помогите решить эту проблему!
Код
<?
/**
* @version $Id: form.php 2011-01-12 louis $
* @copyright Copyright (C) 2011 Куйсоков Тимур Адамович.
* @license GNU/GPL, see LICENSE.php
* Для сайта     http://fembody.ru
*/
$connect_host="localhost"; //хост бд
$connect_user="user"; //пользователь бд
$connect_password="pass"; //пароль бд
$selected_db="my_bd"; //название таблицы
class db{
var $connect;//функция подключения к базе
var $select_db;//выбор базы
var $query_fetch;//результат звапроса массивом
var $query_assoc;//результат звапроса ассоциативным массивом
var $close_connect;//ртключение от бд
var $count_record;//количество записей у пользователя
var $add_record;//добавить запись
var $file_read;//чтение из файла
var $save_record_db;//сохранение записи в бд
var $del_record_db;//удаление записи из бд
var $bl_replace;//замена
function connect($host,$user,$pass){
mysql_connect($host,$user,$pass) or die("Could not connect: " . mysql_error());
}
function close_connect(){
mysql_close();
}
function select_db($db){
mysql_select_db($db);
}
function query_fetch($who,$table,$where){
if($where!=''){$res=mysql_query("SELECT ".$who." FROM ".$table." WHERE ".$where);}
else{$res=mysql_query("SELECT ".$who." FROM ".$table);}
while ($rev = mysql_fetch_array($res)) {
$ret[]=$rev;
}
return $ret;
}
function query_assoc($who,$table,$where){
if($where!=''){
$res=mysql_query("SELECT ".$who." FROM ".$table." WHERE ".$where);}
else{
$res=mysql_query("SELECT ".$who." FROM ".$table);
}
while ($rev = mysql_fetch_assoc($res)) {
$ret[]=$rev;
}
return $ret;
}
function count_record($table){
     $user =& JFactory::getUser();
             $name = $user->get('id');
$res=mysql_query("SELECT count(*) FROM ".$table." where user_id=".$name);
$res=mysql_fetch_assoc($res);
$res=$res['count(*)'];
return $res;
}
function bl_replace($who,$what,$what){
$res=str_replace($who,$what,$what);
return $res;
}
function file_read($filename){
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
return $contents;
}
function save_record_db($table,$row){
      $user =& JFactory::getUser();
             $name = $user->get('id');
$red=mysql_query("SELECT count(*) FROM ".$table." where user_id=".$name." and date='".$row['date']."'");
$red=mysql_fetch_assoc($red);
$red=$red['count(*)'];
$rows="id";
        $rows.=", user_id";
$values="NULL";
        $values.=", ".$name;
foreach($row as $key=>$value){
$rows=$rows.",".$key;
$values=$values.",'".$value."'";
}
if($red==0){
$sql="INSERT INTO ".$table." (".$rows.") VALUES (".$values.");";}
$res=mysql_query($sql);
}
function del_record_db($table,$id){
$sql="DELETE FROM ".$table." WHERE id='".$id."'";
$res=mysql_query($sql);
}
}
$cor = new db;
$cor->connect($connect_host,$connect_user,$connect_password);
$cor->select_db($selected_db);
$user =& JFactory::getUser();
             $name = $user->get('id');
$res=$cor->query_fetch("*","test","user_id=".$name);
if($_POST){
if($_POST['row']!='' and !isset($_POST['row']['del'])){
$cor->save_record_db('test',$_POST['row']);
}else{$cor->del_record_db('test',$_POST['row']['id']);}
}
$table="<table>
<tr bgcolor='#bbbbbb'>
<td bgcolor='#bbbbbb'>Дата</td>
<td bgcolor='#bbbbbb'>Ваш рост</td>
<td bgcolor='#bbbbbb'>Ваш вес</td>
<td bgcolor='#bbbbbb'>Ваш размер запястья</td>
<td bgcolor='#bbbbbb'>Упражнение</td>
<td bgcolor='#bbbbbb'>Вес снаряда</td>
<td bgcolor='#bbbbbb'>Число повторений</td>
<td bgcolor='#bbbbbb'>Число подходов</td>
<td bgcolor='#bbbbbb'>Пол</td>
<td bgcolor='#bbbbbb'></td>
</tr>";$i=1;
$count=$cor->count_record('test');
if($count>0){ foreach($res as $key=>$value){
//print_r($value);
if(($i%2)==0){
$bgcolor='#bbbbbb';
}
else
{
$bgcolor='#FFFFFF';}
$table.="<tr bgcolor='".$bgcolor."'>
<td bgcolor='".$bgcolor."'>".$value['date']."</td>
<td bgcolor='".$bgcolor."'>".$value['rost']."</td>
<td bgcolor='".$bgcolor."'>".$value['ves']."</td>
<td bgcolor='".$bgcolor."'>".$value['zap']."</td>
<td bgcolor='".$bgcolor."'>".$value['upr']."</td>
<td bgcolor='".$bgcolor."'>".$value['ves_sn']."</td>
<td bgcolor='".$bgcolor."'>".$value['chisl_pov']."</td>
<td bgcolor='".$bgcolor."'>".$value['chisl_pod']."</td>
<td bgcolor='".$bgcolor."'>".$value['sex']."</td>
<td bgcolor='".$bgcolor."'><form method='post' action='/'><input type='hidden' name='row[id]' value='".$value['id']."'><input type='submit' value='Удалить' name=row[del]></form></form></td>
</tr>";
$i++;
}}
$table.="</table>";

$form=$cor->file_read('form');
$corn=str_replace("{{view_records}}",$table,$form);
$rl='<br><input type="button" value="Показать ранее добавленные записи" onclick="javascript:toggleMe(';
$rl.="'id_1','id_2');";
$rl.='">';
if($count!=0){$corn=str_replace("{{butt}}",$rl,$corn);
}else{$corn=str_replace("{{butt}}","<h1>У вас еще нет записей в дневнике</h1>",$corn);}

        $user =& JFactory::getUser();
if ($user->get('guest')) {
 // user is a guest
} else {
 echo $corn;
$cor->close_connect();
}?>
*

Drugnir

  • Новичок
  • 1
  • 0 / 0
скачай jumi с официального сайт, там все написано, если не разберешься пиши.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Joomla 1.5 как убрать кнопку редактировать материант с сайта

Автор andriy465

Ответов: 5
Просмотров: 4029
Последний ответ 12.11.2023, 23:37:03
от all_zer
Нужно wiki под Joomla

Автор THE KILLERS

Ответов: 9
Просмотров: 9693
Последний ответ 05.11.2020, 20:56:47
от Kijv
Поиск статьи по url сайта в админке Joomla 1.5

Автор Tema

Ответов: 5
Просмотров: 2197
Последний ответ 14.08.2020, 07:16:44
от rsn
Не могу войти в админку Joomla 1.5

Автор MrSkif

Ответов: 14
Просмотров: 10559
Последний ответ 12.09.2018, 19:36:32
от PaLyCH
Не войду в админку Joomla 1.5.26, пишет соединение с сервером было сброшено

Автор rom_4

Ответов: 4
Просмотров: 5512
Последний ответ 16.05.2018, 17:28:18
от Алексей MeRsOvOd