Tutorial Blogspot

Tutorial Blogspot, SEO, HTML5, CSS3, Facebook, Twitter, Software, Game, Motivasi, Tips dan Trik

Select Menu
  • Home
  • Blogging
    • Tutorial Blogspot
    • CSS
    • jQuery
    • Widget
  • Tools
    • SEO
    • Template Blogger
    • HTML Encrypter
    • Code Color
    • Responsive Cek
  • Sitemap
  • About Me
  • Link Exchange
  • Pasang Iklan
  • Kontes SEO Template Premium
Home » Widget » Random Post Fast Loading

Senin, 01 September 2014

Random Post Fast Loading

Unknown
Add Comment
Widget
Senin, 01 September 2014
Seperti yang kita ketahui bahwa widget Random post mampu menampilkan artikel blog kita secara acak dan bergantian pada saat widget tersebut kita load (bekerja), dimana Script widget tersebut akan menampilkan beberapa artikel/postingan blog kita sesuai dengan pengaturan yang kita terapkan pada Script widget tersebut dengan cara mengatur nilai yang akan di tampilkan, sebagai contoh maxResults = 7; script tersebut akan menampilkan artikel/postingan acak sebanyak (7) artikel.
Akan tetapi mau tidak mau Saya harus mengatakan bahwa widget random post itu sangat buruk dalam hal performa. Kerja mereka sangat lambat dan membuang-buang tenaga, karena mereka bekerja dengan cara memanggil feed posting berukuran sangat besar! Kemudian mereka hanya akan menampilkannya sebagian saja secara acak:
<script src='/feeds/posts/default?alt=json-in-script&max-results=99999&callback=randomPosts'></script>
Bagi Anda para pemakai mungkin tidak pernah tahu mengenai ini, tetapi sebenarnya setiap pemakai widget random post termasuk juga widget artikel terkait tanpa sadar telah menerima beban begitu besar. Ketika Anda membuka halaman tunggal dimana terdapat widget random post di dalamnya, pada saat yang bersamaan Anda juga sebenarnya sedang membuka semua posting yang telah Anda terbitkan dalam satu waktu. Mengapa? Karena parameter max-results pada feed menunjukkan angka 99999 yang artinya bahwa semua feed posting akan “diusahakan” untuk dipanggil (diusahakan, karena jumlah posting yang kita terbitkan tidak mungkin mencapai angka sebesar itu).

Mengacak Indeks Permulaan

Saya menyadari terdapat sebuah peluang untuk menciptakan widget random post yang lebih ringan dan cepat dimuat. Dibandingkan memuat semua posting dan memilah beberapa posting secara acak untuk ditampilkan, akan lebih baik jika kita mengacak nilai start-index pada feed sehingga posting yang dimuat bisa dimulai dari urutan sembarang:
  1. function randomPosts(json) {
  2. // Ubah JSON menjadi HTML...
  3. }
  4.  
  5. var startIndex = Math.round(Math.random() * 9999); // Membuat angka acak
  6. document.write('<scr' + 'ipt src="/feeds/posts/summary?alt=json-in-script&start-index=' + startIndex + '&max-results=7&callback=randomPosts"></scr' + 'ipt>');
Ada satu masalah kecil yang mungkin akan mengganggu. Jika angka acak yang tercipta nilainya lebih besar dari total posting blog Anda saat ini, maka widget random post ini tidak akan bekerja. Oleh karena itu kita harus membatasi angka acak yang tercipta, yaitu tidak boleh kurang dari 1 dan tidak boleh lebih dari “total posting dikurangi jumlah posting yang ingin ditampilkan”.
Untuk mendapatkan jumlah posting secara keseluruhan kita bisa mengambilnya melalui objek json.feed.openSearch$totalResults.$t:
  1. // Konfigurasi
  2. var homePage = 'http://nama_blog.blogspot.com',
  3. maxResults = 7;
  4.  
  5. // Fungsi untuk menggenerasikan angka acak dengan batasan minimal dan maksimal
  6. function getRandomInt(min, max) {
  7. return Math.floor(Math.random() * (max - min + 1)) + min;
  8. }
  9.  
  10. // Mendapatkan indeks pemulai yang aman untuk memanggil feed utama
  11. function createRandomPostsStartIndex(json) {
  12. // Buat angka acak dengan nilai tidak boleh kurang dari `1` dan tidak boleh lebih dari `total posting - posting yang ingin ditampilkan`
  13. var startIndex = getRandomInt(1, (json.feed.openSearch$totalResults.$t - maxResults));
  14. // Tampilkan pesan log
  15. console.log('Get the post feed start from ' + startIndex + ' until ' + (startIndex + maxResults));
  16. }
  17.  
  18. document.write('<scr' + 'ipt src="' + homePage + '/feeds/posts/summary?alt=json-in-script&max-results=0&callback=createRandomPostsStartIndex"></scr' + 'ipt>');
