С нами с 11.01.07
Сообщения: 3607
Рейтинг: 2686
|
Добавлено: 02/05/11 в 16:57 |
Не смог найти FAQ тему, поэтому создам новую.
Уже не первый раз сталкиваюсь с конструкциями вида
include('http://otherdomain/1.html');
или
virtual('/scj/top/top.html');
причем таких конструкций может быть по 10 штук на темплейт. От скрипта это не зависит, так не надо делать вообще.
Почему:
ПХП отрабатывает ДО того как серфер получает страницу. Поэтому если у вас есть include('http://otherdomain/1.html'), который находится на другом сервере вы получаете задержку в отдаче страницы. А если по какой-то причине этот другой домен еще и решил притормозить, то у вас найнет тормозить в отдаче и оригинальный домен.
Даже если otherdomain на том же серваке, то как и в случае virtual('/scj/top/top.html'), на 1 запрос к серваку у вас получается как минимум 2: 1 запрос конкретно к вашему домену + 1 запрос include('http://otherdomain/1.html') или virtual('/scj/top/top.html').
Если у вас 10 инклудов вида virtual('/scj/top/top.html') то у вас сервак на 1 реальный запрос выполняет каждый раз еще 10 подзапросов. Как это отражается на нагрузке думаю объяснять не надо.
Как надо делать:
всегда юзать только локальные инклуды. Те virtual('/scj/top/top.html') надо делать как include('/home/user/domain/scj/top/top.html');
если надо инклудить файлик с дургого домена который на том же серваке - аналогично, просто другой путь.
Если файл на другом серваке то попросить админа прописать копирование этого файла по крону на локальный домен и опять же делать локальный инклуд.
Последний раз редактировалось: LemonS (05/10/11 в 17:03), всего редактировалось 2 раз(а)
|
|
|
|
С нами с 11.01.07
Сообщения: 3607
Рейтинг: 2686
|
Добавлено: 02/05/11 в 17:46 |
еще вариант
readfile('http://domsin/1.html') - это аналогично include('http://...')
Как обработать параметры
обычно банероротаторы инклудят через JS, но некоторые локальные ротаторы требуют инклуда в темплейте и их инклудят вида
<?php
include('http://domain.com/banner.php?x=3&y=2');
?>
поскольку это не совсем хороший вариант лучше сделать так
<?php
$_GET['x'] = 3;
$_GET['y'] = 2;
include('banner.php');
?>
таким образом и параметры передать, и инклуд сделать локальным, а не через http.
|
|
|
|
С нами с 19.05.08
Сообщения: 1894
Рейтинг: 3625
|
Добавлено: 02/05/11 в 18:12 |
полезно и познавательно!
|
|
|
|
С нами с 19.05.08
Сообщения: 1894
Рейтинг: 3625
|
Добавлено: 02/05/11 в 18:44 |
полезно и познавательно!
|
|
|
|
С нами с 15.12.05
Сообщения: 287
Рейтинг: 293
|
Добавлено: 02/05/11 в 21:56 |
а к таким SSI инклудам это тоже относится?
<!--#include virtual="/top/top.html" -->
|
|
|
|
С нами с 29.05.05
Сообщения: 673
Рейтинг: 294
|
Добавлено: 03/05/11 в 15:41 |
LemonS писал: |
всегда юзать только локальные инклуды. Те virtual('/scj/top/top.html') надо делать как include('/home/user/domain/scj/top/top.html');
|
они же оба локальные.
что, реально есть разница между абсолютным и относительным путем?
|
|
|
|
Адалт воскрес!
С нами с 10.11.07
Сообщения: 1300
Рейтинг: 140
|
Добавлено: 03/05/11 в 15:50 |
Benny писал: | они же оба локальные.
что, реально есть разница между абсолютным и относительным путем? |
тут разница в
"include" и "virtual"
|
|
|
|
С нами с 21.09.03
Сообщения: 7329
Рейтинг: 2144
|
Добавлено: 03/05/11 в 17:40 |
basta писал: | а к таким SSI инклудам это тоже относится?
<!--#include virtual="/top/top.html" -->
|
Да, относится. Если включаемый файл такой же (того же типа), как и включающий, то можно вместо virtual= использовать file=.
|
|
|
|
С нами с 07.06.10
Сообщения: 243
Рейтинг: 115
|
Добавлено: 06/05/11 в 14:53 |
Народ, киньте, плиз, ссылку на толковый мануал по SmartCJ. А еще лучше на какой-нибудь туториал типа "Как сделать CJ на SmartCJ".
|
|
|
|
С нами с 11.01.07
Сообщения: 3607
Рейтинг: 2686
|
Добавлено: 06/05/11 в 15:58 |
|
|
|
|
Спасибо всем, кто еще МОЖЕТ!
С нами с 25.07.04
Сообщения: 3875
Рейтинг: 1570
|
Добавлено: 07/05/11 в 17:52 |
Не знаю как с инклудом по локальному и абсолютному пути, но на днях решил попробовать заменить абсолютные пути к картинкам на блоге типа <a href="http://my_blog.com/pics/img1.jpg"> на <a href="/pics/img1.jpg">. Был уверен, что загрузка ускорится, но все же сначала решил сделать тест: залил 500 одинаковых картинок где-то по 300 байт каждая (чтоб сама картинка долго не грузилась) с именами 001-500.jpg, выложил их на одну страницу, убрал для теста все с блога и тестил время загрузки в двух онлайн сервисах оба варианта. На мое удивление, оказалось что разницы по времени загрузки никакой.
|
|
|
|
Адалт воскрес!
С нами с 10.11.07
Сообщения: 1300
Рейтинг: 140
|
Добавлено: 07/05/11 в 18:05 |
photomuza писал: | На мое удивление, оказалось что разницы по времени загрузки никакой. |
так а за счёт чего будет меньше? на каждую картинку идёт всё равно отдельный запрос к серверу.
|
|
|
|
Спасибо всем, кто еще МОЖЕТ!
С нами с 25.07.04
Сообщения: 3875
Рейтинг: 1570
|
Добавлено: 07/05/11 в 18:32 |
Дык предполагал что абсолютный путь через http:// длинней хоть и с того же сервера Вот чет не сообразил попробовать <a href="img1.jpg">. А по такому быстрей будет соединяться? Хотя врочем все равно там милисекунды, и для меня, блоггера с 20-ю картинками в странице это пофиг, рельно быстрей загружается после включения плагина Супер кэш, он просто создает статичные страницы и всё, никакого тебе инклуда, никакого РНР, чиста ХТМЛ-ка грузится.
|
|
|
|
Адалт воскрес!
С нами с 10.11.07
Сообщения: 1300
Рейтинг: 140
|
Добавлено: 07/05/11 в 19:13 |
photomuza писал: | Дык предполагал что абсолютный путь через http:// длинней хоть и с того же сервера Вот чет не сообразил попробовать <a href="img1.jpg">. А по такому быстрей будет соединяться? |
мне кажется разницы вообще тут нет, всё это в итоге приведёт к одному и тому же запросу на сервер. в нём будет имя хоста и путь к картинке (абсолютный).
в примерах там дело не в путях, а в том что функции virtual и include работают по-разному
|
|
|
|
С нами с 17.07.03
Сообщения: 270
Рейтинг: 206
|
Добавлено: 08/05/11 в 02:12 |
а как быть с include("in.php"); ?
|
|
[an error occurred while processing the directive]
|
1
|
|
|
С нами с 11.01.07
Сообщения: 3607
Рейтинг: 2686
|
Добавлено: 17/05/11 в 21:33 |
photomuza: вопрос не в длинне урла
http://domain.com/1.jpg
и
http://domain.com/1/2/3/4/5/6/7/8/1.jpg
загрузятся с одинаковой скоростью.
Вопрос в том, что при include() система сделает грубо следующее: (тем кто разбирается просьба не придираться и не усложнять пример)
1. приходит запрос к апачу например http://domain.com/index.php
2. система запускает пхп
3. он читает index.php
4. выполняет
5. видит include(file.php)
6. читает с диска file.php
7. выполняет и его за компанию
8. возвращает то что получилось у пхп - пользователю
в варианте virtual()
1. приходит запрос к апачу например http://domain.com/index.php
2. система запускает пхп
3. он читает index.php
4. выполняет
5. видит virtual(file.php)
тут отличие
- ага думает пхп, это ж подзапрос
- запускаем еще один процесс апача
- оттуда запускаем еще один процесс пхп
- он читает file.php, возвращает его изначальному процессу, тот компанует чего получилось
8. возвращает то что получилось у пхп - пользователю
в разных системах могут быть разные варианты, но смысл примерно такой, что запуск еще одного или даже 2х процессов отнимает у системы ресурсы.
istota: а какой с ним вопрос ? тут же бычный локальный инклуд, все хорошо.
|
|
|
|
Спасибо всем, кто еще МОЖЕТ!
С нами с 25.07.04
Сообщения: 3875
Рейтинг: 1570
|
Добавлено: 18/05/11 в 14:34 |
LemonS: Спасибо за популярное разъяснение Но мое предположение было не в длине урла, а в другом: в том что путь http://... предполагает заход "с улицы", а путь /folder... - заход "по месту", т.е. внутри сервера. Поэтому и думал, что будет разное время на запрос.
|
|
|
|
Дрочу на статсы*
С нами с 09.10.06
Сообщения: 1940
Рейтинг: 1288
|
Добавлено: 19/05/11 в 23:06 |
Оффтопик:
тут другое совсем
полный путь для <image src="/image.jpg"> все равно будет h++p://domain.com/image.jpg
и на каждую картинку в любом случае отдельный запрос к вебсерверу, поэтому и ставят люди на сиджах более легкий nginx на статику
в случае с php запрос к вебсерверу только если вызываем его извне, h++p://domain.com/script.php вместо /home/domain.com/script.php
LemonS: спасибо за полезный топик
|
|
Домен в выдаче? Это не твоя заслуга, это наша недоработка. (c)google
|
0
|
|
|
С нами с 11.10.07
Сообщения: 383
Рейтинг: 16
|
Добавлено: 05/07/11 в 12:27 |
Как убрать:
<!--This page was generated by SmartCJ : free version -->
?
|
|
|
|
маниакально- депрессивный псих
С нами с 21.02.09
Сообщения: 1445
Рейтинг: 860
|
Добавлено: 05/07/11 в 14:32 |
artweb: купить у Лемона лицензию
|
|
CDN from $0,8/Mbps - от адванседов
|
3
|
|
|
С нами с 30.04.06
Сообщения: 3096
Рейтинг: 2025
|
Добавлено: 05/07/11 в 17:40 |
artweb писал: | Как убрать:
<!--This page was generated by SmartCJ : free version -->
? |
Оффтопик: А чем тебе это мешает ?
|
|
|
|
С нами с 11.01.07
Сообщения: 3607
Рейтинг: 2686
|
Добавлено: 11/07/11 в 11:45 |
artweb: по идее ничем мешать не должно, ставят практически все скрипты включая тот же ВП.
|
|
|
|
С нами с 11.10.07
Сообщения: 383
Рейтинг: 16
|
Добавлено: 13/07/11 в 22:45 |
LemonS писал: | artweb: по идее ничем мешать не должно, ставят практически все скрипты включая тот же ВП. |
Я параною на счет гугла. Можно все смарты отправить в песок на раз.
|
|
|
|
С нами с 11.01.07
Сообщения: 3607
Рейтинг: 2686
|
Добавлено: 27/07/11 в 17:08 |
Столкнулся еще с вопросом, который можно в faq. Это относится ко всем скриптам, но пишу сюда что б не плодить темы.
Например, используется внешний ротатор и smartcj (в реальности не важно какой скрипт трейда).
имеем ссылку вида
хттп://yourdomain/rotator/out.php?param1=a&u=/scj/cgi/out.php?url=http://galleries.com/index.html
Все работает хорошо:юзер кликает на линк, его шлет на rotator/out.php? этот скрипт видит парамер u= и пересылает на нужный урл.
но тут мы решили добавить скиминг в урл.
хттп://yourdomain/rotator/out.php?param1=a&u=/scj/cgi/out.php?p=60&url=http://galleries.com/index.html
Казалось бы все хорошо, однако шлет не туда.
Разгадка в следующем: парамеры в урле разделяются по занаку &.
значит скрипт /rotator/out.php получит следующие парамеры (разделяем по &) :
param1=a
u=/scj/cgi/out.php?p=60
url=http://galleries.com/index.html
как видно парамер u будет равен /scj/cgi/out.php?p=60, /rotator/out.php откравит на этот урл, а урл гали можно сказать потеряется.
Для того, что бы /rotator/out.php понял что "url=http://galleries.com/index.html" это так же часть относящаяся к параметру u= надо & заменить %26. Те урл должен быть таким:
хттп://yourdomain/rotator/out.php?param1=a&u=/scj/cgi/out.php?p=60%26url=http://galleries.com/index.html
функция замены & на %26 существует по всех ротаторах вроде бы.
|
|
|
|
С нами с 11.01.07
Сообщения: 3607
Рейтинг: 2686
|
Добавлено: 01/08/11 в 15:07 |
Adult Empire и кастом гали
У Adult Empire для каждой гали есть свой join url, например на гале
http://galleries.adult-empire.com/7586/471609/7394/index.php
join url у нее
http://www.adult-empire.com/rs.php?site_id=7586&wm_id=7394&
_id=471609
Выступлю в роли капитана очевидность, но смысл отдельного джойна в том, что для нишевых галер - нишевые страницы джойна.
Проблема: если вы делаете у себя кастомные гали то спонсор у них один - AE и таким образом join url на всех галерах получается один и тот же, теряются персональные джоины. Дабы не терялось надо делать так:
В начало темплейта (вероятнее всего custom_content_pic) добавляем код
Код: [развернуть] |
<?php
$tmp = explode('/', '<!--SOURCE_URL-->');
$join_url = "http://www.adult-empire.com/rs.php?site_id={$tmp[3]}&wm_id={$tmp[5]}&sub_id=1&rs_fhg_id={$tmp[4]}";
?>
|
и в нужном месте темплейта где нам надо урл на нишевый джоин
Код: [развернуть] |
<a href='<?=$join_url?>'>JOIN HERE</a>
|
Все
|
|
|
|