-->

2011-11-18

javascriptのinclude

テスト用のinclude関数です。
実際にローカル以外で使用すると非同期ではないので、
読み込みごとに停止しているのが目立つようになりますので使えません。
var include = function(){
  var hostnamePattern = new RegExp(
    "^https?://" +
      location.hostname.replace(
        new RegExp("[.\\\\+*?\\[\\^\\]$(){}=!<>|:\\-]", "g"),
        "\\$&") +
      "/"),
  protocolPattern = new RegExp("^[A-Za-z]+://"),
  statusOkPattern = new RegExp("^[^23]"),
  getErrorFunc = function(jqXHR, textStatus, errorThrown){
    var status = String(jqXHR.status);
    if (status.match(statusOkPattern))
    {
      jqXHR.responseText = "";
      throw textStatus + " " + status + " " + errorThrown + ".";
    }
  };
  return function(path){
    var ret = "";
    if (path.match(hostnamePattern) || !path.match(protocolPattern))
    {
      ret = $.ajax({
        type: "GET",
        url: path,
        dataType: "text",
        async: false,
        error: getErrorFunc
      }).responseText;
    }
    else
    {
      throw "other site url. \"" + path + "\"";
    }
    return ret;
  };
}();

例。
...
eval(include("mb_convert_kana.js"));
...

非同期で読み込むがファイルに依存性がある場合RequireJSなどがあるようです。
http://requirejs.org/docs/api.html
http://zudolab.net/blog/?p=451

もしくは2回目以降のアクセスは304になることを期待して1つのファイルにまとめて<head>に書くというのもありだと思います。
非同期でも同期でも100ファイル読み込んだら200か304を100回webサーバーから受け取るということに変わりないと思うので。
$ echo "var a=1;" > 00_a.js
$ echo "var b=a+1;" > 01_b.js
$ ls -1 *.js | grep -v ^all.js$ | while read -r f; do cat $f; done > all.js
$ cat all.js
var a=1;
var b=a+1;

0 件のコメント: