Как сделать так чтобы сайт работал реально быстро?

oleg1979
На сайте с 23.07.2010
Offline
187
6361

Есть два сайта, один из них на webassyst shop-script, второй на Umi.

Сначала оба сайта висели на ру-центре, но из-за глюков Umi на нем, решил перевесить на свой VDS от Трувдс.

Думал что все будет летать.. Но в итоге тот сайт что на webassyst - стал работать быстрее, а сайт на Umi стал работать медленнее, страница открывается по несколько секунд (3-8 секунд)..

Параметры VDS: 512 оперативки, все нужные настройки для Umi есть. Кэширование на VDS отключено (был memcache - но после глюков и зависаний отключили, разницы не заметил). В самом Umi есть кэширование, которое позволяет не создавать каждый раз заново страницу, а выдавать ее из памяти, но оно не подходит, т.к. сайт постоянно обновляет товары (анкеты репетиторов) и они должны быть сразу в поиске.

Нынешние разработчики, которые допиливают мне сайт утверждают что проблема в моем медленном VDS, сисадмин который устанавливал сайты на VDS говорит что маловато памяти. Техподдержка трувдс считает что нужно экспериментировать с настройками VDS и сайта, но оценивает эту работу от 3 тыс. руб. и никакого результата не гарантирует.

Вопрос - что нужно сделать чтобы сайт на Umi летал и можно ли это сделать так чтобы не тратиться на собственный выделенный сервер? Может ли все же быть проблема в настройках сервера или кривых руках разработчиков?

Консультирую по всем вопросам, связанным с запуском интернет-магазина
FI
На сайте с 15.12.2010
Offline
27
#1

http://sunnyvilla.ru/

58 requests ❘ 368.24KB transferred ❘ 1.7min (onload: 14.71s, DOMContentLoaded: 3.84s)

http://toprepetitor.ru/

34 requests ❘ 796.22KB transferred ❘ 49.44s (onload: 40.27s, DOMContentLoaded: 33.46s)

Я бы убил того, кто делал Вам сайты. Посмотрите на вес - это форменное издевательство над пользователем.

Начните хотя бы с оптимизации клиент кода и запихайте изображения в спрайты.

oleg1979
На сайте с 23.07.2010
Offline
187
#2

Fried_Ice, я к сожалению в приведенных вами цифрах мало понимаю, вижу одно:

http://sunnyvilla.ru/ у меня открывается очень быстро и загружается быстро. По нему причем уже были работы по оптимизации кода и картинок.

http://toprepetitor.ru/ у меня открывается от 4 секунд и дольше, другие люди пишут что ждут и по 20 секунд. Вот как бы это очень сильно напрягает, т.к. на этот проект у меня были идеи еще несколько завязать.

Чтобы вы посоветовали сделать конкретнее?

На сколько я понимаю, проблема сейчас не в медленной отдаче VDS, а в том что движок очень долго сформировывает страницу. При этом эксперименты с увеличением памяти на VDS дали двукратный прирост скорости работы. Но это явно тупиковый путь - все решать деньгами = тарифным планом.

bsyomov
На сайте с 25.01.2012
Offline
31
#3
oleg1979:

На сколько я понимаю, проблема сейчас не в медленной отдаче VDS, а в том что движок очень долго сформировывает страницу. При этом эксперименты с увеличением памяти на VDS дали двукратный прирост скорости работы. Но это явно тупиковый путь - все решать деньгами = тарифным планом.

Довольно часто, решить проблему железом дешевле, даже на длительной перспективе, чем производить оптимизацию приложения. В вашем случае, неплохо было бы сделать профилирование, найти узкое место и там уже решать, насколько трудоёмким будет процесс оптимизации.

Отпишитесь в личку или в скайп, расскажете подробнее о том, как сконфигурирован сейчас VPS, и что происходит в момент загрузки страницы второго сайта с нагрузкой - возможно смогу дать вам несколько полезных советов.

