0.00
Рейтинг
0.02
Сила

Александр Фомичев

  • avatar umanuma
  • 0
*поправка: часть 8 вместо 7.
  • avatar umanuma
  • 0
Уточню: надо и часть 6 посмотреть с php и 7 c memcached? Или толко настройки memcached в 7й части? Дело осложняется тем, что там выкладки под *nix, а у меня wamp и так просто на него APC не запилишь. Я уж думаю, не бросить ли все и уехать на хостинг. Но, опасаюсь, имеющийся виртуальный хостинг не шибко будет круче.
  • avatar umanuma
  • 0
Эм… Давайте разбираться. APC — это Alternative PHP Cache? Если стоит, то неочевидно для меня. XCache тоже вроде бы нигде не упоминается в конфиге. Сейчас тестирую на OpenServer: Apache/2.4.6, PHP 5.3.27, MySQL 5.5.33 (InnoDB), включен Memcached 1.4.5

php-fpm я надеюсь?
а как узнать точно? в phpinfo ни «fpm», ни «fastcgi» не употребляется.
  • avatar umanuma
  • 0
На тот момент да. Я просто взял цифры из поста. Вот сейчас
$config['sys']['cache']['type']   = 'memory'; 
такие цифры:
MySql
query: 4
time: 0 	
Cache
query: 41
— set: 1
— get: 21
time: 0.04688 	
PHP
time load modules: 0.984
full time: 2.016


И, кстати, все равно 0.04688 > 0.
И все равно, около секунды куда-то уходит, помимо перечисляемых потребителей.
  • avatar umanuma
  • 0
Если у вас скажем такая страница генерируется 2 секунды, то база там будет занимать не больше 25% общего времени и даже если вы уберете базу в ноль — на общем времени генерации эффект не будет особо заметен.
Примерно понял. Но вот цифры-то поменялись? В конфиге уже был
innodb_flush_log_at_trx_commit = 2

Я добавил только
innodb_locks_unsafe_for_binlog    = 1
и цифра общего времени упала до 1,6 сек.

Тогда вернулись с чего начинали, если это не БД, тогда что? Причем да, меня удивляло, что в цифрах в футере MysQL time: 0.109, Cache time: 0.14063, PHP time load modules: 1.125, а full time: 2.688. То есть, 0.109+0.14063+1.125 = 1.37463 != 2.688 Куда-то уходят еще 1.31337 сек.

И 1.125 сек на php на пустой странице? Это нормально?
  • avatar umanuma
  • 0
(хоть смена типа не помогла, спрошу на будущее) А вот если бы с myisam работало бы быстрее, можно ли было разрабатывать на ней, а потом при переезде на хостинг конвертировать это все в innodb и продолжать работать?

Еще пишут, что разница в нагрузочных характеристиках проявляется уже при довольно высоких значениях кол-ва посетителей. Можно ли без проблем конвертировать базу при достижении этих чисел?
  • avatar umanuma
  • 0
А как должно быть заточено железо? 2ГГц, 2Гб оперативки (может быть, не очень быстрый диск, это да). Или есть какая-то принципиальная разница?
  • avatar umanuma
  • 0
innodb-flush-log-at-trx-commit    = 2
уже было, только в формате
innodb_flush_log_at_trx_commit = 2