Muat ulang widget Anda berkali-kali. Seharusnya Anda akan melihat pesan log indeks pemanggilan posting yang berubah-ubah seperti ini:

Showing log message to indicate random number for feed start index purpose

Kita akan menggunakan angka acak itu sebagai angka pemulai pada parameter start-index seperti ini:
  1. function createRandomPostsStartIndex(json) {
  2. var startIndex = getRandomInt(1, (json.feed.openSearch$totalResults.$t - maxResults));
  3. document.write('<scr' + 'ipt src="' + homePage + '/feeds/posts/summary?alt=json-in-script&orderby=updated&start-index=' + startIndex + '&max-results=' + maxResults + '&callback=randomPosts"></scr' + 'ipt>');
  4. }
Pada bagian akhir URL feed terdapat parameter callback=randomPosts. randomPosts di sini merupakan fungsi utama yang akan kita buat untuk mengubah JSON Blogger menjadi widget:
  1. function randomPosts(json) {
  2. var link, ct = document.getElementById('random-post-container'),
  3. entry = json.feed.entry,
  4. skeleton = "<ul>";
  5. for (var i = 0, len = entry.length; i < len; i++) {
  6. for (var j = 0, jen = entry[i].link.length; j < jen; j++) {
  7. link = (entry[i].link[j].rel == "alternate") ? entry[i].link[j].href : '#';
  8. }
  9. skeleton += '<li><a href="' + link + '">' + entry[i].title.$t + '</a></li>';
  10. }
  11. ct.innerHTML = skeleton + '</ul>';
  12. }
Sentuhan akhir, acak urutan posting yang ditampilkan menggunakan fungsi pengacak array sehingga daftar posting yang ditampilkan nantinya akan semakin acak urutannya:
  1. // Fungsi untuk mengacak array
  2. function shuffleArray(arr) {
  3. var i = arr.length, j, temp;
  4. if (i === 0) return false;
  5. while (--i) {
  6. j = Math.floor(Math.random() * (i + 1));
  7. temp = arr[i];
  8. arr[i] = arr[j];
  9. arr[j] = temp;
  10. }
  11. return arr;
  12. }
  13.  
  14. // Widget
  15. function randomPosts(json) {
  16. var link, ct = document.getElementById('random-post-container'),
  17. entry = shuffleArray(json.feed.entry),
  18. skeleton = "<ul>";
  19. for (var i = 0, len = entry.length; i < len; i++) {
  20. for (var j = 0, jen = entry[i].link.length; j < jen; j++) {
  21. link = (entry[i].link[j].rel == "alternate") ? entry[i].link[j].href : '#';
  22. }
  23. skeleton += '<li><a href="' + link + '">' + entry[i].title.$t + '</a></li>';
  24. }
  25. ct.innerHTML = skeleton + '</ul>';
  26. }

