Новости 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 Гость просматривают эту тему.
  • 13 Ответов
  • 8479 Просмотров
*

noszone

  • Захожу иногда
  • 59
  • 2 / 0
  • Люблю Жумлу и ненавижу...
Скрипт работает, но проблема с русским языком.
В базу не импортируются(просто пусто, пробелы) слова на русском языке.
База - UTF-8, сравнение UTF-8.
csv file - из Excel.

Код: php
<?php
include "config.php";
mysql_query("truncate table jos_emails_list");
$file_list_string=mysql_query("select * from info2");
if (!$file_list_string) exit(mysql_error());
[b]setlocale(LC_ALL, "ru_RU");[/b]
while(list($auto_url,$shop_name,$shop_url)=mysql_fetch_row($file_list_string))
{$filename=$shop_url;

     $handle = fopen("$filename", "r");
      echo"$filename";
     while (($data = fgetcsv($handle, 1000, ","))!== FALSE)
     {
     $import="INSERT into jos_emails_list(name,email,city,country) values('$data[0]','$data[1]','$data[2]','$data[3]')";
     mysql_query($import) or die(mysql_error());
     }
         fclose($handle);
     }

     print "Import done";

?>

Пробовал использовать iconv, может у меня неправильно пполучилось - толку нет.
Кстати, я выделил жирным, после этого появились крякозябры. Теперь от них не могу избавиться.
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
Re: Скрипт импорта файла csv в MySql базу
« Ответ #1 : 18.10.2010, 13:31:41 »
$text = iconv('windows-1251', 'utf-8', $text); //перекодировка
 $text=mysql_escape_string($text); //экранирование для безопасной вставки
*

noszone

  • Захожу иногда
  • 59
  • 2 / 0
  • Люблю Жумлу и ненавижу...
Re: Скрипт импорта файла csv в MySql базу
« Ответ #2 : 18.10.2010, 14:07:31 »
Не идёт.
Код: php
<?php
include "config.php";
mysql_query("truncate table jos_emails_list");
$file_list_string=mysql_query("select * from info2");
if (!$file_list_string) exit(mysql_error());
setlocale(LC_ALL, "ru_RU");
while(list($auto_url,$shop_name,$shop_url)=mysql_fetch_row($file_list_string))
{$filename=$shop_url;

     $handle = fopen("$filename", "r");
     while (($data = fgetcsv($handle, 1000, ","))!== FALSE)
     {
        $data[0] = iconv('windows-1251','utf-8',$data[0]); //перекодировка
$data[1] = iconv('windows-1251','utf-8',$data[1]); //перекодировка
$data[2] = iconv('windows-1251','utf-8',$data[2]); //перекодировка
$data[3] = iconv('windows-1251','utf-8',$data[3]); //перекодировка
$data[0]=mysql_escape_string($data[0]);
$data[1]=mysql_escape_string($data[1]);
$data[2]=mysql_escape_string($data[2]);
$data[3]=mysql_escape_string($data[3]);
     $import="INSERT into jos_emails_list(name,email,city,country) values('$data[0]','$data[1]','$data[2]','$data[3]')";
     mysql_query($import) or die(mysql_error());
     }
         fclose($handle);
     }

     print "Import done";

?>

У екселевского файла csv кодировка какая может быть? Notepad ++ показывает ANSI.
Я вот никак въехать не могу, ANSI=Windows1251, or ANSI=UTF-8?
Кстати на Денвере всё работало. Русский язык отображался без проблем.
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
Re: Скрипт импорта файла csv в MySql базу
« Ответ #3 : 18.10.2010, 14:16:38 »
var_dump($data) или print_r($data)
и смотреть что там и в какой кодировке.
*

noszone

  • Захожу иногда
  • 59
  • 2 / 0
  • Люблю Жумлу и ненавижу...
