ShareNHỮNG CÁCH TỐI ƯU ĐỂ TĂNG TỐC WEBSITE CỦA BẠN

6 bài đăng
14.08.2021 / 17:57
hoangchan
Bài đăng: 102
Member
HÔNG

NHỮNG CÁCH TỐI ƯU ĐỂ TĂNG TỐC WEBSITE CỦA BẠN

Việc tăng tốc website đòi hỏi lập trình viên phải có kỹ năng giỏi về FrontEnd, BackEnd và Sysadmin thì mới có đủ kiến thức để Optimize được.

Dưới đây là những cách mà mình hay dùng để tăng tốc website. Các bạn góp ý thêm những cách khác để cùng học hỏi nhé.

======================

- Chia request nặng thành các request nhẹ hơn

- Bỏ các request thừa, không dùng tới

- Cache request index để load nhanh hơn

- Cache các request nặng

- Giảm dung lượng file index bằng cách optimize html để download và render html ra nhanh hơn

- Cho Browser cache các file resources lại bằng cách thêm header cache control

- Sử dụng Gzip lên file index và các file resources khác để tăng tốc độ load

- Thường xuyên monitor cpu, ram, disk, băng thông của server để có thể xử lý kịp thôi. Zabbix là công cụ monitor mình hay dùng.

- Dùng CDN cho file index

- Dùng CDN cho các file resources (hình ảnh, font, javascript file, css file,.....)

- Tăng độ sẵn sàng cho website cao lên bằng cách dùng Load Balancing

- Sử dụng Opcache nếu backend là PHP

- Giảm thời gian truy vấn SQL bằng cách đánh Index

- Sử dụng Redis để cache Database

- Khi website có lượng database cao thì tăng tốc truy vấn lên bằng cách dùng Database Replication hoặc Database Sharding

- Sử dụng công cụ DevTools của Chrome để quan sát các request, từ đó có hướng xử lý kịp thời

#j2team_share

[IMAGE]
15.08.2021 / 16:56
hoangchan
Bài đăng: 102
Member
HÔNG

file index