Hasil Akhir Tanpa Thumbnail Dan Css

  1. <div id='random-post-container'>Memuat...</div>
  2.  
  3. <script type="text/javascript">
  4. //<![CDATA[
  5. // Feed configuration
  6. var homePage = 'http://nama_blog.blogspot.com',
  7. maxResults = 7,
  8. containerId = 'random-post-container';
  9.  
  10. // Function to generate random number limited from `min` to `max`
  11. // Used to create a valid and safe random feed `start-index`
  12. function getRandomInt(min, max) {
  13. return Math.floor(Math.random() * (max - min + 1)) + min;
  14. }
  15.  
  16. // Function to shuffle arrays
  17. // Used to randomize order of the generated JSON feed
  18. function shuffleArray(arr) {
  19. var i = arr.length, j, temp;
  20. if (i === 0) return false;
  21. while (--i) {
  22. j = Math.floor(Math.random() * (i + 1));
  23. temp = arr[i];
  24. arr[i] = arr[j];
  25. arr[j] = temp;
  26. }
  27. return arr;
  28. }
  29.  
  30. // Get a random start index
  31. function createRandomPostsStartIndex(json) {
  32. var startIndex = getRandomInt(1, (json.feed.openSearch$totalResults.$t - maxResults));
  33. if (window.console && window.console.log) console.log('Get the post feed start from ' + startIndex + ' until ' + (startIndex + maxResults));
  34. document.write('<scr' + 'ipt src="' + homePage + '/feeds/posts/summary?alt=json-in-script&orderby=updated&start-index=' + startIndex + '&max-results=' + maxResults + '&callback=randomPosts"></scr' + 'ipt>');
  35. }
  36.  
  37. // Widget's main function
  38. function randomPosts(json) {
  39. var link, ct = document.getElementById(containerId),
  40. entry = shuffleArray(json.feed.entry),
  41. skeleton = "<ul>";
  42. for (var i = 0, len = entry.length; i < len; i++) {
  43. for (var j = 0, jen = entry[i].link.length; j < jen; j++) {
  44. link = (entry[i].link[j].rel == "alternate") ? entry[i].link[j].href : '#';
  45. }
  46. skeleton += '<li><a href="' + link + '">' + entry[i].title.$t + '</a></li>';
  47. }
  48. ct.innerHTML = skeleton + '</ul>';
  49. }
  50.  
  51. document.write('<scr' + 'ipt src="' + homePage + '/feeds/posts/summary?alt=json-in-script&max-results=0&callback=createRandomPostsStartIndex"></scr' + 'ipt>');
  52. //]]>
  53. </script>

Dengan Thumbnail Dan Deskripsi

  1. <div id='random-post-container'>Memuat...</div>
  2.  
  3. <script type="text/javascript">
  4. //<![CDATA[
  5. // Feed configuration
  6. var homePage = 'http://nama_blog.blogspot.com',
  7. maxResults = 7,
  8. summaryLength = 170,
  9. noImageUrl = 'http://3.bp.blogspot.com/-vpCFysMEZys/UOEhSGjkfnI/AAAAAAAAFwY/h1wuA5kfEhg/s72-c/grey.png',
  10. containerId = 'random-post-container';
  11.  
  12. // Function to generate random number limited from `min` to `max`
  13. // Used to create a valid and safe random feed `start-index`
  14. function getRandomInt(min, max) {
  15. return Math.floor(Math.random() * (max - min + 1)) + min;
  16. }
  17.  
  18. // Function to shuffle arrays
  19. // Used to randomize order of the generated JSON feed
  20. function shuffleArray(arr) {
  21. var i = arr.length, j, temp;
  22. if (i === 0) return false;
  23. while (--i) {
  24. j = Math.floor(Math.random() * (i + 1));
  25. temp = arr[i];
  26. arr[i] = arr[j];
  27. arr[j] = temp;
  28. }
  29. return arr;
  30. }
  31.  
  32. // Get a random start index
  33. function createRandomPostsStartIndex(json) {
  34. var startIndex = getRandomInt(1, (json.feed.openSearch$totalResults.$t - maxResults));
  35. if (window.console && window.console.log) console.log('Get the post feed start from ' + startIndex + ' until ' + (startIndex + maxResults));
  36. document.write('<scr' + 'ipt src="' + homePage + '/feeds/posts/summary?alt=json-in-script&orderby=updated&start-index=' + startIndex + '&max-results=' + maxResults + '&callback=randomPosts"></scr' + 'ipt>');
  37. }
  38.  
  39. // Widget's main function
  40. function randomPosts(json) {
  41. var link, summary, img,
  42. ct = document.getElementById(containerId),
  43. entry = shuffleArray(json.feed.entry),
  44. skeleton = "<ul>";
  45. for (var i = 0, len = entry.length; i < len; i++) {
  46. summary = ("summary" in entry[i]) ? (entry[i].summary.$t.replace(/<.*?>/g, "")).substring(0, summaryLength) + '&hellip;' : "";
  47. img = ("media$thumbnail" in entry[i]) ? entry[i].media$thumbnail.url.replace(/\/s[0-9]+(-c)?/, "/s72-c") : noImageUrl;
  48. for (var j = 0, jen = entry[i].link.length; j < jen; j++) {
  49. link = (entry[i].link[j].rel == "alternate") ? entry[i].link[j].href : '#';
  50. }
  51. skeleton += '<li>';
  52. skeleton += '<img src="' + img + '" alt="" width="72" height="72">';
  53. skeleton += '<a href="' + link + '">' + entry[i].title.$t + '</a><br>';
  54. skeleton += '<span>' + summary + '</span>';
  55. skeleton += '<span class="clear"></span></li>';
  56. }
  57. ct.innerHTML = skeleton + '</ul>';
  58. }
  59.  
  60. document.write('<scr' + 'ipt src="' + homePage + '/feeds/posts/summary?alt=json-in-script&max-results=0&callback=createRandomPostsStartIndex"></scr' + 'ipt>');
  61. //]]>
  62. </script>

