Рассмотрим следующий сценарий:
http://www.restserver.com/example.php
возвращает некоторый контент, с которым я хочу работать в моем веб-приложении.
Я не хочу загружать его, используя ajax (проблемы с SEO и т. Д.)
Моя страница генерирует 100 мс, для загрузки ресурса REST также требуется 100 мс.
Мы предполагаем, что время создания моего веб-сайта составляет 100 мсек, прежде чем я начну работать с ресурсом REST.То, что происходит после этого, можно игнорировать.
Пример кода:
Index.php моего сайта
<?
do_some_heavy_mysql_stuff(); // takes 100 ms
get_rest_resource(); // takes 100 ms
render_html_with_data_from_mysql_and_rest(); // takes neglectable amount of time
?>
Веб-сайт займет ~ 200 мс длягенерировать.
Я хочу превратить это в:
<?
Restclient::initiate_rest_loading(); // takes 0ms
do_some_heavy_mysql_stuff(); // takes 100 ms
Restclient::get_rest_resource(); // takes 0 ms because 100 ms have already passed since initiation
render_html_with_data_from_mysql_and_rest(); // takes neglectable amount of time
?>
Создание веб-сайта займет ~ 100 мс.
Для достижения этой цели я подумал об использовании чего-то вроде этого:
(Я почти уверен, что этот код не будет работать, потому что этот вопрос все о том, как спросить, как это сделать и возможно ли это. Я просто подумал, что какой-то наивный код может продемонстрировать это лучше всего)
class Restclient {
public static $buffer;
public static function initiate_rest_loading() {
// open resource
$handle = fopen ("http://www.restserver.com/example.php", "r");
// set to non blocking so fgets will return immediately
stream_set_blocking($handle,0);
// initate loading, but return immediately to continue website generation
fgets($handle, 40960);
}
public static function get_rest_resource() {
// set stream to blocking again because now we really want the data
stream_set_blocking($handle,1);
// get the data and save it so templates can work with it
self::$buffer = fgets($handle, 40960); templates
}
}
Итак, последний вопрос:
Возможно ли это и как?
Что я должен отслеживать (переполнение внутреннего буфера,длины потоков и т. д.)
Существуют ли лучшие методы?
Хорошо ли это работает с ресурсами http?
Любой вход оценивается!
Надеюсь, я объяснил это понятно.Если что-то неясно, пожалуйста, оставьте комментарий, чтобы я мог перефразировать его!