PHP
  1. <?php
  2. define('_MRKEN_CMS', 1);
  3. $headmod = 'mainpage';
  4. require('incfiles/core.php');
  5. if (isset($_SESSION['ref'])) unset($_SESSION['ref']);
  6. if (isset($_GET['err'])) $act = 404;
  7. switch ($act) {
  8. case '404':
  9. $headmod = 'error404';
  10. require('incfiles/head.php');
  11. echo functions::display_error($lng['error_404']);
  12. break;
  13.  
  14. case 'logout':
  15. setcookie('cuid', '');
  16. setcookie('cups', '');
  17. session_destroy();
  18. header('Location: ' . SITE_URL . '/');
  19. exit;
  20. break;
  21.  
  22. default:
  23. // homepage
  24. $headmod = 'mainpage';
  25. require('incfiles/head.php');
  26. $mp = new mainpage();
  27. // information
  28. echo '<div class="phdr"><a href="news/index.php"><b>' . $lng['news'] . '</b></a> (' . $mp->newscount . ')</div>';
  29. echo $mp->news;
  30. if ($user_id) {
  31. $total = mysql_result(mysql_query('SELECT COUNT(*) FROM `cms_chat`'),0);
  32. $req = mysql_query('SELECT `cms_chat`.*,`users`.`account`,`users`.`rights` FROM `cms_chat` LEFT JOIN `users` ON `users`.`id`=`cms_chat`.`uid` ORDER BY `cms_chat`.`id` DESC LIMIT ' . $kmess . '');
  33. $i=0;
  34. echo '<div class="phdr"><a href="chat.php"><b>Chatbox</b></a> (<span id="total">'.$total.'</span>)</div>'.
  35. '<div class="notif"><a href="game/?act=rock_paper_scissors">[New] Oẳn tù tì!</a></div>' .
  36. '<div class="notif"><a href="game/">Thêm trò chơi</a></div>' .
  37. '<div id="error" class="hide rmenu"></div><div class="topmenu"><form action="chat.php?in" method="post" id="chat"><div><textarea name="text" rows="'.($set_user['field_h']-1).'" id="chat_input" required></textarea></div><div><input type="hidden" name="token" value="'.$datauser['priv_key'].'"/><input type="submit" name="submit" value="Gửi" id="chat_submit"></div></form></div>'.
  38. '<div id="chatbox">';
  39. while($res = mysql_fetch_assoc($req)){
  40. $text = functions::checkout($res['text'], 1, 1, 1);
  41. echo ($i%2 ? '<div class="list1">':'<div class="list2">').'<b><a href="users/profile.php?user='.$res['uid'].'" title="'.functions::display_date($res['time']).'">'. functions::nick_color(htmlspecialchars($res['account']), $res['rights']). '</a></b>: '.$text.'</div>';
  42. $i++;
  43. }
  44. echo '</div>';
  45. }
  46. // Forum
  47. if ($set['mod_forum'] || $rights >= 7){
  48. echo '<div class="phdr">' . $lng['information'] . '</div>' .
  49. '<div class="menu"><a href="faq.php">' . $lng['information_faq'] . '</a></div>';
  50. if (mysql_result(mysql_query('SELECT COUNT(*) FROM `forum` WHERE `type` = "t" AND `vip` = "1" AND `close` = "0"'), 0)) {
  51. $req = mysql_query('SELECT `id`, `text`, `prefix` FROM `forum` WHERE `type` = "t" AND `vip` = "1" AND `close` = "0" ORDER BY `time` DESC LIMIT 5');
  52. while($res = mysql_fetch_assoc($req)) {
  53. $count = mysql_result(mysql_query('SELECT COUNT(*) FROM `forum` WHERE `type` = "m" AND `close` = "0" AND `refid` = "' . $res['id'] . '"'), 0);
  54. $cpg = ceil($count / $kmess);
  55. $nam = mysql_fetch_assoc(mysql_query('SELECT `user_id`, `from` FROM `forum` WHERE `type` = "m" AND `close` = "0" AND `refid` = "' . $res['id'] . '" ORDER BY `time` DESC LIMIT 1'));
  56. echo '<div class="list1 bg-notif"><img src="images/pt.gif" alt="[*]" style="vertical-align:middle" /> ' . ($res['prefix'] ? '<span class="label label-' . $res['prefix'] . '">' . $prefixs[$res['prefix']] . '</span>' : '') . '<a href="forum/' . functions::bodau($res['text']) . '.' . $res['id'] . '.html">' . htmlspecialchars($res['text']) . '</a> (<span class="red">' . $count . '</span>)' .($cpg > 1 ? ' <a href="forum/'.functions::bodau($res['text']).'.' . $res['id'] . '.html?page=' . $cpg . '">&raquo;</a>' : '') . ' [' . ((($user_id || $set['active']) && $user_id != $nam['user_id']) ? '<a href="users/profile.php?user=' . $nam['user_id'] . '">' . $nam['from'] . '</a>': $nam['from']) . ']' . '</div>';
  57. }
  58. } else {
  59. echo '<div class="menu"><p>' . $lng['list_empty'] . '</p></div>';
  60. }
  61. echo '<div class="phdr"><a href="forum/"><b>' . $lng['forum'] . '</b></a> (' . counters::forum() . ') | <a href="forum/?act=new&do=all">Có gì mới?</a></div>';
  62. echo '<div class="topmenu"><form action="//google.com/search" method="get"><input type="hidden" name="sitesearch" value="phonho.net"><input type="text" name="q" placeholder="Nhập từ khóa..." autocomplete="off"><input type="submit" value="Tìm Kiếm"></form><div><small><b class="green">Tìm kiếm trước khi hỏi</b></small></div></div>';
  63. if (mysql_result(mysql_query('SELECT COUNT(*) FROM `forum` WHERE `type` = "t" AND `close` = "0"'), 0)) {
  64. $req = mysql_query('SELECT `id`, `realid`, `text`, `prefix`, `vip`, `edit` FROM `forum` WHERE `type` = "t" AND `close` = "0" ORDER BY `time` DESC LIMIT ' . $kmess . '');
  65. while($res = mysql_fetch_assoc($req)) {
  66. $count = mysql_result(mysql_query('SELECT COUNT(*) FROM `forum` WHERE `type` = "m" AND `close` = "0" AND `refid` = "' . $res['id'] . '"'), 0);
  67. $cpg = ceil($count / $kmess);
  68. $nam = mysql_fetch_assoc(mysql_query('SELECT `user_id`, `from` FROM `forum` WHERE `type` = "m" AND `close` = "0" AND `refid` = "' . $res['id'] . '" ORDER BY `time` DESC LIMIT 1'));
  69. // icons
  70. $icons = array(
  71. ($res['vip'] ? functions::image('pt.gif') : ''),
  72. ($res['realid'] ? functions::image('rate.gif') : ''),
  73. ($res['edit'] ? functions::image('tz.gif') : '')
  74. );
  75. echo '<div class="list1">' . functions::display_menu($icons, '') . ($res['prefix'] ? '<span class="label label-' . $res['prefix'] . '">' . $prefixs[$res['prefix']] . '</span>' : '') . '<a href="forum/' . functions::bodau($res['text']) . '.' . $res['id'] . '.html">' . htmlspecialchars($res['text']) . '</a> (<span class="red">' . $count . '</span>)' .($cpg > 1 ? ' <a href="forum/'.functions::bodau($res['text']).'.' . $res['id'] . '.html?page=' . $cpg . '">&raquo;</a>' : '') . ' [' . ((($user_id || $set['active']) && $user_id != $nam['user_id']) ? '<a href="users/profile.php?user=' . $nam['user_id'] . '">' . $nam['from'] . '</a>': $nam['from']) . ']' . '</div>';
  76. }
  77. } else {
  78. echo '<div class="menu"><p>' . $lng['list_empty'] . '</p></div>';
  79. }
  80. }
  81.  
  82. // block useful
  83. echo '<div class="phdr"><b>MENU</b></div>';
  84. // Link to library
  85. if ($set['mod_lib'] || $rights >= 7)
  86. echo '<div class="menu"><a href="library/">' . $lng['library'] . '</a> (' . counters::library() . ')</div>';
  87. if ($user_id || $set['active']) {
  88. echo '<div class="menu"><a href="users/album.php">' . $lng['photo_albums'] . '</a> (' . counters::album() . ')</div>';
  89. }
  90. // Thành viên trực tuyến
  91. $onltime = time() - 300;
  92. $gbot = 0;$msn = 0;$baidu = 0;$bing = 0;$mj = 0;$coccoc = 0;$facebook = 0;$yandex = 0;
  93. $users = mysql_result(mysql_query("SELECT COUNT(*) FROM `users` WHERE `lastdate` > '" . $onltime . "' AND `preg`='1'"), 0);
  94. $guests = mysql_result(mysql_query("SELECT COUNT(*) FROM `cms_sessions` WHERE `lastdate` > '" . $onltime . "'"), 0);
  95. $count = $users + $guests;
  96. $spider = mysql_query("SELECT * FROM `cms_sessions` WHERE `lastdate` > '" . $onltime . "' ORDER BY `lastdate` DESC");
  97. while ($res = mysql_fetch_assoc($spider)) {
  98. if(stristr($res['browser'], 'Google')) {$gbot = $gbot + 1;}
  99. if(stristr($res['browser'], 'msnbot')) {$msn = $msn + 1;}
  100. if(stristr($res['browser'], 'Baidu')) {$baidu = $baidu + 1;}
  101. if(stristr($res['browser'], 'bingbot')) {$bing = $bing + 1;}
  102. if(stristr($res['browser'], 'MJ12')) {$mj = $mj + 1;}
  103. if(stristr($res['browser'], 'coccoc')) {$coccoc = $coccoc + 1;}
  104. if(stristr($res['browser'], 'facebook')) {$facebook = $facebook + 1;}
  105. if(stristr($res['browser'], 'Yandex')) {$yandex = $yandex + 1;}
  106. }
  107. $robots = $gbot + $msn + $baidu + $bing + $mj + $coccoc + $facebook + $yandex;
  108. echo '<div class="phdr">Thống kê</div>';
  109. echo '<div class="menu">'.counters::forum(1).'</div>';
  110. $newUser=mysql_fetch_assoc(mysql_query("SELECT `id`,`account` FROM `users` ORDER BY `datereg` DESC LIMIT 1"));
  111. echo '<div class="menu">'.($user_id || $set['active'] ? '<a href="users/index.php">' . $lng['users'] . '</a>' : '' . $lng['users'] . '').': <b>' . counters::users() . '</b>. Mới nhất: '.($user_id || $set['active'] ? '<a href="users/profile.php?user='.$newUser['id'].'">'.$newUser['account'].'</a>' : $newUser['account']).'</div>';
  112. echo '<div class="menu">Có '.($user_id || $set['active'] ? '<a href="users/index.php?act=online">'.$count.' người trực tuyến</a>':''.$count.' người trực tuyến').', '.$users.' thành viên, '.($guests - $robots).' khách, '.$robots.' robots</div>';
  113. $req = mysql_query('SELECT `id`, `account`, `rights` FROM `users` WHERE `preg`="1" and `lastdate` > "'. $onltime .'" ORDER BY `account` ASC');
  114. if(mysql_num_rows($req)){
  115. while ($res = mysql_fetch_assoc($req)) {
  116. if($user_id || $set['active']){
  117. $user_on[] = '<a href="users/profile.php?user='.$res['id'].'">' . functions::nick_color($res['account'], $res['rights']) . '</a>';
  118. }else{
  119. $user_on[] = $res['account'];
  120. }
  121. }
  122. echo '<div class="menu">' . implode(', ', $user_on) . ($robots ? ', ' : '');
  123. } else {
  124. echo '<div class="menu">';
  125. }
  126. if ($robots) {
  127. if ($gbot) $robot[] = '('.$gbot.') Google';
  128. if ($msn) $robot[] = '('.$msn.') MSN';
  129. if ($baidu) $robot[] = '('.$baidu.') Baidu';
  130. if ($bing) $robot[] = '('.$bing.') Bing';
  131. if ($mj) $robot[] = '('.$mj.') MJ12';
  132. if ($coccoc) $robot[] = '('.$coccoc.') CốcCốc';
  133. if ($facebook) $robot[] = '('.$facebook.') Facebook';
  134. if ($yandex)$robot[] = '('.$yandex.') Yandex';
  135. echo '' . implode(', ', $robot) . '</div>';
  136. } else {
  137. echo '</div>';
  138. }
  139. }
  140.  
  141. require('incfiles/end.php');
16.08.2021 / 14:33
PMTpro
Bài đăng: 464
Member
khóc chỉ làm rơi lệ!

Thêm cái nữa là dùng máy chủ xịn, code nặng cũng load phi mã :troll:

16.08.2021 / 19:19
MrKen
Bài đăng: 2646
Trùm!
Vẫn là A N H

Yêu cầu khách truy cập dùng 5G hoặc gói mạng tốc độ cao :yao:

16.08.2021 / 21:20
hoangchan
Bài đăng: 102
Member
HÔNG

cái này đâu phải mình viết đâu :m1:

Nguồn #j2team_share

Đã chỉnh sửa. hoangchan (16.08.2021 / 21:21)
19.08.2021 / 12:48
Poker
Bài đăng: 48
Member

dùng framework js build ra load chóng mặt