Hasil Akhir Dengan Sedikit Sentuhan Css Tanpa Thumbnail Dan Deskripsi

  1. <style type='text/css'>
  2. #random-post-container {
  3. width: auto;
  4. margin-left: 15px;
  5. }
  6.  
  7. #random-post-container ul {
  8. margin: 7px 0 0;
  9. padding: 0;
  10. }
  11.  
  12. #random-post-container li {
  13. list-style: none;
  14. margin: 0 0 2px;
  15. background-color: #e5e5e5;
  16. padding: 0 7px 0 7px;
  17. line-height: 24px;
  18. height: 24px;
  19. overflow: hidden;
  20. border-bottom: 1px dotted #ccc;
  21. }
  22.  
  23. #random-post-container a {
  24. text-decoration: none;
  25. }
  26.  
  27. #random-post-container a:hover {
  28. text-decoration: underline;
  29. }
  30.  
  31. #random-post-container strong {
  32. font: normal bold 13px/1.4 Arial,Sans-Serif;
  33. }
  34. </style>
  1. <div id='random-post-container'>Memuat...</div>
  2. <script type='text/javascript'>
  3. //<![CDATA[
  4. /* Performa Widget Random Post
  5. * By Anarchyta
  6. * http://bit.ly/anarchyta
  7. * http://plus.google.com/118396814444756975267/posts
  8. */
  9.  
  10. var homePage = 'http://nama_blog.blogspot.com',
  11. maxResults = 7,
  12. containerId = 'random-post-container';
  13. // Function to generate random number limited from `min` to `max`
  14. // Used to create a valid and safe random feed `start-index`
  15.  
  16. function getRandomInt(min, max) {
  17. return Math.floor(Math.random() * (max - min + 1)) + min;
  18. }
  19. // Function to shuffle arrays
  20. // Used to randomize order of the generated JSON feed
  21.  
  22. function shuffleArray(arr) {
  23. var i = arr.length,
  24. j, temp;
  25. if (i === 0) return false;
  26. while (--i) {
  27. j = Math.floor(Math.random() * (i + 1));
  28. temp = arr[i];
  29. arr[i] = arr[j];
  30. arr[j] = temp;
  31. }
  32. return arr;
  33. }
  34. // Get a random start index
  35.  
  36. function createRandomPostsStartIndex(json) {
  37. var startIndex = getRandomInt(1, (json.feed.openSearch$totalResults.$t - maxResults));
  38. // console.log('Get the post feed start from ' + startIndex + ' until ' + (startIndex + maxResults));
  39. document.write('<scr' + 'ipt src="' + homePage + '/feeds/posts/summary?alt=json-in-script&orderby=updated&start-index=' + startIndex + '&max-results=' + maxResults + '&callback=randomPosts"></scr' + 'ipt>');
  40. }
  41. // Widget's main function
  42.  
  43. function randomPosts(json) {
  44. var link, ct = document.getElementById(containerId),
  45. entry = shuffleArray(json.feed.entry),
  46. skeleton = "<strong>Random Post</strong><ul>";
  47. for (var i = 0, len = entry.length; i < len; i++) {
  48. for (var j = 0, jen = entry[i].link.length; j < jen; j++) {
  49. link = (entry[i].link[j].rel == "alternate") ? entry[i].link[j].href : '#';
  50. }
  51. skeleton += '<li>&#10070; <a href="' + link + '">' + entry[i].title.$t + '</a></li>';
  52. }
  53. ct.innerHTML = skeleton + '</ul>';
  54. }
  55. document.write('<scr' + 'ipt src="' + homePage + '/feeds/posts/summary?alt=json-in-script&max-results=0&callback=createRandomPostsStartIndex"></scr' + 'ipt><div id="itempager" style="position:relative;"><a title="Dharla Ferdana" style="display:block!important;visibility:visible!important;opacity:1!important;position:absolute;bottom:10px;right:14px;font:normal bold 8px Arial,Sans-Serif!important;color:#666;text-shadow:0 1px 0 rgba(255,255,255,.1);text-decoration:none;" href="http://www.dhf.web.id" target="_blank">&#9658;DH-F</a></div>');
  56. //]]>
  57. </script>

