Почему умный поиск так быстро в Facebook - PullRequest
1 голос
/ 17 февраля 2011

Мне интересно, как Facebook реализовал функцию поиска на главной странице. как только я набираю «а», выпадающий список содержит список друзей и очень-очень быстро.

Я видел в firebug, что он отправляет ajax-запрос одному из своих файлов.

Я хотел реализовать такую ​​же функциональность в одном из моих веб-приложений, но, хотя в моей таблице всего 4 записи, загрузка раскрывающегося списка занимает немного времени. То, что я сделал, это

  1. отправить ajax req с моим параметром поиска
  2. выполненный SQL-запрос
  3. сделал HTML
  4. и вернул так, что будет заменить div

Ответы [ 2 ]

3 голосов
/ 18 февраля 2011

Facebook имеет очень дорогие серверы, использующие очень дорогой CDN (Akamai), и использует кэширование на стороне сервера, например memcached.

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

2 голосов
/ 09 октября 2012

Попробуйте следующий код PHP, он будет сканироваться на сайте быстрого поиска в Facebook и отображать результаты. Я надеюсь, что это будет полезно, не стесняйтесь настраивать это:)

<?php
function facebook_search_api($args, $referer = 'YOUR SITE ADDRESS', $endpoint = 'web')
{
$url = "http://www.FastFacebookSearch.com".$endpoint;

if ( !array_key_exists('v', $args) )
$args['v'] = '1.0';
//$args['key']="ABQIAAAArMTuM-CBxyWL0PYBLc7SuhT2yXp_ZAY8_ufC3CFXhHIE1NvwkxT-uD75NXlWUsDRBw-8aVAlQ29oCg";
//$args['userip']=$_SERVER['REMOTE_ADDR'];
$args['rsz']='8';
$url .= '?'.http_build_query($args, '', '&');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, $referer);
$body = curl_exec($ch);
curl_close($ch);
//decode and return the response
return json_decode($body,true);
}
$query_temp=urldecode(isset($_GET['q'])?$_GET['q']:"none");
$search_type=urldecode(isset($_GET['search_engine'])?$_GET['search_engine']:"");


echo "$search_type Search Results for: $query_temp<br />-----<br />";

$query=$search_type.$query_temp;


$res = google_search_api(array('q' => $query));
$pages=$res['responseData']['cursor']['pages'];
$nres=0;
for($i=0;$i<count($pages);$i++)
{
$res = google_search_api(array('q' => $query,'start'=>$rez['responseData']['cursor']['pages'][$i]['start']));
for($j=0;$j<count($res['responseData']['results']); $j++)
{
$nres++;

echo urldecode("<a href=".$res['responseData']['results'][$j]['url'])."><big>";
echo urldecode($res['responseData']['results'][$j]['title'])."</a></big><br />";

echo urldecode("<font color=green><small>".$res['responseData']['results'][$j]['url'])."</small></font><br>";
echo urldecode("<iiisearch>".$res['responseData']['results'][$j]['content'])."<br><br>";



}
}
echo "<br />---<br />Total number of reuslts: $nres";
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...