Re: Скрипт импорта файла csv в MySql базу
« Ответ #4 : 18.10.2010, 14:43:13 »
Код: php
<?php
include "config.php";
mysql_query("truncate table jos_emails_list");
$file_list_string=mysql_query("select * from info2");
if (!$file_list_string) exit(mysql_error());
setlocale(LC_ALL, "ru_RU");
while(list($auto_url,$shop_name,$shop_url)=mysql_fetch_row($file_list_string))
{$filename=$shop_url;

     $handle = fopen("$filename", "r");
     while (($data = fgetcsv($handle, 1000, ","))!== FALSE)
     {
        $data[0] = iconv('windows-1251','utf-8',$data[0]); //перекодировка
$data[1] = iconv('windows-1251','utf-8',$data[1]); //перекодировка
$data[2] = iconv('windows-1251','utf-8',$data[2]); //перекодировка
$data[3] = iconv('windows-1251','utf-8',$data[3]); //перекодировка
print_r($data);
$data[0]=mysql_escape_string($data[0]);
$data[1]=mysql_escape_string($data[1]);
$data[2]=mysql_escape_string($data[2]);
$data[3]=mysql_escape_string($data[3]);
print_r($data);
     $import="INSERT into jos_emails_list(name,email,city,country) values('$data[0]','$data[1]','$data[2]','$data[3]')";
     mysql_query($import) or die(mysql_error());
     }
         fclose($handle);
     }

     print "Import done";

?>
Вывод
Array (
  • => п»ї231 [1] => 1231 [2] => 41212 [3] => СотТел [4] => 1 ) Array (
  • => п»ї231 [1] => 1231 [2] => 41212 [3] => СотТел [4] => 1 ) Array (
  • => 231 [1] => 1231 [2] => 41212 [3] => ЛогикоРС? [4] => 2 ) Array (
  • => 231 [1] => 1231 [2] => 41212 [3] => ЛогикоРС? [4] => 2 ) Array (
  • => 231 [1] => 1231 [2] => 41212 [3] => СотТел [4] => 3 ) Array (
  • => 231 [1] => 1231 [2] => 41212 [3] => СотТел [4] => 3 ) Array (
  • => ljlkjlj [1] => lhjkhj [2] => 41212 [3] => ЛогикоРС? [4] => 4 ) Array (
  • => ljlkjlj [1] => lhjkhj [2] => 41212 [3] => ЛогикоРС? [4] => 4 ) Array (
  • => 231 [1] => 1231 [2] => 41212 [3] => СотТел [4] => 5 ) Array (
  • => 231 [1] => 1231 [2] => 41212 [3] => СотТел [4] => 5 ) Array (
  • => 231 [1] => 1231 [2] => 41212 [3] => ЛогикоРС? [4] => 6 ) Array (
  • => 231 [1] => 1231 [2] => 41212 [3] => ЛогикоРС? [4] => 6 ) Array (
  • => 231 [1] => lkjhlkjh [2] => 41212 [3] => СотТел [4] => 7 ) Array (
  • => 231 [1] => lkjhlkjh [2] => 41212 [3] => СотТел [4] => 7 ) Array (
  • => 231 [1] => 1231 [2] => 41212 [3] => ЛогикоРС? [4] => 8 ) Array (
  • => 231 [1] => 1231 [2] => 41212 [3] => ЛогикоРС? [4] => 8 ) Array (
  • => 231 [1] => 1231 [2] => 41212 [3] => СотТел [4] => 9 ) Array (
  • => 231 [1] => 1231 [2] => 41212 [3] => СотТел [4] => 9 ) Array (
  • => зщхзщхз [1] => олдложд [2] => 41212 [3] => ЛогикоРС? [4] => 10 ) Array (
  • => зщхзщхз [1] => олдложд [2] => 41212 [3] => ЛогикоРС? [4] => 10 ) Array (
  • => 231 [1] => 1231 [2] => 41212 [3] => СотТел [4] => 11 ) Array (
  • => 231 [1] => 1231 [2] => 41212 [3] => СотТел [4] => 11 ) Array (
  • => 231 [1] => 1231 [2] => 41212 [3] => ЛогикоРС? [4] => 12 ) Array (
  • => 231 [1] => 1231 [2] => 41212 [3] => ЛогикоРС? [4] => 12 ) Array (
  • => 231 [1] => mlkj [2] => 41212 [3] => СотТел [4] => 13 ) Array (
  • => 231 [1] => mlkj [2] => 41212 [3] => СотТел [4] => 13 ) Array (
  • => 231 [1] => 1231 [2] => 41212 [3] => ЛогикоРС? [4] => 14 ) Array (
  • => 231 [1] => 1231 [2] => 41212 [3] => ЛогикоРС? [4] => 14 ) Array (
  • => 231 [1] => 1231 [2] => 41212 [3] => СотТел [4] => 15 ) Array (
  • => 231 [1] => 1231 [2] => 41212 [3] => СотТел [4] => 15 ) Import done
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
Re: Скрипт импорта файла csv в MySql базу
« Ответ #5 : 18.10.2010, 14:45:45 »
noszone, ты можешь тупо пересохранитьт файл в другой кодировке, чтобы этот вопрос снять.
да, сам файл СКРИПТ, тоже в utf-8 без бом сохрани
*