Menggunakan Thumbnail Dan Deskripsi

  1. <style type='text/css'>
  2. #random-post-container {
  3. margin-bottom: 5px;
  4. background-color: #333;
  5. border: 4px solid #ddd;
  6. width: 400px;
  7. // Style by: www.dhf.web.id/;
  8. }
  9.  
  10. #random-post-container a {
  11. text-decoration: none;
  12. color: #fff;
  13. }
  14.  
  15. #random-post-container a:hover {
  16. text-decoration: underline;
  17. }
  18.  
  19. #random-post-container ul {
  20. padding: 0 7px;
  21. }
  22.  
  23. #random-post-container li {
  24. border-top: 1px solid #444;
  25. border-bottom: 1px solid #222;
  26. padding: 5px 7px;
  27. color: #aaa;
  28. list-style: none;
  29. overflow: hidden;
  30. }
  31.  
  32. #random-post-container img {
  33. display: block;
  34. float: left;
  35. margin: 2px 7px 5px 0;
  36. padding: 4px 4px;
  37. background-color: #222;
  38. border: 1px solid #111;
  39. -webkit-border-radius: 3px;
  40. -moz-border-radius: 3px;
  41. border-radius: 3px;
  42. -webkit-box-shadow: 0 1px 0 #444;
  43. -moz-box-shadow: 0 1px 0 #444;
  44. box-shadow: 0 1px 0 #444;
  45. }
  46.  
  47. #random-post-container a {
  48. font-weight: bold;
  49. font-size: 110%;
  50. }
  51.  
  52. #random-post-container .clear {
  53. display: block;
  54. clear: both;
  55. }
  56. </style>
  1. <div id='random-post-container'>Memuat...</div>
  2.  
  3. <script type='text/javascript'>
  4. //<![CDATA[
  5. /* Performa Widget Random Post
  6. * By Anarchyta
  7. * http://bit.ly/anarchyta
  8. * http://plus.google.com/118396814444756975267/posts
  9. */
  10.  
  11. // Feed configuration
  12. var homePage = 'http://nama_blog.blogspot.com',
  13. maxResults = 5,
  14. summaryLength = 150,
  15. noImageUrl = 'https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkah71WkV1WMS_UejZw1aAU1BuB2aw0wiiH6yug-ies3L8rpQKAh04l-HB9UD7fVgFRhr3gyRxPrrV4B5SYcpf-k5yixLxosne6cTFdmL9kH4e833nDNaeXf-C_veeIzcbCmQjewgAoHpd/s1600/dHF-logo1.png',
  16. containerId = 'random-post-container';
  17.  
  18. // Function to generate random number limited from `min` to `max`
  19. // Used to create a valid and safe random feed `start-index`
  20.  
  21. function getRandomInt(min, max) {
  22. return Math.floor(Math.random() * (max - min + 1)) + min;
  23. }
  24.  
  25. // Function to shuffle arrays
  26. // Used to randomize order of the generated JSON feed
  27.  
  28. function shuffleArray(arr) {
  29. var i = arr.length,
  30. j, temp;
  31. if (i === 0) return false;
  32. while (--i) {
  33. j = Math.floor(Math.random() * (i + 1));
  34. temp = arr[i];
  35. arr[i] = arr[j];
  36. arr[j] = temp;
  37. }
  38. return arr;
  39. }
  40.  
  41. // Get a random start index
  42.  
  43. function createRandomPostsStartIndex(json) {
  44. var startIndex = getRandomInt(1, (json.feed.openSearch$totalResults.$t - maxResults));
  45. if (window.console && window.console.log) console.log('Get the post feed start from ' + startIndex + ' until ' + (startIndex + maxResults));
  46. document.write('<scr' + 'ipt src="' + homePage + '/feeds/posts/summary?alt=json-in-script&orderby=updated&start-index=' + startIndex + '&max-results=' + maxResults + '&callback=randomPosts"></scr' + 'ipt>');
  47. }
  48.  
  49. // Widget's main function
  50.  
  51. function randomPosts(json) {
  52. var link, summary, img,
  53. ct = document.getElementById(containerId),
  54. entry = shuffleArray(json.feed.entry),
  55. skeleton = "<ul>";
  56. for (var i = 0, len = entry.length; i < len; i++) {
  57. summary = ("summary" in entry[i]) ? (entry[i].summary.$t.replace(/<.*?>/g, "")).substring(0, summaryLength) + '&hellip;' : "";
  58. img = ("media$thumbnail" in entry[i]) ? entry[i].media$thumbnail.url.replace(/\/s[0-9]+(-c)?/, "/s72-c") : noImageUrl;
  59. for (var j = 0, jen = entry[i].link.length; j < jen; j++) {
  60. link = (entry[i].link[j].rel == "alternate") ? entry[i].link[j].href : '#';
  61. }
  62. skeleton += '<li>';
  63. skeleton += '<img src="' + img + '" alt="" width="72" height="72">';
  64. skeleton += '<a href="' + link + '">' + entry[i].title.$t + '</a><br>';
  65. skeleton += '<span>' + summary + '</span>';
  66. skeleton += '<span class="clear"></span></li>';
  67. }
  68. ct.innerHTML = skeleton + '</ul>';
  69. }
  70.  
  71. document.write('<scr' + 'ipt src="' + homePage + '/feeds/posts/summary?alt=json-in-script&max-results=0&callback=createRandomPostsStartIndex"></scr' + 'ipt><div id="itempager" style="position:relative;"><a title="Dharla Ferdana" style="display:block!important;visibility:visible!important;opacity:1!important;position:absolute;bottom:10px;right:18px;font:normal bold 8px Arial,Sans-Serif!important;color:#666;text-shadow:0 1px 0 rgba(255,255,255,.1);text-decoration:none;" href="http://www.dhf.web.id" target="_blank">&#9658;DH-F</a></div>');
  72. //]]>
  73. </script>