Стали появляться цифры 1,6-2,1 вместо 2,1-2,6 но на некоторых страницах все равно вылетает и 4,6. Но 1,6 уже лучше (:

Вот весь конфиг innodb:
innodb_data_home_dir = "%dprogdir%\\userdata\\%mysql_driver%"
innodb_data_file_path = ibdata1:10M:autoextend
innodb_read_io_threads=4
innodb_write_io_threads=4
innodb_buffer_pool_size = 20M
innodb_additional_mem_pool_size = 1M
innodb_log_file_size = 64M
innodb_log_buffer_size = 1M
innodb_log_files_in_group = 2
innodb_max_dirty_pages_pct = 90
innodb_flush_log_at_trx_commit = 2

innodb_locks_unsafe_for_binlog    = 1

innodb_lock_wait_timeout = 30
innodb_thread_concurrency=4
#innodb_force_recovery=1
#innodb_file_per_table = 1
#innodb_fast_shutdown
#skip-innodb_doublewrite
  • avatar umanuma
  • 0
Отключал кеширование, и написал об этом в первом пункте (когда менял еще тип кеша). Не помогло. И вот только что еще раз перепроверил — то же самое.

Насчет InnoDB/MyISAM. Я просто попробовал варианты, которые нагуглил тут на сайте. Кому-то смена типа на myisam как раз помогла, хотя да, все говорят, что целостность-безопасность-итп.
  • avatar umanuma
  • 0
Зачем что? Не все равно? Опасаюсь, что не правильно понял вопрос. Не все ли равно на время загрузки? Нет, не все равно. 2-7 секунд на загрузку любой, каждой (!) страницы. Это же сколько времени придется просидеть перед компом втупую ожидая загрузки. А при отладке, например, css — не мне вам рассказывать сколько раз приходится обновлять страницу.
  • avatar umanuma
  • 0
Спасибо за ответ и ссылку, обязательно попробую, хоть даже в качестве исключения вариантов. Но все-таки интересно было бы узнать перед такой радикальной переменой сервера, неужели никто не отлаживает на локальных машинах и под виндой? Сразу на хостинг? Просто если эти цифры нормальны, тогда всё, хостинг/nginx. Но если нет — то значит что-то настроено не так.
Просто мысль про сквозную регистрацию в ЛС, если под другим углом посмотреть. Это ж получится такой распределенный ЖЖ, точнее, распределенные сообщества. Интересная, кстати, идея.
Какой у вас опыт написания сайтов? От этого зависит ответ.
Если перед /head, то файл header.tpl и Header.light.tpl (или хук html_head_end), Файлы уникальны в шаблоне — какой шаблон используете, в том и правьте.
Поправьте меня, знающие люди, если я ошибаюсь.

По-хорошему, можно написать плагин, который вставляет код статистики перед </body>, повесив его на хук template_body_end.

По-простому, можно отредактировать файл шаблона footer.tpl.
Как искать. Открываете любой Total Commander с возможностью поиска файлов с текстом. Ищете строку
livestreet.ru/blog/dev_livestreet/113.html

Он найдет вам языковые файлы russian.php и english.php, где эта строка присваивается переменной, как указано комментом выше:
'topic_link_create_url_notice' => 'Например, livestreet.ru/blog/dev_livestreet/113.html',

Повторяете процедуру, но теперь ищете, где используется сама переменная topic_link_create_url_notice. Находятся два файла, кроме уже найденных.

Файл templates\skin\%skin_title%\actions\ActionLink\add.tpl
Строки 50 для new и 53 для developer:
<span class="form_note">{$aLang.topic_link_create_url_notice}</span></p>
Ну это самый жесткий и очевидный способ, но, как минимум, код
{if $sMenuHeadItemSelect=='wiki'}class="active"{/if}

избыточен, ибо просто добавляет класс к элементу при соответствующем значении переменной, полученной (assign, если правильно понимаю) из скрипта. А скрипта-то (экшена системы) по указанному адресу может и не быть.
А расскажите про хостинг для этого проекта, пожалуйста.
Выше я указал не совсем правильный путь. Чтобы сделать вывод топиков, а не комментов, надо маленько порыться в коде. В этом комменте более подробно: livestreet.ru/blog/7245.html#comment105194
Вы ведь имеете в виду блок «Прямой эфир»?

Тогда предложу вот так, т.к. проверил и работает, но объяснить толково последний этап не смогу. Найдено методом мультиметра.

Итак, идем в файл шаблона: \templates\skin\new\block.stream.tpl

<div class="block stream">

	<div class="tl"><div class="tr"></div></div>
	<div class="cl"><div class="cr">
					
		<h1>{$aLang.block_stream}</h1>
					
		<ul class="block-nav">						
			<li><strong></strong><a href="#" id="block_stream_topic" onclick="lsBlockStream.toggle(this,'topic_stream'); return false;">{$aLang.block_stream_topics}</a></li>
			<li class="active"><a href="#" id="block_stream_comment" onclick="lsBlockStream.toggle(this,'comment_stream'); return false;">{$aLang.block_stream_comments}</a><em></em></li>
			{hook run='block_stream_nav_item'}
		</ul>					
					
		<div class="block-content">
			{literal}
			<script language="JavaScript" type="text/javascript">
				var lsBlockStream;
				window.addEvent('domready', function() { 
					lsBlockStream=new lsBlockLoaderClass();
				});
			</script>
			{/literal}					
					
			{$sStreamComments}

			</div>
		</div></div>
		<div class="bl"><div class="br"></div></div>
	</div>

Комментируем десятую строку (ну или удаляем ее), вот эту:
<li class="active"><a href="#" id="block_stream_comment" onclick="lsBlockStream.toggle(this,'comment_stream'); return false;">{$aLang.block_stream_comments}</a><em></em></li>


Теперь у нас пропала кнопка с комментами, но они по-прежнему грузятся в эфире. Идем дальше. В этом же файле ищем 24-ю строку с надписью
{$sStreamComments}

Меняем ее на
{$sStreamTopic}

Теперь, откуда же нам взять эту самую sStreamTopic?

Идем в файл \classes\blocks\BlockStream.class.php
И видим там следующее:
class BlockStream extends Block {
	public function Exec() {
		if ($aComments=$this->Comment_GetCommentsOnline('topic',Config::Get('block.stream.row'))) {
			$this->Viewer_Assign('aComments',$aComments);
			$sTextResult=$this->Viewer_Fetch("block.stream_comment.tpl");
			$this->Viewer_Assign('sStreamComments',$sTextResult);
		}
	}
} 


Путем нехитрых манипуляций (метод мультметра, сравнение файлов \include\ajax\stream_topic.php и \include\ajax\stream_comments.php) переназначаем в указанном файле переменные для шаблона. Приходим к
class BlockStream extends Block {
	public function Exec() {
		if ($oTopic=$this->Topic_GetTopicsLast(Config::Get('block.stream.row'))) {
			$this->Viewer_Assign('oTopics',$oTopic);
			$sTextResult=$this->Viewer_Fetch("block.stream_topic.tpl");
			$this->Viewer_Assign('sStreamTopic',$sTextResult);
		}
	}
}


В итоге остается одна кнопка («Публикации»), которую неплохо бы переоформить (она же придумана как переключатель, а теперь переключать нечего), и при нажатии на которую обновляется поток топиков.