За последние 24 часа нас посетили 17747 программистов и 1658 роботов. Сейчас ищут 947 программистов ...

Познакомьтесь с Ajaxel CMS!

Тема в разделе "Подворотня", создана пользователем ajaxel, 17 сен 2013.

  1. noganno

    noganno Новичок

    С нами с:
    26 авг 2013
    Сообщения:
    58
    Симпатии:
    0
    У автора только болтовня, где код? ты хоть посмотри на yii, все красиво и функционально, широкое сообщество, ничего не скрывается.
     
  2. ajaxel

    ajaxel Новичок

    С нами с:
    17 сен 2013
    Сообщения:
    31
    Симпатии:
    0
    А сколько у битрикса нагрузка, сколько у джомлы? Я сегодня был целый день занят, не думал что память играет столь важную роль. Пасиба. Сейчас готово всё. Теперь жрёт ы 2 раза меньше. Скрыл много ф-ии и что часто не используются. И вуаля:
    Код (Text):
    1. Site memory usage: 8.50 MB
    2. Total memory usage: 9.00 MB
    3. Database time: 0.0900s
    4. Database accesses: 13
    5.  Page load: 0.1500s
    6. Files included: 44
    7. Files size: 730.88 KB
    С кешем вообще 5 мег только будет и 3 соединения с базой.. Больше сжимать уже некуда. Всё сжато! С выходом версии 6.5 всё будет по новому. Наглядно оставил на http://ajaxel.com снизу, посмотрите там инфу и какие соединения и файлы подключаются.

    Какой код мне тут вам показывать? Прямо сюда на форум и пихать? Причём тут yii и моё самолюбие? Ладно знаю.. у меня оно есть, я же лев.. Не было бы самолюбия не было бы мотива делать всё это. У меня отличные идеи и написал это.. Для вас же! А вы лишь бы покритиковать.. Но я задумался и понял что всё что меня не убивает делает только сильнее, благодаря вам. Я сделаю всё что вы сочтёте нужным. Может я где то чтото упустил, поэтому я здесь.

    Добавлено спустя 5 минут 59 секунд:
    правда пямять у coopertino почему то больше хавает.. у меня на локалке так щас показывает 9мег.
    Не кэшированная страница http://ajaxel.com/reset, посмотрите правильно ли всё? сойдёт? или ещё сжимать? целый день менял ядро, сжимал и ещё прикрутил
    Код (Text):
    1.  
    2. spl_autoload_register('ajaxel_autoloader');
    3. function ajaxel_autoloader($class) {
    4.     if (is_file(FTP_DIR_ROOT.'inc/'.$class.'.php')) {
    5.         require_once FTP_DIR_ROOT.'inc/'.$class.'.php';
    6.         Site::mem($class.'.php load');
    7.     }
    8.     elseif (is_file(FTP_DIR_ROOT.'mod/'.$class.'.php')) {
    9.         require_once FTP_DIR_ROOT.'mod/'.$class.'.php';
    10.         Site::mem($class.'.php load');
    11.     }
    12. }
    вот.. крутая штука

    Добавлено спустя 5 минут 27 секунд:
    Кстате про битрикс:

    https://github.com/hunterman/bxzender/wiki/Bitrix-facts

    Добавлено спустя 25 минут 50 секунд:
    [​IMG]
    что у меня на локалке c пустым шаблоном
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    150 ms это долго для страницы, которой ты гордишься. на 13-то запросов в бд.
    что там за страница такая нагруженная?
     
  4. ajaxel

    ajaxel Новичок

    С нами с:
    17 сен 2013
    Сообщения:
    31
    Симпатии:
    0
    [​IMG]
    Ничего особенного. Достаю нужные данные для сайта.

    Я написал движок, или вам нужен пустой index.php файл? Так напиши себе Игорь echo 'I am stupid'; и любуйся а затем ударься головой об монитор. Пасиба!
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Да-да...

    count(1) это что за фокус?
     
  6. ajaxel

    ajaxel Новичок

    С нами с:
    17 сен 2013
    Сообщения:
    31
    Симпатии:
    0
    думаешь count(*) лучше? * - это взять всё. 1 взять буул.. то есть если существует. а звёздочка я полагаю будет выбирать все столбцы, что совсем ненужно для подсчёта количества рядов.

    Технология, учись, студент!

    Добавлено спустя 11 минут 18 секунд:
    коли вам так нравится код, пожалуй я поделюсь с вами своей заработкой
    Код (PHP):
    1.     public static function getAll($sql,$sel=false,$func=false) {
    2.         self::on();
    3.         $result = @mysql_query($sql,self::$DB[self::$nDB]);
    4.         if ($result===false) {
    5.             self::error($sql);
    6.         }
    7.         $ret = array();
    8.         if ($sel) {
    9.             if (strstr($sel,'|')) {
    10.                 $ex = explode('|',$sel);
    11.                 if ($ex[1]=='[[:ARRAY:]]') {
    12.                     while($row = mysql_fetch_assoc($result)) {
    13.                         $k = $row[$ex[0]];
    14.                         if ($func) $row = call_user_func_array($func,array($row));
    15.                         $ret[$k] = $row;
    16.                     }            
    17.                 } 
    18.                 elseif ($ex[1]=='[[:EMPTY:]]') {
    19.                     while($row = mysql_fetch_assoc($result)) {
    20.                         $ret[$row[$ex[0]]] = '';
    21.                     }
    22.                 }
    23.                 elseif ($ex[0]=='[[:INDEX:]]') {
    24.                     while($row = mysql_fetch_assoc($result)) {
    25.                         if ($func) $ret[] = call_user_func_array($func,array($row[$ex[1]]));
    26.                         else $ret[] = $row[$ex[1]];
    27.                     }
    28.                 }
    29.                 else {
    30.                     while($row = mysql_fetch_assoc($result)) {
    31.                         if ($func) $row = call_user_func_array($func,array($row));
    32.                         $ret[$row[$ex[0]]] = $row[$ex[1]];
    33.                     }
    34.                 }
    35.             } else {
    36.                 while($row = mysql_fetch_assoc($result)) {
    37.                     if ($func) $row = call_user_func_array($func,array($row));
    38.                     array_push($ret,$row[$sel]);
    39.                 }
    40.             }
    41.         } else {
    42.             while($row = mysql_fetch_assoc($result)) {
    43.                 if ($func) $row = call_user_func_array($func,array($row));
    44.                 array_push($ret,$row);
    45.             }
    46.         }
    47.         self::off(true,$sql);
    48.         if (self::errorMsg()) {
    49.             self::$err = true;
    50.             return false;    
    51.         }
    52.         if ($ret && strstr($sql,'SQL_CALC_FOUND_ROWS')) $ret['FOUND_ROWS()'] = DB::one('SELECT FOUND_ROWS()');
    53.         if (Site::$db_sql) self::fill($sql,$result);
    54.         self::free($result);
    55.         self::yeserror();
    56.         return $ret;
    57.     }
    58.  
    не думаю что следует комментировать зачем это всё. Всё вот так вот у меня в двигле, и нигде такой крутизны вы больше не найдёте. Я сам все движки пересмотрел и могу сказать что всё они барахло для тех кому времени и нервов не жалко... я сделал всё исключительно во благо всем. Всё продумал и максимально удобно для всех соорудил..

    Добавлено спустя 3 минуты 2 секунды:
    В вот ещё одна мудрёная..
    Код (PHP):
    1.     public static function insert($table, $data, $replace = false, $cols_only = false) {
    2.         if (!$data) return false;
    3.         $_data = array();
    4.         if ($cols_only===true) {
    5.             foreach ($data as $k => $v) {
    6.                 $_data[$k] = self::string($v);
    7.             }
    8.         } else {
    9.             if (!$cols_only) $cols = self::columns($table);
    10.             foreach ($data as $k => $v) {
    11.                 $_k = ltrim($k,'.');
    12.                 if (!$cols_only && !in_array($_k, $cols)) continue;
    13.                 if ($cols_only && !in_array($_k,$cols_only)) continue;
    14.                 $_data[$_k] = self::string($v, (substr($k,0,1)=='.' ? false : true));
    15.             }
    16.         }
    17.         if (!$_data) {
    18.             return false;
    19.         }
    20.         $_table = self::prefix($table);
    21.         if (self::$lock) self::run("LOCK TABLE $_table WRITE");
    22.         $sql = ($replace?'REPLACE':'INSERT').(self::$delayed?' DELAYED':(self::$ignore?' IGNORE':'')).' INTO `'.$_table.'` (`'.join('`, `',array_keys($_data)).'`) VALUES ('.join(', ',array_values($_data)).')';
    23.         self::delayed(false);
    24.         self::ignore(false);
    25.         self::no_prefix(false);
    26.         $ret = self::run($sql);
    27.         if (self::$lock) self::run('UNLOCK TABLES');
    28.         return $ret;
    29.     }
    30.  
    Сами бы вы не додумались даже! Ещё пи-здите!
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    каменный век, чесслово
     
  8. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    пищи исщё.
    больше... больше грязных подробностей ))
     
  9. Ke1eth

    Ke1eth Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    1.073
    Симпатии:
    11
    Адрес:
    заблудилса
    Слушай, а давай без этой идиотии...
    Ты-же сам подтверждаешь, что нихрена ты не смотрел. Ну а про заявления о барахле - отдельные 3 раза ха.
    Про нервы и время: да, если тебе лень читать документацию и включать голову, чтобы посмотреть на то, как оно должно работать (потому и плодят кучи кривых модулей, ведь это пишу Я - это МОЙ модуль, Я один прав остальные так, поссать зашли).
    Вот не поленюсь померю сегодня Джумлу.

    P.S. На словах - ты Лев Толстой.
     
  10. Ke1eth

    Ke1eth Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    1.073
    Симпатии:
    11
    Адрес:
    заблудилса
    [​IMG]

    Без кэша, без оптимизаций, ибо стадия активной разработки.
    Это самая тяжелая страница (главная, куда заказчик вывалить решил информацию почти отовсюду).
     
  11. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Автор...блин..ну вот было просветление адекватности же. Прям как будто другой человек писал. И тут бац - опять Остапа понесло. Одергивай себя как только захочется собой погордиться. Если что-то достойно похвалы, люди похвалят сами. Если нахваливаешь сам, это сразу рождает сомнения и пренебрежение.

    Но по крайней мере взялся за голову - 5 метров памяти уже сэкономлено. Двигайся дальше. Тут все очень просто. Сколько бы ни было - это очень много. Можно меньше. Хорошо оптимизированный продукт - это когда самые слабые места у тебя упираются в сам PHP.

    Добавлено спустя 1 минуту 30 секунд:
    Слух...ну со временем что-то не то совсем. Очень уж долго.

    Добавлено спустя 1 минуту 46 секунд:
    4 метра на инициализацию..метр на роутинг, метр на диспетч..что-то там не то. Копай.
     
  12. Ke1eth

    Ke1eth Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    1.073
    Симпатии:
    11
    Адрес:
    заблудилса
    не на сервере ибо, а на рабочей машинке, а на мне много сервисов крутится, и плюс совпало с запуском phpStorm'а.
    Селява )

    Про роутинг: дык пишу пишу, там 5 моих компонентов (ибо похожего в природе не нашлось), они еще без роутов, чичас главное функционал сделать, маршрутизацию буду писать опосля, ибо не ясно еще, чем там дело закончится.

    P.S. кстати да, слегка поглядел в базу, поплевал, там автор одного из компонентов посчитал лишним трудом индексы повешать на поля покоторым выборку проводит, у него только PK определен и все, видимо индексы они лешние - да )
     
  13. MaXyC_Web_Studio

    MaXyC_Web_Studio Активный пользователь

    С нами с:
    31 дек 2006
    Сообщения:
    678
    Симпатии:
    3
    Адрес:
    Новоуральск
    пздц. глянул getAll и как будто в жопу дьяволу заглянул
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Ребят, давайте подробнее по выложенному коду более предметно высказываться.
     
  15. MaXyC_Web_Studio

    MaXyC_Web_Studio Активный пользователь

    С нами с:
    31 дек 2006
    Сообщения:
    678
    Симпатии:
    3
    Адрес:
    Новоуральск
    getAll, imho

    Код (Text):
    1. $result = @mysql_query($sql,self::$DB[self::$nDB]);
    2.     if ($result===false) {
    3.         self::error($sql);
    4.     }

    • ну во-первых, @
      во-вторых, считаю надо mysql_query (коль им пользуемся) вынести в отдельный метод
      в третьих, в этом отдельном методе сделать что то типо
      Код (Text):
      1. $result = mysql_query($sql,self::$DB[self::$nDB]); // Хотя сюда можно и or die(mysql_error()); ибо не вижу ситуации, когда на продакшне может случиться здесь ошибка. (из опыта - не было ни разу)
      2.     if (!$result)
      3.         self::error($sql);
      надеюсь в self::error есть mysql_error?

      зачем запуск колбек функции классом бд? разве "модель" занимается делами "контроллера"?

      что за пздц с $sel? можно пример использования функции/метода getall?

      что означают все эти имена методов? как понять не читая горы литры, которую вы никогда не напишите (ставлю бутылку пива)
      if (Site::$db_sql) self::fill($sql,$result);
      self::free($result);
      self::yeserror();

    Добавлено спустя 1 минуту 58 секунд:
    спасибо Yii, что ты есть!
     
  16. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    И это твоя технология? :) Разочаровал((( Уверен?
     
  17. ajaxel

    ajaxel Новичок

    С нами с:
    17 сен 2013
    Сообщения:
    31
    Симпатии:
    0
    Нет не моя конечно! Просто знаю как лучше..
    Это не MySQL_error() это сразу выдаст ошибку в красивом виде и с debug_bactrace и вышлет админу на мыло.
    Для дебагера собирает запросы, освобождает память и врубает вывод ошибки если не было DB:noerror() вам сложно будет понять думаю..

    Я ещё занималься оптимизацией и сейчас 6,25 показывает с пустым шаблоном на локалке, двигаюсь дальше конечно))

    Вот посмотрите мой последний сайт http://ru.mytrademarkets.com как быстро всё работает!

    Причём тут век, если я решил выводить ошибку с красивом виде? с детальной информацией нежели чем MySQL error бла бла и чётамдальшето почему.. всё продумано специально так..
    Хорошо я понял, больше не буду))))

    Всё ясно с тобой..
    вот есть пример для этого:
    Код (Text):
    1.  
    2. $this->dogs = DB::getAll('SELECT *, '.DB::sqlGetString('age','dob').' AS age FROM '.$this->prefix.'grid_dogs WHERE userid='.$this->UserID.' AND active=1 AND sellonly=\'0\'','id|[[:ARRAY:]]',array($this, 'retDog'));
    быстро удобно и дописывать ничего не надо..
    где:
    Код (Text):
    1.  
    2. public function retDog($row) {
    3.         $row['title'] = html($row['title']);
    4.         $row['show_name'] = html($row['show_name']);
    5.         $row['name'] = trim($row['title'].' '.$row['show_name']);
    6.         if ($row['main_photo']) {
    7.             $row['photo'] = HTTP_DIR_FILES.'grid_dogs/'.$row['id'].'/th2/'.$row['main_photo'];
    8.             $row['photo_big'] = HTTP_DIR_FILES.'grid_dogs/'.$row['id'].'/th1/'.$row['main_photo'];
    9.         }
    10.         $row['link'] = '?profile='.$row['id'];
    11.         if ($row['breed']) {
    12.             $row['breed_name'] = preg_replace('/([a-z])([A-Z])/','$1 $2',DB::one('SELECT name_en FROM '.DB_PREFIX.'breed_list WHERE id='.(int)$row['breed']));
    13.         }
    14.         $row['prof_name'] = Data::getVal('my:prof',$row['prof']);
    15.         return $row;
    16.     }
    так далее...

    Добавлено спустя 13 минут 25 секунд:
    Вдруг понадобится собрать нужный массив из данных

    Чем меньше foreach циклов тем лучше! Если уже есть цикл то почему бы не сделать всё прямо в нём.

    Добавлено спустя 43 секунды:
    меня так учили когда-то.. ))
     
  18. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    http://stackoverflow.com/questions/2710621/count-vs-count1- ... -is-better
    надо бы знать не только как лучше, но и когда лучше.

    твоё:
    Код (Text):
    1. 0.16 ms Scheduling request
    2. 0.01 ms Writing request header
    3. 0.02 ms Writing request body
    4. 255.55 ms   Waiting for response
    5. 0.05 ms Reading response header
    6. 76.63 ms    Reading response body
    7. 9.17 ms Processing response
    8. 341.60 ms   Duration
    моё http://besmarter.ru :
    Код (Text):
    1. 0.17 ms Scheduling request
    2. 0.01 ms Writing request header
    3. 0.02 ms Writing request body
    4. 19.49 ms    Waiting for response
    5. 0.04 ms Reading response header
    6. 82.19 ms    Reading response body
    7. 39.33 ms    Processing response
    8. 141.26 ms   Duration
    эксепшены юзай. mysqli_report(MYSQLI_REPORT_STRICT);
    о том и речь, что у тебя уровень продуманства застрял в каменном веке, ибо давить ошибки собаками - капец.
     
  19. ajaxel

    ajaxel Новичок

    С нами с:
    17 сен 2013
    Сообщения:
    31
    Симпатии:
    0
    да, собаками я тоже считаю что давить их не следует. Но как быть если я хочу вывести и показать весь запрос для "красивой" ошибки.. $sql запрос не передаётся в mysqli_report(MYSQLI_REPORT_STRICT); а только часть в MySQL_error этого не достаточно. И сохранять каждый запрос в памяти тоже глупо.

    Добавлено спустя 56 секунд:
    Waiting for response на каком сайте это? почему? Всегда такой стабильняк? Не прыгает?

    Добавлено спустя 36 секунд:
    От хостинга это скорее всего зависит что ты делаешь.

    Добавлено спустя 3 минуты 25 секунд:
    так как же лучше на самом деле то? COUNT(*) или COUNT(1) ?? я долго думал на самом деле по этому поводу и вот.. решил так сделать...
    там на stack пишется как то непонтно.. кто о чём говорит.

    Добавлено спустя 1 минуту 20 секунд:
    •COUNT(*) counts the number of rows
    •COUNT(1) also counts the number of rows

    also? в этом разница? я всё равно не понял)))

    Добавлено спустя 2 минуты 8 секунд:
    Собаками я больше ничего в двигле не давлю! Кроме MySQL ф-ии... Даже можно запустить весь цмс на error_reporting(E_ALL) и всё будет збз..

    Использую:

    Код (Text):
    1.  
    2. function http($http, $name, $key, $_key, $default = '') {
    3.     if ($_key) $return = ((isset($http[$key]) && isset($http[$key][$_key])) ? $http[$key][$_key] : $default);
    4.     else {
    5.         if (is_array($key)) {
    6.             $key = key($key);
    7.         }
    8.         $return = (isset($http[$key]) ? $http[$key] : $default);
    9.     }
    10.     if ($return==='[[:CACHE:]]') {
    11.         $return = Cache::getSmall($name.'('.$key.($_key?','.$_key:'').')');
    12.     }
    13.     elseif ($default==='[[:CACHE:]]') {
    14.         Cache::saveSmall($name.'('.$key.($_key?','.$_key:'').')',$return);
    15.     }
    16.     return $return;
    17. }
    18.  
    19. function get($key,$_key=false,$default = '') {
    20.     return http($_GET, 'get', $key, $_key, $default);
    21. }
    22. function post($key,$_key=false, $default = '') {
    23.     return http($_POST, 'post', $key, $_key, $default);
    24. }
    25. function files($key,$_key=false, $default = '') {
    26.     if ($_key) return ((isset($_FILES[$key]) && isset($_FILES[$key][$_key])) ? $_FILES[$key][$_key] : $default);
    27.     else return (isset($_FILES[$key]) ? $_FILES[$key] : $default); 
    28. }
    29. function request($key, $_key=false, $default = '') {
    30.     return http($_REQUEST, 'request', $key, $_key, $default);
    31. }
    32. function cookie($key, $default = '') {
    33.     return (isset($_COOKIE[$key]) ? $_COOKIE[$key] : $default);
    34. }
    Что думаете?
     
  20. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    сохраняй последний! =)

    Добавлено спустя 4 минуты 53 секунды:
    написано что если без where из одной таблицы и движок MyIsam - то Count(*).
    Если из одной таблицы, то "работает хорошо" Count(1).
    Короче, тяжко.
     
  21. ajaxel

    ajaxel Новичок

    С нами с:
    17 сен 2013
    Сообщения:
    31
    Симпатии:
    0
    незнаю count(1) у меня везде правильно работает... не было проблем!
     
  22. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Откуда знаешь? Перепроверяешь пересчитывая вручную?
     
  23. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    кури, что такое error handler. И таки да, все запросы хранить нет смысла - ошибку может выдать только последний исполненный, что логично. Ты же его в переменной передаешь куда-то там у себя? Вот и юзай его. А пока - костыли на костылях.
     
  24. ajaxel

    ajaxel Новичок

    С нами с:
    17 сен 2013
    Сообщения:
    31
    Симпатии:
    0
    Забыл упомянуть что Ajaxel имеет переменную Site::$mini которая отрубает Smarty и тд.. Можно делать шаблоны на PHP файлах. mini включается автоматически при upload и долбалке..
    Вот если при mini:
    [​IMG]
    Я всегда буду усовершенствовать движок, чем больше знаний тем лучше движок разумеется..)

    На самом деле для подсчёта кол-ва я часто использую SQL_CALC_FOUND_ROWS

    Count(1) я окей.. переделаю.. там всего лишь в одном месте: DB::getCount

    Сейчас движок хавает 6.25 Mb всё почистил) думаю это идеально для цмс.
    Есть куча настроек, смотрите config/defines.php

    Кстати вчера требовалось копернуть сайт на другой сабдомен, копернул лишь index.php, были проблемы но уже исправил, с выходом версии 6.6 будет такая вот гибкость..
     
  25. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    гибкость это другое - это когда твоя цмс является не сайтом с кастомизируемым внешним видом и пунктами в меню, а адским конструктором лего.

    Добавлено спустя 1 минуту 32 секунды:
    никогда не хвали то, что делаешь, иначе не будешь видеть недостатков. Стопудово есть еще что шевелить. А то не так давно 17 метров было идеальным. Оказалось, что 10 из них - избыточные.