Suka Artikel? Bagikan: Facebook Twitter Google+

0 Comments

Berkomentarlah Dengan Sopan

Posting Lebih Baru Posting Lama Beranda
Langganan: Posting Komentar (Atom)

Statistik

Flag Counter

Label

  • Blogging
  • Css
  • jQuery
  • SEO
  • Template
  • Widget
Diberdayakan oleh Blogger.

Arsip Blog

  • ▼  2014 (41)
    • ▼  September (33)
      • Download Software Untuk Membuat Logo
      • Mengenal Google Sandbox dan Solusinya
      • Learning From Lost Link Opportunities
      • Cara Membuat Label Cloud Flat Keren
      • Responsive Jquery Modal Box
      • Google Tidak Menyukai Blog Spam dan Ini Cara Mengh...
      • 5 Cara Terbaik Membuat Pengunjung Berlama-lama di ...
      • Anizan Alternatif Google Adsense
      • Cara Menambahkan Tombol On Off Video Di Blogger
      • Template Blogger Thesisense SEO Friendly 2014
      • Jquery Image Crousel Slider For Blogger
      • Slider with thumbnails For Blogger
      • Cara membuat efek Rotasi + Shadow pada Gambar Blog
      • Tuama Minahasa Template Blogger Responsive
      • Sisense Blogger Template
      • Cara memasang Iklan Di Bawah Artikel/Postingan
      • Cara Proteksi CSS Menggunakan Base64
      • Daftar Peserta Kontes SEO TemplatePremium
      • Jenis Jenis Doctype
      • Template Minima Colored 2.1 Final
      • Cara Memasang Scroll Arsip/Archive Blog Dengan Mudah
      • Related Posts Blogger : 6 in 1
      • Auto ReadMore dengan Gambar tanpa Javascript
      • Membuat Demo JSFiddle di Blog dengan JQuery
      • Iklan Gambar ala Google AdSense
      • Jquery Image Tooltip
      • Banned Spammer di Komentar Blog
      • Random Post Fast Loading
      • Menampilkan Pesan Pada Jam Tertentu
      • Apa Itu Backlink
      • You Comment I Follow
      • Anime First Responsive Blogger Template
      • CSS Sprite
    • ►  Agustus (8)

Mengenai Saya

Unknown
Lihat profil lengkapku
Copyright 2014 Tutorial Blogspot - All Rights Reserved
Template by Dino Desain - Powered Blogger