noszone

  • Захожу иногда
  • 59
  • 2 / 0
  • Люблю Жумлу и ненавижу...
Re: Скрипт импорта файла csv в MySql базу
« Ответ #6 : 18.10.2010, 14:49:18 »
Тут вот в чём дело. Представим, что таких файлов много и они приходят от разных людей.
Список из урл файлов храниться в таблице info2.
Как сделать так, чтобы независимо от рег настроек и системной локали ВинХП, Виста 7, русский язык отображался без проблем?
Спасибо.
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
Re: Скрипт импорта файла csv в MySql базу
« Ответ #7 : 18.10.2010, 14:54:00 »
ну так ты сделай хотя бы чтобы у тебя работал один пример. ты свой то файл не можешь поместить, о каких многих юзеров говоришь?
*

noszone

  • Захожу иногда
  • 59
  • 2 / 0
  • Люблю Жумлу и ненавижу...
Re: Скрипт импорта файла csv в MySql базу
« Ответ #8 : 18.10.2010, 15:18:41 »
Вывод
Array (
  • => 23123;4ыва;45345;ывфыв [1] => [2] => [3] => ) Array (
  • => 23123;4ыва;45345;ывфыв [1] => [2] => [3] => ) Array (
  • => 213;2ваыва;345345;ываыва [1] => [2] => [3] => ) Array (
  • => 213;2ваыва;345345;ываыва [1] => [2] => [3] => ) Array (
  • => 3;2ваыва;3453;asda [1] => [2] => [3] => ) Array (
  • => 3;2ваыва;3453;asda [1] => [2] => [3] => ) Array (
  • => вфвфыв;2ваыва;5;sd [1] => [2] => [3] => ) Array (
  • => вфвфыв;2ваыва;5;sd [1] => [2] => [3] => ) Array (
  • => вфвфыв;2ваыва;435;ва [1] => [2] => [3] => ) Array (
  • => вфвфыв;2ваыва;435;ва [1] => [2] => [3] => ) Array (
  • => вфвфыв;2ваыва;345;ыпа [1] => [2] => [3] => ) Array (
  • => вфвфыв;2ваыва;345;ыпа [1] => [2] => [3] => ) Array (
  • => вфвфыв;2ваыва;3;asda [1] => [2] => [3] => ) Array (
  • => вфвфыв;2ваыва;3;asda [1] => [2] => [3] => ) Array (
  • => вфвфыв;2ваыва;453;ва [1] => [2] => [3] => ) Array (
  • => вфвфыв;2ваыва;453;ва [1] => [2] => [3] => ) Array (
  • => вфвфыв;2ваыва;45;ва [1] => [2] => [3] => ) Array (
  • => вфвфыв;2ваыва;45;ва [1] => [2] => [3] => ) Array (
  • => вфвфыв;2ваыва;34;ываыва [1] => [2] => [3] => ) Array (
  • => вфвфыв;2ваыва;34;ываыва [1] => [2] => [3] => ) Array (
  • => вфвфыв;2ваыва;5;ва [1] => [2] => [3] => ) Array (
  • => вфвфыв;2ваыва;5;ва [1] => [2] => [3] => ) Array (
  • => вфвфыв;2ваыва;345;ыв [1] => [2] => [3] => ) Array (
  • => вфвфыв;2ваыва;345;ыв [1] => [2] => [3] => ) Array (
  • => вфвфыв;2ваыва;34;аы [1] => [2] => [3] => ) Array (
  • => вфвфыв;2ваыва;34;аы [1] => [2] => [3] => ) Array (
  • => вфвфыв;2ваыва;53;ваыва [1] => [2] => [3] => ) Array (
  • => вфвфыв;2ваыва;53;ваыва [1] => [2] => [3] => ) Array (
  • => вфвфыв;2ваыва;45;ы [1] => [2] => [3] => ) Array (
  • => вфвфыв;2ваыва;45;ы [1] => [2] => [3] => ) Array (
  • => вфвфыв;2ваыва;34;ва [1] => [2] => [3] => ) Array (
  • => вфвфыв;2ваыва;34;ва [1] => [2] => [3] => ) Array (
  • => вфвфыв;2ваыва;5;ываыва [1] => [2] => [3] => ) Array (
  • => вфвфыв;2ваыва;5;ываыва [1] => [2] => [3] => ) Import done


