さくらのレンタルサーバーであれこれやってます。

prototype.js タブ切り替えを軽く!

kazuking searchのトップページでprototype.js でタブ切り替えを使っているんですが、

とにかく重い・・・。

あまりにも重過ぎてprototype.jsをgzip圧縮等と意味不明なこともしてみたりとあれこれ対策を講じていたんですが。結局のところkazuking searchではprototype.jsをタブ切り替えでしか使っていなかったので、prototype.jsを削ることにしました。

最新版のprototype.js(ver1.5.0)は72KBもあります。これだと気が遠くなりそうなので、所持しているver1.4.0(46.4KB)、ver1.3.1(28.3KB)の軽い方、ver1.3.1に手を付けることに。とは言えjavascriptの知識は哺乳瓶クラス。な~んとなく程度の知識なので削除→アップ→削除→アップ→修正→アップ・・・。この繰り返しで活動する事数時間。

≒3KBまで削ぎ落としました!

lightboxを軽量化させたliteboxみたいなもんですかね?一部書き換えた部分もありますが以前に比べかな~りスムーズに稼動してます。読み込みのスピードは相当あがったんではないでしょうか?prototype.tab.jsとでも言うのかな?(笑)


  1. var Class = {
  2.   create: function() {
  3.     return function() { 
  4.       this.initialize.apply(this, arguments);
  5.     }
  6.   }
  7. }

  8. var Abstract = new Object();

  9. Object.extend = function(destination, source) {

  10.   for (property in source) {
  11.     destination[property] = source[property];
  12.   }
  13.   return destination;
  14. }

  15. Function.prototype.bind = function(object) {

  16.   var __method = this;
  17.   return function() {
  18.     __method.apply(object, arguments);
  19.   }
  20. }

  21. function $() {

  22.   var elements = new Array();

  23.     for (var i = 0; i < arguments.length; i++) {

  24.     var element = arguments[i];
  25.     if (typeof element == 'string')
  26.       element = document.getElementById(element);

  27.     if (arguments.length == 1) 

  28.       return element;

  29.     elements.push(element);

  30.   }

  31.   return elements;

  32. }

  33. document.getElementsByClassName = function(className) {

  34.   var children = document.getElementsByTagName('*') || document.all;
  35.   var elements = new Array();
  36.   
  37.   for (var i = 0, len = children.length; i < len; i++) {
  38.     var child = children[i];
  39.     var classNames = child.className.split(' ');
  40.     for (var j = 0; j < classNames.length; j++) {
  41.       if (classNames[j] == className) {
  42.         elements.push(child);
  43.         break;
  44.       }
  45.     }
  46.   }
  47.   
  48.   return elements;
  49. }

  50. if (!window.Event) {

  51.   var Event = new Object();
  52. }

  53. Object.extend(Event, {

  54.   observers: false,
  55.   
  56.   _observeAndCache: function(element, name, observer, useCapture) {
  57.     if (!this.observers) this.observers = [];
  58.     if (element.addEventListener) {
  59.       this.observers.push([element, name, observer, useCapture]);
  60.       element.addEventListener(name, observer, useCapture);
  61.     } else if (element.attachEvent) {
  62.       this.observers.push([element, name, observer, useCapture]);
  63.       element.attachEvent('on' + name, observer);
  64.     }
  65.   },  

  66.   observe: function(element, name, observer, useCapture) {

  67.     var element = $(element);
  68.     useCapture = useCapture || false;
  69.     
  70.     if (name == 'keypress' &&
  71.         ((navigator.appVersion.indexOf('AppleWebKit') > 0) 
  72.         || element.attachEvent))
  73.       name = 'keydown';
  74.     
  75.     this._observeAndCache(element, name, observer, useCapture);
  76.   },

  77.   stopObserving: function(element, name, observer, useCapture) {

  78.     var element = $(element);
  79.     useCapture = useCapture || false;
  80.     
  81.     if (name == 'keypress' &&
  82.         ((navigator.appVersion.indexOf('AppleWebKit') > 0) 
  83.         || element.detachEvent))
  84.       name = 'keydown';
  85.     
  86.     if (element.removeEventListener) {
  87.       element.removeEventListener(name, observer, useCapture);
  88.     } else if (element.detachEvent) {
  89.       element.detachEvent('on' + name, observer);
  90.     }
  91.   }
  92. });

  93. /* prevent memory leaks in IE */

  94. Event.observe(window, 'unload', Event.unloadCache, false);

上記でタブ切り替えスクリプトに必要と思われるprototype.jsの役割は果たしております。もう少しスリム化 or 改変出来るところはあると思いますが、あればご指導コメント下さいませ。javascriptのLVは哺乳瓶クラスですので・・・。

CGI、PHP、JAVASCRIPT・・・。覚えることがいっぱいです(汗)

Trackbacks


Post a comment





Sponsored Link

Link

Web Tool

Banner Link

SEO Stats

デル株式会社 

Right Relation