Jump to content
php.lv forumi

javascript setTimeout un servera darbība


Cinis

Recommended Posts

īss un konkurēts jautājums?

Nav konkrēts. Neviens cits nezina, ko dara "funkcija()", izņemot to, ka "tiek pārbaudīta datu bāzes ieraksti", kā arī nav zināms, kur tā funkcija izpildās.

 

ja to skriptu izpilda pārlūks, tad tas pats nevar pārbaudīt datubāzi, bet tam jātaisa servera pieprasījumi. reizi sekundē - tas ir daudz.

ja skriptu izpilda serveris, piemēram, ar node.js, tad viss atkarīgs no SQL pieprasījuma un tamlīdzīgām lietām.

 

par cik jautājums ir nekonkrēts, īsā atbilde ir: šī funkcija ĻOTI noslogo serveri.

Link to comment
Share on other sites

draugz, tev taisnība, bet tāpat skaidrs, ka tas ir nesakarīgs koda izgriezums, tāpēc vadījos pēc pārējā teksta. ;)

 

funkcija:

function getStatus() { 
  $.ajax({ 
    type: "POST", 
    url: "fails.php", 
    data: "user_id="+ SESIJAS_ID, 
    success: function(msg) 
      {$("#news_status").html(msg);} 
  }); 
  setTimeout("getStatus()",1000); 
}

fails.php

<? 
if(isset($_POST['user_id'])) 
{ 
  require "config.php"; 
  require "functions.php"; 
  $my_friends_count = mysql_result(mysql_query("SELECT COUNT(*) FROM posts WHERE user_id = '{$_POST['user_id']}' AND time > 'PEDEJAIS_LAIKS_KAD_BIJIS_ONLINE'"),0,'COUNT(*)');   
  if($my_friends_count > 0) 
    {print $my_friends_count;} 
} 
?>

tipa funkcija izvelk rakstu skaitu janav kko redzējis un jair tad uzmet skaitu, tipa kkas līdzigs Twitterim vai draugiem.lv runā

 

atkārtošos vai tas varētu kaitēt servera darbībai? jo ja kaitēs doma ir uzlikt lai čeko ik pēc 15sec nevis 1sec 

Link to comment
Share on other sites

Par js - kā minimums, kodu `setTimeout("getStatus()",1000);` ieliec "success" funkcijā, t.i. nākamais pieprasījums būs sekundi pēc tam, kad saņemta iepriekšējā pieprasījuma atbilde. Savādāk var gadīties tā, ka viens pieprasījums izpildās sekundes 3, nākamais 1 sekundi un pirmā pieprasījuma atbilde tiks apstrādāta vēlāk, kā otra.

 

Par servera galu - pieprasījums ar salīdzināšanu "AND time > 'PEDEJAIS_LAIKS_KAD_BIJIS_ONLINE'" potenciāli ir lēns (jāskatās explain). Ja onlainā sēdēs 50 lietotāji un būs daudz šādu paralēlu pieprasījumu, tāpēc padomā par kešošanu,

Un vēl tev ir dažas problēmas! SQL teikumā nevajadzētu likt mainīgos pa tiešo no $_GET, $_POST un $_COOKIE (SQL injection). mysql funkciju vietā izmanto mysqli vai PDO funkcijas, jo mysql funkcijas ir deprecated.

 

Kaut kas dīvains notiek koda loģikā. Kā var būt lietotājam posti ar datumu pēc tam, kad viņš ir bijis onlainā? Vai arī šim lietotājam parādās posti no citiem lietotājiem? Vai šajā gadījumā nenotiek postu dublēšana datubāzē? Kas īsti ir postotais user_id? Ja tā lietotāja ID, kurš ir autorizējies, tad viņa ID būtu jāņem no sesijas, nevis caur POST

Edited by e-remit
Link to comment
Share on other sites

function getStatus()

{

$.ajax({

type: "POST", // vajadzētu būt GET vispār, tu neposto datus, tu tos pieprasi

url: "fails.php",

data: "user_id="+ SESIJAS_ID, // vai tad server-side $_SESSION['id'] nav?

success: function(msg)

{

$("#news_status").html(msg);

}

});

}

setInterval(getStatus, 1000);

Edited by jurchiks
Link to comment
Share on other sites

jurchiks par GETiem izlabošu un SESIJAS_ID tas bija parādīts uzskatāmi, jo tā fukcijai tur vēl nedaudz vairāk rindiņu.

 

e-remit paldies par ieteikumu ņemšu vērā :)

 

 

Kaut kas dīvains notiek koda loģikā. Kā var būt lietotājam posti ar datumu pēc tam, kad viņš ir bijis onlainā? Vai arī šim lietotājam parādās posti no citiem lietotājiem? Vai šajā gadījumā nenotiek postu dublēšana datubāzē? Kas īsti ir postotais user_id? Ja tā lietotāja ID, kurš ir autorizējies, tad viņa ID būtu jāņem no sesijas, nevis caur POST.

 

reāli jau atbildēji ar otro jautājumu, ir tā ka uzmetīsies skaits no tiem kam viņš seko un ir atstāta lapa online, bet nerefresho uzmet cik ir jauni posti

 

postotais user_id ir lietotāja id, kuriem viņš seko

par to post bus tā ka turpmāk tikai ajag bez nosūtitiem datiem bet meklēs sākuma kadiem viņš seko un tad filtrē vai ir jauni posti

 

ceru ka domu sapratāt :)

Edited by Cinis
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...