G
На сайте с 19.03.2011
Offline
42
#4

Вот что о сайте говорит Page Speed

Сжатие следующих ресурсов посредством gzip позволит уменьшить их размер для переноса на 428.2Кб (на 71%).
Сокращение следующих ресурсов JavaScript позволит уменьшить их размер на 155.0Кб (на 28%).

При начальной загрузке страницы выполняется синтаксический анализ JavaScript в объеме 404.4Кб. Чтобы ускорить отображение страницы, отложите синтаксический анализ JavaScript.

DV
На сайте с 01.05.2010
Offline
644
#5
Нынешние разработчики, которые допиливают мне сайт утверждают что проблема в моем медленном VDS, сисадмин который устанавливал сайты на VDS говорит что маловато памяти. Техподдержка трувдс считает что нужно экспериментировать с настройками VDS и сайта

Непонятно, чего вы от CMS хотите. Все вам говорят, что VDS слабый. Берите более дорогой тариф, либо ищите сисадмина-виртуоза, который обойдётся ещё дороже.

VDS хостинг ( http://clck.ru/0u97l ) Нет нерешаемых задач ( https://searchengines.guru/ru/forum/806725 ) | Перенос сайтов на Drupal 7 с любых CMS. ( https://searchengines.guru/ru/forum/531842/page6#comment_10504844 )
bsyomov
На сайте с 25.01.2012
Offline
31
#6
Ganga:
Вот что о сайте говорит Page Speed

На самом деле, это полезно, но очень мало поможет в случае этого конкретного сайта на этом конкретном хостинге. Там наибольшее время 2-4c, занимает генерация самой страницы, всё остальное вносит уже довольно небольшой вклад.

S3
На сайте с 03.03.2006
Offline
91
#7

Решил не начинать новую тему, поскольку интересующий меня вопрос здесь затронули.

При начальной загрузке страницы выполняется синтаксический анализ JavaScript в объеме 404.4Кб. Чтобы ускорить отображение страницы, отложите синтаксический анализ JavaScript.

Подскажите кто-нибудь, как это сделать?

Погуглив находил такие советы:

Можно запустить скрипт через некоторое время после загрузки документа:

<script type="text/javascript">
function onLoadScript () {
var scri = document.createElement('script');
scri.src = '<путь к файлу>';
document.body.appendChild(scri);
}
window.onload = function () {setTimeout(onLoadScript, <количество миллисекунд после загрузки документа>)}
</script>

только так и не понял, куда это вставить

Вот так еще можно

$(document).ready(function() {
var _gaq = _gaq || [];
_gaq.push([ '_setAccount', '---' ]);
_gaq.push([ '_trackPageview' ]);
(function() {
var ga = document.createElement('script');
ga.type = 'text/javascript';
ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
})();
});

аналогично...

Однако, есть и хорошие новости. Загрузку можно делать асинхронно. Например, следующим способом:
Код:

(function() {
function async_load(){
var s = document.createElement('script');
s.type = 'text/javascript';
s.async = true;
s.src = ';
var x = document.getElementsByTagName('script')[0];
x.parentNode.insertBefore(s, x);
}
if (window.attachEvent)
window.attachEvent('onload', async_load);
else
window.addEventListener('load', async_load, false);
})();

Если коротко, то суть сводится к добавлению тега script динамически. Такой хак позволяет браузеру заниматься своими делами, загружая скрипт параллельно на фоне.

В далеком и светлом будущем (т.е. когда все будут чтить HTML5), можно использовать способ проще:
Код:

<script async="async" type="text/javascript" src=""></script>

Но пока придётся обходиться хаками.

Сам гугл предлагает такое:

<script type="text/javascript">

// Add a script element as a child of the body
function downloadJSAtOnload() {
var element = document.createElement("script");
element.src = "deferredfunctions.js";
document.body.appendChild(element);
}

// Check for browser support of event handling capability
if (window.addEventListener)
window.addEventListener("load", downloadJSAtOnload, false);
else if (window.attachEvent)
window.attachEvent("onload", downloadJSAtOnload);
else window.onload = downloadJSAtOnload;

</script>

Пробовал вставлять в <head>, но что-то толку никакого не было.

Буду очень благодарен за дельный совет.

Ссылки в статьях (https://goo.gl/fblE5U), ссылки в обзорах (https://goo.gl/nxca5z). Кэшбэк (ali6.ru). Партнерка (http://alicb.ru/wm) Aliexpress для вебмастеров.
DiAksID
На сайте с 02.08.2008
Offline
236
#8

для начала стоит сделать хотя бы так, как Boilerplate предлагает: в head загружать только скрипты, влияющие на DOM непосредственно (selectivizr, modernizr, ...) и/или необходимые для работы CSS (modernizr, ...), а остальные скрипты, начиная с jQuery, поместить в самый конец перед </body>.

ну и, есссесссно, все счётчики/метрики загружать из скрипта асинхронно и с defer, а не из тела страницы, ибо нефиг...

show must go on !!!...
Ayavryk
На сайте с 11.10.2003
Offline
209
#9

У вас два запроса в одном.

Серверная оптимизация - это одно. Клиентская - другое.

По серверной части ищите где можно кэшировать. Причем все, начиная от страницы целиком, до мелких блоков. Т.е. вы можете сжать карточки товаров и не не тратить время на лишние запросы к БД для детализации различных карточек представленных на одной странице. Есть такой механизм в ваших cms или нет не знаю.

По клиентсткой у вас, извините ,жопа. Из того что на поверхности:

1) Сжимайте JS и CSS для этого есть куча инструментария. Причем JS нужно сжимать каким-нибудь инструментом типа http://closure-compiler.appspot.com/home, независимо от того будете или не будете использовать серверное сжатие. Про серверное сжатие не скажу. Не знаю. С одной стороны снизит нагрузку за счет меньшего кэша, с другой увеличит нагрузку за счет включения механизма. Но м.б. стоит попробовать и оценить.

2) Просмотрите внимательно все ли скрипты вам нужны одновременно. Пример:

На главной странице http://sunnyvilla.ru/ я не вижу чего-то такого, для чего необходимо грузить 108К скриптов на 14 загрузок. Может я что-то пропустил? Даже если я это пропустил, то 14 загрузок - это очень круто. Должна быть одна или две. Одна общая для всех и одна для каких-то специфических функций конкретной страницы.

А вот здесь http://toprepetitor.ru/ - вы отдаете юзеру несжатый tiny_mce_src.js весом 300К на всех страницах, это в несколько раз больше веса контента на странице вместе со стилями. Подозреваю что это ошметок от бэкофиса CMS. Если я ошибаюсь и кому-то пришло в голову позволить юзерам пользоваться визивигом, оторвите эту голову. Если нет возможности оторвать голову, сделайте ее загружаемой динамически - по запросу. Когда понадобится, тогда и грузите. А пока не понадобилась никому не показываете.

В любом случае эта гадость здорово тормозит загрузку контента вашей страницы.

3) Тоже что написано выше относится и к CSS. 3-5 несжатых файлов нужно слить в один-два и сжать.

4) там выше уже написали. Все скрипты которые не влияют на дизайн (таких вообе-то не должно быть) должны быть перенесены в самый конец HTML, чтобы сначала грузился контент, а затем все прочее. В принципе то же самое можно сделать и с картинками - грузить их после того как будет загружен текст и разметка.

Делать ли то же самое со счетчикам - открытый вопрос. Я их всегда ставлю в конец. Это снижает статистику, но зато не мешает загрузке.

5) Посмотрите http://webo.in/ там был сервис, который давал подробные рекомендации по оптимизации с объяснением какой выирыш это дает. И кроме того там есть подбор литературы.

Тынгыр, мынгыр, комсомол (http://erum.ru). Ехари, ехари, (жалобно) аяврик. /народная тунгусская песня/

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий