Gzip js圧縮

キャッシュ-ストレージの一時データまたはデバイス。読み取り/書き込みを高速化するために作成されます。 すべてのプログラマーはこれを知っています。 Webサイトの読み込みを高速化することは、サーバーからクライアントで終わる広範なトピックです。 残念ながら、js-codeを組み合わせてキャッシュするための多かれ少なかれ適切なソリューションを見つけることができなかったので、ブログについて独自のスキームを書きました。

圧縮「 packer 」があります。これは、すべてのフォーマット文字を削除し、js内の関数と変数の名前を変更し、いわゆる スクリプトの縮小版。 大規模なjQuery、TinyMCE、プロトタイプライブラリの例で、誰もがこれに精通しています。 コードが完全に判読不能になるという事実に加えて、変数名が動的な場合、コードが失敗する可能性があります。

私のアイデアはシンプルです-開発者はモジュール構造を維持するためにjs / cssをファイルに分割する必要があります。 通常、コントローラーで、テンプレートに手動で登録する代わりに、このドキュメントに添付する必要があるファイルのリストを作成します。 ただし、テンプレートを表示する前に、リストを通過し、変更中にローカルファイルをチェックし、それらを1つのファイルにマージして、md5ハッシュから形成された名前でgzファイルを作成または上書きするキャッシュ関数が呼び出されることを確認する必要があります着信ファイルの名前。

すべてがシンプルで、考えるのに合計4時間かかりました。 Controllerクラスからcache_jsメソッドをもたらします。



 function cache_js(){ $arrNewJS=array(); $strHash=''; $strGzipContent=''; $intLastModified=0; //    foreach ((array)$this->scripts as $file){ if (substr($file,0,5)=='http') continue; if ($file[0]=='/') $strFilename=sys_root.$file; else $strFilename=sys_root.'app/front/view/'.$file; $strHash.=$file; //     $strGzipContent.=file_get_contents($strFilename); $intLastModified=$intLastModified<filemtime($strFilename) ? filemtime($strFilename) : $intLastModified; } $strGzipHash=md5($strHash); $strGzipFile=sys_root.'app/front/view/js/bin/'.$strGzipHash.'.gz'; //    gz- if (file_exists($strGzipFile) && $intLastModified>filemtime($strGzipFile) || !file_exists($strGzipFile)){ if (!file_exists($strGzipFile)) touch($strGzipFile); //    php  zlib   $gz = gzopen($strGzipFile,'w9'); gzputs ($gz, $strGzipContent); gzclose($gz); } //     $arrNewJS[]='js/bin/'.$strGzipHash.'.gz'; $this->scripts=$arrNewJS; }
      
      





CSSについては書きませんが、考え方は似ています。 唯一の問題は、キャッシュの自動化と受信ファイルの順序です。 ただし、圧縮の結果、5つの要求が1になり、合計サイズが3倍減少しました。

同じを読む







オリジナル



All Articles