В базе всё равно крякозябры, в жумле на фроннтенде тоже самое.
Ничего не понимаю
*

noszone

  • Захожу иногда
  • 59
  • 2 / 0
  • Люблю Жумлу и ненавижу...
Re: Скрипт импорта файла csv в MySql базу
« Ответ #9 : 18.10.2010, 15:21:14 »
Разве Виндоувсу не всё равно? Независимо от редактора (блокнот, Word пад,ворд) он сохраняет в утф 16 я читал. Получается база виновата? А чем утф-8 ей не нравиться..
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
Re: Скрипт импорта файла csv в MySql базу
« Ответ #10 : 18.10.2010, 15:26:03 »
noszone, СОВСЕМ не всё равно.
ставь notepad++
смотри в какой кодировке у тебя база.
файл скрипт сохраняй строго как utf, файл, который ВЫВОДИТ из базы тоже должен содержать хаголовок в utf
*

noszone

  • Захожу иногда
  • 59
  • 2 / 0
  • Люблю Жумлу и ненавижу...
Re: Скрипт импорта файла csv в MySql базу
« Ответ #11 : 18.10.2010, 15:51:21 »
SHOW VARIABLES LIKE "character\_set\_database"; = утф 8
сравнение - утф -8
Все файлы скрипта и компонента вывода данных в таблицу на фронт - перевёл в утф-8.
При експорте из базы блокнот ++ показывает утф 8

Что ещё осталось сделать? Наверное ещё дома полазию на денвере, там всё пашет, только куда скорее всего копать?
*

maxsell

  • Новичок
  • 2
  • 0 / 0
Re: Скрипт импорта файла csv в MySql базу
« Ответ #12 : 22.03.2011, 14:38:24 »
добрый день уважаемые
Объясните где ошибка есть вот такой скрипт для загрузки csv в базу
Код
<?php
if (isset($f_file))
 {
  include("php/db.php");
  mysql_query("truncate table `hyundai`");
  $fp=fopen($f_file,"r");
  while(!feof($fp))
   {
    $arrstr=fgets($fp, 2000);
    $arr=explode(";",$arrstr);
    $prc=str_replace(",",".",$arr[4]);
    if ($arr[4]!="")
     {
      if ($arr[3]=="0") {$avail="n";} else {$avail="y";}
      $arr[1]=str_replace(" ","",$arr[1]);
      $arr[2]=strtolower($arr[2]);
      mysql_query("insert into `hyundai`(`cat`, `name`, `price`, `currency`, `available`) values('$arr[1]', '$arr[2]', '$prc', '$arr[5]', '$avail')");
      echo(mysql_error());
     }
   }
  fclose($fp);
  echo("Файл успешно загружен в базу данных.<br>");
 }
?>
в базе создал таблицу hyundai

текст в csv файле такой
Код
96407485/TA2068;Наконечник рулевой лев;644,00
96407486/TA2069;Наконечник рулевой прав;644,00
94580547;Направляющая выжимного подшипника Lanos Aveo;193,20
96350526;Направляющий ролик Laccetti  1,4  1,6;1035,00
96930074;Насос водяной =96352650;2346,00
96518977;Насос водяной =96666219;1545,60
96352650/Febi17507;Насос водяной =96930074;1706,60
94535236;Опорный подшипник Lacetti;368,00
96518121;Отбойник амортизатора Matiz;126,50
*

maxsell

  • Новичок
  • 2
  • 0 / 0
Re: Скрипт импорта файла csv в MySql базу
« Ответ #13 : 22.03.2011, 23:26:22 »
хелп
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

php скрипт для вызова url адреса открытой страницы

Автор bigrash

Ответов: 10
Просмотров: 6900
Последний ответ 17.02.2024, 20:12:05
от Vastriet
Ошибка при загрузке модулей:MySQL server has gone away

Автор svskach

Ответов: 13
Просмотров: 6591
Последний ответ 31.01.2018, 10:56:15
от Evrokub
два файла htaccess

Автор panzerfater

Ответов: 0
Просмотров: 1778
Последний ответ 24.11.2017, 16:31:54
от panzerfater
Не видно ссылок на скачивание файла

Автор maximi

Ответов: 5
Просмотров: 2048
Последний ответ 23.10.2017, 21:21:30
от SeBun
Вместо главной страницы - содержимое файла корневого каталога index.php

Автор Igoritaly

Ответов: 2
Просмотров: 2157
Последний ответ 10.08.2017, 17:03:57
от Gosha5767