æåãšã¯ç°ãªãããã®äž»ãªæ¬ ç¹ããªããajaxãã¯ãããžãŒã®ã¢ããã°ã®ã¢ã€ãã¢/å®è£ ãå ±æããããšæããŸãã ajax wikiããã次ã®ããšãããããŸã ã
ã¡ãªãã
- ãã©ãã£ãã¯ã®ç¯çŽã
- ãµãŒããŒã®è² è·ã軜æžããŸãã
- ã€ã³ã¿ãŒãã§ãŒã¹ã®åå¿ã®å éã
æ¬ ç¹
- æšæºãã©ãŠã¶ããŒã«ãšã®çµ±åã®æ¬ åŠã
- åçã«ããŒããããã³ã³ãã³ãã¯æ€çŽ¢ãšã³ãžã³ã§ã¯å©çšã§ããŸããã
- ãµã€ãçµ±èšã®å€ãäŒèšæ¹æ³ã¯ç¡é¢ä¿ã«ãªããŸãã
- ãããžã§ã¯ãã®è€éãã
ãã³ãã¬ãŒãã¯ã©ã€ã¢ã³ããã£ãã·ã¥ïŒä»¥åŸTCCïŒã®çºæã®ã¢ã€ãã¢ã«ã¯ãajaxãšåãå©ç¹ããããŸããããã®æ¬ ç¹ã¯ãŸã£ãããããŸããã
ã¢ã€ãã¢
ajaxã®å Žåãäž»ãªãããªãã¯ãã¯åã ã®ãããã¯ãããŒãããããšã§ãããããã«ãããã©ãã£ãã¯ãå€§å¹ ã«ç¯çŽãããŸãã ããããajaxã®å€§ããªåé¡ã¯ãå€ããã©ãŠã¶ãŒãšæ€çŽ¢ãšã³ãžã³ã®äž¡æ¹ãšã®åŒ·ãéäºææ§ãããã³æ¢åã®ãããžã§ã¯ããžã®è€éãªçµ±åã§ãã ãããã¯äžã®æ¬¡ã®ãµã€ããajaxã§æžãçŽããŠããºã«ã解ããšãçŸä»£ã®ãã¯ãããžãŒã®å©ããåããŠãåæ§ã®çµæãéæããããšã¯å®éã«ã¯äžå¯èœã§ãããå®è£ ãšäºææ§ã®ã³ã¹ãã¯äœããªããŸããïŒ ã ãã...æ°Žã泚ãçµããŸããã...ã¢ã€ãã¢ã¯éåžžã«åçŽã§ãïŒæŽæ°ããå¿ èŠããããã®ã ããããŒãããŸãïŒå®éã«ã¯ãajaxã®ã¢ã€ãã¢ã«ãã䌌ãŠããŸãïŒã å šäœã®åé¡ã¯å®è£ ã§ãã åºç€ã¯ãJSã®ããŒãºïŒlocalStorageãªã©ïŒã®ããã«ããçš®ã®ã¹ãã¬ãŒãžããµããŒãããããã®ææ°ã®æšæºãšããµãŒããŒåŽã§ãã³ãã¬ãŒãããã£ãã·ã¥ãããšããã¢ã€ãã¢ã§ããã ãããã暪æããŠãTCCãååŸããŸããã ã€ãŸãããµãŒããŒäžã®ãã³ãã¬ãŒãã®å Žåã®ããã«ãããŒãžå šäœã¯éåžžãå¥ã ã®ãã¡ã€ã«ïŒã³ãŒãïŒã«ãã£ãŠåŠçããã³åœ¢æãããéšåã«åå²ããããŠãŒã¶ãŒã«ãã£ãŠçµåããã³ç Žæ£ãããŸãã å€ãã®å Žåãäžéšã®æçã¯ãã£ãã·ã¥ããããã°ããã®éåæ§æãããŸããã ã¢ã€ãã¢ã¯ããã®ãã£ãã·ã¥ã®äžéšãã¯ã©ã€ã¢ã³ãåŽã«è»¢éããã¯ã©ã€ã¢ã³ããããµãŒããŒã«æ å ±ã転éãããã£ãã·ã¥ããªãããç¶æ ã«ç¶æããããã®ã€ã³ãã©ã¹ãã©ã¯ãã£ãäœæããããšã§ãã ã€ãŸã ããŒãžãããŒããããšããéåžžéãããµãŒããŒåŽã§ãã©ãŒã ãäœæããããã€ãã®ãããã¯ãã¹ãããããŸããããµãŒããŒãã£ãã·ã¥ããããããååŸãããåã«ç©ºã®ãŸãŸã«ããŸãããã®åœ¢åŒã§ã¯ãã¯ã©ã€ã¢ã³ãã«è»¢éããŸããæ¢åã®ãã£ãã·ã¥ã䜿çšããŠãçµæã®ããŒãžããŠãŒã¶ãŒã«è¡šç€ºããŸãã 説æããã次ã®ããšãæããã§ãã
- +äžèŠãªãããã¯ã圢æããããµãŒããŒåŽã§ãããã«æéãè²»ãããŸããïŒãããã®ãããã¯ããã£ãã·ã¥ããã³ã¹ããå«ãããã©ãŒãã³ã¹ã«å ããŠïŒã
- +äžèŠãªïŒéââè€ããïŒæ å ±ããµãŒããŒããã¯ã©ã€ã¢ã³ãã«éä¿¡ããŸããïŒããŠã³ããŒãé床ãšãã©ãã£ãã¯ã®åæžïŒã
- +åºæ¬çã«ãããã¥ã¡ã³ãã®æ§é ãšæ¹æ³ãå€æŽããŸããïŒå ããŠãæ¢åã®ãšã³ãžã³/ãµã€ããžã®çµ±åã®å®¹æããããã³æ€çŽ¢ãšã³ãžã³ãšå€ããã©ãŠã¶ã®åé¡ããªãããšã¯ãTCCãµããŒãããªãå Žåãåžžã«ãã«ããŒãžã§ã³ã®ããŒãžãåãåãããã§ãïŒãã¹ãŠã®ãããã¯ïŒ;
å šäœãšããŠãTCCã®äžé£ã®äœæ¥ã¯æ¬¡ã®ããã«è¡šãããšãã§ããŸãã
- ã¯ã©ã€ã¢ã³ãã¯ããŒãžãèŠæ±ããŸãã
- ãµãŒããŒã¯ãç¹å¥ãªãããã¯ããŒã«ãŒã§è«çãããã¯ã«åå²ããhtmlãçæããŸãã
- ãã®ããŒãžãåãåã£ãã¯ã©ã€ã¢ã³ãã¯ãããŒã«ãŒã§ããŒãžãåå²ãããã£ãã·ã¥ã«å ¥ããŸãã
- ã¯ã©ã€ã¢ã³ãã¯ãåããµã€ãã®å¥ã®ããŒãžãžã®ãªã³ã¯ããã©ããŸãã
- ãµãŒã㌠ã©ã®ãããã¯ããã£ãã·ã¥ãããããç¥ããšããã£ãã·ã¥ã«é¢ä¿ã®ãªããããã¯ã«ã€ããŠã®ã¿ã空ã®ãããã¯ããŒã«ãŒãšå¡ãã€ã¶ããããããã¯ããŒã«ãŒã§æ§æãããããŒãžã圢æããŸãïŒã€ãŸããæ¬è³ªçã«å€ãããŒãžãšæ°ããããŒãžã®å·®åã圢æããŸãïŒã
- ãã®ãããªå·®åãåä¿¡ããã¯ã©ã€ã¢ã³ãã¯ããã£ãã·ã¥ããå¿ èŠãªãããã¯ãæœåºããŠããŒãžãåããŸãã
- å©ç
å®è£
ãã¢ã®ãµã³ãã«ãçæéã§åéããããšã¯æããã§ãããããã£ãŠãå€ãã®ããšã«ç®ãã€ã¶ããŸãïŒhtmlã®è§£æã«jQueryã䜿çšãããªã©ãè¿ éãªçµæãåŸãããã®è»œãïŒã
以äžã«ç€ºãããã«ãæ¹åã§ãããã®ã®ãªã¹ãã§ãã®ã§ããã¢ã®äŸïŒæ¬çªç°å¢ã§ã®ã¢ããªã±ãŒã·ã§ã³ã®èŠ³ç¹ããïŒãæ¹å€ããªãã§ãã ããã
ãŸãããã£ãã·ã¥çšã«ãããã¯ãããŒã¯ããæ¹æ³ã決å®ããå¿ èŠããããŸãã ç°¡åã«ããããã«ãæšæºã®html spanèŠçŽ ã䜿çšããŸãããããã¯ãå«ãŸãããããã¯ã«ã»ãšãã©åœ±é¿ãäžããªãããã§ãïŒã€ãŸãããã¹ãããããããŒãã£ã³ã°ãããã¯ããã³ã€ã³ã©ã€ã³ã³ã³ããã¹ãã§éåžžåäœããŸãïŒã ãããããŒã«ãŒã§ããããšã瀺ãããã«ã次ã®ååã«ãã£ãŠåŒã³åºãããç¹å¥ãªã¯ã©ã¹ãéžæãããŸããã
tcc_ <ID> _ <MODE> [_ <TTL>];
ã©ãã§ïŒ
<ID>-äžæã®ãããã¯çªå·ã
<MODE>-ãã£ãã·ã³ã°ã¢ãŒãïŒä»¥äžã«ã€ããŠïŒã
<TTL>-ãã£ãã·ã¥ã®æå¹æéã
ãã£ãã·ã³ã°ã¢ãŒãã¯ãã¯ã©ã€ã¢ã³ããåŠçããŠãããããã¯ãã¯ã©ã€ã¢ã³ãã«ç€ºãããšãç®çãšããŠããŸãã 3ã€ã®ãã£ãã·ã¥ã¢ãŒããå²ãåœãŠãããŸããã
rïŒãªã¢ã«ã¿ã€ã ïŒ-ãã£ãã·ã¥ã®å¯Ÿè±¡ã§ã¯ãªããããã¯ïŒããŒãžããªããŒãããããã³ã«æŽæ°ãããŸãïŒ;
sïŒãµãŒããŒïŒ-ãµãŒããŒäžã«åœ¢æããããã£ãã·ã¥ã®å¯Ÿè±¡ãšãªããããã¯ïŒãã£ãã·ã¥å ã®ãããã¯ã圢æãŸãã¯çœ®æããå¿ èŠãããå Žåã«äœæãããŸãïŒ;
cïŒã¯ã©ã€ã¢ã³ãïŒ-ã¯ã©ã€ã¢ã³ãããã£ãã·ã¥ãããããŒã¿ãé 眮ãã空ã®ãµãŒããŒäžã«åœ¢æããããããã¯ã
å®è£ ã«ç§»ããŸãããïŒãµãŒããŒã³ãŒãã¯PHPã«ãããŸãããäœã«ã§ãæžãæããããšã¯é£ãããªããšæããŸãïŒã ãŸãããããã¯ã®å é ã圢æããåçŽãªé¢æ°ãäœæããŸãïŒå®éããã®é¢æ°ã¯ãããã€ãã®å ¥åããŒã¿ã«åºã¥ããŠãç¹å¥ãªã¯ã©ã¹ã§æšæºã¹ãã³ã圢æããå¿ èŠããããŸãïŒã
function blockStart($id, $ttl = false)
{
global $curTime;
global $tcc;
if (!$ttl)
{
echo '<span class="tcc_' . $id . '_r">';
return true;
}
else if (isset($tcc[$id]) && ($tcc[$id] > $curTime))
{
echo '<span class="tcc_' . $id . '_c_' . $tcc[$id] . '">';
return false;
}
else
{
echo '<span class="tcc_' . $id . '_s_' . $ttl . '">';
return true;
}
}
ã芧ã®ãšããããã®é¢æ°ã¯2ã€ã®å€éšå€æ°ã$ curTimeïŒå¿ èŠãªåœ¢åŒã®çŸåšæå»ïŒãããã³$ tccïŒã¯ã©ã€ã¢ã³ãã®ãã£ãã·ã¥ã®ãªã¹ãã以äžã®ã¯ã©ã€ã¢ã³ããããµãŒããŒã§åä¿¡ããããšã«ã€ããŠèª¬æããŸãïŒã䜿çšããŸãã é¢æ°ã®æ®ãã®ããžãã¯ã¯éåžžã«ã·ã³ãã«ã§ç°¡åã§ãã
次ã«ãã¹ãã¬ãŒãžïŒãã®å Žåã¯localStorageïŒãæäœããããã®ç¹å®ã®ãµãŒãã¹é¢æ°ã»ãããã¯ã©ã€ã¢ã³ãåŽïŒã€ãŸããJSåŽïŒã§èšè¿°ããå¿ èŠããããŸãã
function storSet(id, ttl, value)
{
localStorage.setItem('tcc_' + id, ttl + ':' + value);
}
function storGet(id, ttl)
{
var data = localStorage.getItem('tcc_' + id);
if (data == null) return null;
var data_ttl = data.substr(0, 12).split(':', 1)[0];
if ((data_ttl != ttl) || (data_ttl <= curTime)) return null;
return data.substr(data_ttl.length + 1);
}
ããã§ããã¹ãŠãç°¡åã§ã... storSetã§ã¯ããããã¯ã®æå¹æ§ããã§ãã¯ããããã«idãæå®ããŠttlãä¿åããããšãå¿ããã«ããŒã¿ãä¿åããŸãã storGetã§ã¯ããã®IDã§ãããã¯ãååŸããttlã®æå¹æ§ã確èªããæåããå Žåããã£ãã·ã¥ããããããã¯ãè¿ããŸãã
次ã«ããµãŒããŒããåä¿¡ãããã¹ãŠã解æããã¡ã¬ããŒãµãŒãå¿ èŠã§ãã
function tcc()
{
var item;
while ((item = $('[class^=tcc_]:first')) && (item.length != 0))
{
var cn = item.attr('class').split('_');
if (cn[2] == 's')
{
var nItem = item.clone();
var cItem;
while ((cItem = nItem.find('[class^=tcc_]:first')) && (cItem.length != 0))
{
cItem.replaceWith('<span class="cache_' + cItem.attr('class') + '"></span>');
}
storSet(cn[1], cn[3], nItem.html());
}
else if (cn[2] == 'c')
{
var data = storGet(cn[1], cn[3])
if (data == null)
{
alert('critical error');
}
else
{
var nItem = $('<span>' + data + '</span>');
var cItem;
while ((cItem = nItem.find('[class^=cache_tcc_]:first')) && (cItem.length != 0))
{
var ncn = cItem.attr('class').split('_');
var rItem = item.find('[class^=tcc_' + ncn[2] + '_]');
if (rItem.length != 0)
{
cItem.replaceWith('<span class="' + rItem.attr('class') + '">' + rItem.html() + '</span>');
}
else
{
cItem.remove();
}
}
item.replaceWith(nItem.html());
}
}
if (cn[2] != 'c')
{
item.replaceWith(item.html());
}
}
...
}
ã³ãŒãã¯éåžžã«ééçã§ãããããããã§èª¬æããããšã¯ããŸããããŸããã ãããã¯ãèŠã€ãã->ãããããã£ã->å¿ èŠãªã¢ã¯ã·ã§ã³ãçæããã
ãã®çµæãã¯ã©ã€ã¢ã³ãåŽã§è¡ãã¹ãããšã¯ããµãŒããŒããã£ãã·ã¥ãæã£ãŠããããšããµãŒããŒã«ç¥ãããããšã ãã§ããããã«ããããµãŒããŒã¯åŸç¶ã®ããŒãžãæ£ãã圢æã§ããŸãã ãã©ã³ã¹ããŒãã®åœ¢åŒã§ã¯ãã·ã³ãã«ã§åºæ¬çãªCookieãéžæãããŸããã
function tcc()
{
...
var storage = '';
for (var i = localStorage.length - 1; i >= 0; i--)
{
var key = localStorage.key(i);
var prefix = key.split('_', 1)[0];
var key = key.substr(prefix.length + 1);
if (prefix != 'tcc') continue;
var ttl = storExist(key);
if (ttl != null)
{
if (storage.length != 0) storage += ',';
storage += key + '_' + ttl;
}
else
{
localStorage.removeItem('tcc_' + key);
}
}
var cookie = 'tcc=' + escape(storage) + ';path=/';
if (storage == '') cookie += ';expires=Thu, 01-Jan-1970 00:00:01 GMT';
document.cookie = cookie;
}
Cookieã¯éåžžã«ééçã«åœ¢æãããå庫ãééããŠãããã¯ãæ¢ããCookieã®ãªã¹ãã«åãããã¯ã®IDãšTTLãèšå ¥ããŸãã æå®ãããã³ãŒãã§ã¯ãå¥ã®ãµãŒãã¹é¢æ°storExistã䜿çšãããŸããããã¯ããããã¯ãæå¹ãªå Žåã«ãããã¯ã®TTLãè¿ãããšãé€ããŠãstorGetãšã»ãŒåãã§ãã
function storExist(key)
{
var data = localStorage.getItem('tcc_' + key);
if (data == null) return false;
var data_ttl = data.substr(0, 12).split(':', 1)[0];
if (data_ttl <= curTime) return null;
return data_ttl;
}
ããŠãã¯ã©ã€ã¢ã³ãåŽã§ã¯ãåºæ¬çã«ãã¹ãŠãå®è¡ãããµãŒããŒã«æ»ããŸããã åé ã§ãç¹å®ã®$ tccé åïŒããŒã«ãŒãããã¯ã®åœ¢ææ©èœçšïŒã«èšåããŸãããããã¯ã圢æããå¿ èŠããããŸãã
if (isset($_COOKIE['tcc']))
{
$list = explode(',', $_COOKIE['tcc']);
for ($i = 0; $i < count($list); $i++)
{
$item = explode('_', $list[$i]);
if (count($item) == 2)
{
$tcc[$item[0]] = $item[1];
}
}
}
ãã¹ãŠãåºæ¬ã§ãã
ãŸãšã
ç§ã¯å®éšã®çµæã«éåžžã«æºè¶³ããŠãããšèšããªããã°ãªããŸããã æåŸã®ã¹ã¯ãªããã§ã¯ããã£ãã·ã¥ãèªåçã«åŠçããå¯èœãªéãå°ãªããã©ãã£ãã¯ãããŒãžããŠéä¿¡ããåçŽãªã·ã¹ãã ãåŸãŸããã æçµçãªJSã¹ã¯ãªããïŒçè«çã«ã¯åžžã«ã¯ã©ã€ã¢ã³ããããµãŒããŒã«éä¿¡ããå¿ èŠããããŸãïŒã¯ã2kã®å§çž®YUVãã©ãã£ãã¯ãåãåããŸãããéå§çž®ã®GZipãã©ãã£ãã¯ã¯ãç§ã«ãšã£ãŠã¯ããªã蚱容ç¯å²ã§ãã ãŸããå€ããã©ãŠã¶ãŒãŸãã¯æ€çŽ¢ãšã³ãžã³ã®å Žåãã¯ã©ã€ã¢ã³ãåŽã¯JSãlocalStorageãŸãã¯CookieããµããŒãããªãããããµãŒããŒã¯åžžã«ã¯ã©ã€ã¢ã³ãåŽã«ãã£ãã·ã¥ããªããšå€æããåžžã«ãã«ããŒãžã圢æããŸãïŒã€ãŸããé«éœ¢è ãšã®äºææ§ãåããèªåã·ã¹ãã ãæã«å ¥ããŸãããããã¯ç§ã«ãšã£ãŠãšãŠãã¯ãŒã«ã§ãïŒã ãŸãããã³ãã¬ãŒããšã³ãžã³ãšç°¡åã«çµã¿åãããŠãããã¯ãããŒã¯ããããã°ã©ããŒãäžå¿ èŠãªhemoã䜿ããã«ã¯ã©ã€ã¢ã³ãåŽãšãµãŒããŒã®äž¡æ¹ã«ãã£ãã·ã¥ã§ãããããªãåçŽãªãµãŒããŒå®è£ ã泚ç®ã«å€ããŸãã ãŸãããªãã·ã§ã³ã§ããã®æ¹æ³ã§JSãšCSSãããã¥ã¡ã³ãã®æ¬æã«çŽæ¥ãã£ãã·ã¥ããããšãã§ããŸãïŒã¡ãªã¿ã«ããã®å Žåãå¿ èŠãªã¹ã¯ãªãããšã¹ã¿ã€ã«ããã¹ãŠå«ããããšãã§ããŸãïŒã ãã®å ŽåãåJSãŸãã¯CSSãåå¥ã®ãããã¯ã«åé¢ããã³åé¢ããããšã«ãããå¿ èŠãªJSããã³CSSã³ãŒãã®ã¿ãããŒããã䟿å©ã§åºæ¬çãªã·ã¹ãã ãååŸãããµãŒããŒãªã¯ãšã¹ããæå°éã«æããŸãïŒãã®ãªã¯ãšã¹ããåãªããã£ãã·ã¥æ€èšŒã§ãã£ãŠãïŒã
çæïŒãŸãã¯å¥ã®æ¹æ³ã§ã§ããããšïŒ
æããã«ãjQueryãåãé€ãå¿ èŠããããŸãïŒããã¯ç解ã§ããŸãïŒã
ãããã¯ã®ããŒãã³ã°ã<ïŒ-cc_ <ID> _ <MODE> [_ <TTL>]->ã®ãããªãã®ã«å€æŽããŸãããã®å Žåãæšæºãšã®äºææ§ãå ±æhtmlã®æŽåæ§ãå¿é ããã«ãããã¯ãããŒã¯ã§ããŸãïŒãã ããã¹ãã³ãããã¯ã§ã¯ãå®æããhtmlãããã¯ã®ã¿ãã«ããããå¿ èŠããããŸããããããªããšãTCCãã©ãŠã¶ãŒãããµããŒããããŠããªãå Žåããã¹ãŠããã©ãã©ã«ãªããŸãïŒã
ã¢ã€ãã¢èªäœã®äž»ãªæ¬ ç¹ã¯æ¬¡ã®ãšããã§ãã
- åã¯ã©ã€ã¢ã³ãã®ãã£ãã·ã¥ã®é¢é£æ§ãç£èŠãããµãŒããŒåŽã®å¿ èŠæ§ïŒããšãã°ããªã³ã©ã€ã³ã¹ãã¢ã§ååã®ãã¹ã±ããã®å Žåããã¹ã±ãããå€æŽãããŠã¯ã©ã€ã¢ã³ãã«åºæã§ããå Žåãå€æŽããå¿ èŠããããŸããã€ãŸããã¯ã©ã€ã¢ã³ãã®ãã£ãã·ã¥ãå€ããªã£ãŠããããšãç解ããå¿ èŠããããŸãïŒã
- Cookieã®æœåšçãªå¢å ã¯ãã¯ã©ã€ã¢ã³ããããµãŒããŒãžã®ãã©ãã£ãã¯ã®å¢å ã«ã€ãªãããŸãïŒãã ããæçµçã«éžæãããTTLãããã¯ãšãã®æ°ã«ãã¹ãŠäŸåãããããããã¯ãŸãã«æœåšçãªåé¡ã§ãã
ãŸããããããã¹ãŠã§ã...
æé©åã®ããã®åççãªæ¹å€ãšã¢ã€ãã¢ãèãããã§ãã ãã¹ãŠã®è³ªåã«åãã§ãçãããŸãã
UPDã PSå®äŸãžã®ãªã³ã¯ïŒ catsmile.heliohost.org/Mear/tcc.php ïŒå Žæã«ã€ããŠã¯catsmileã«æè¬ïŒ
UPD.2 PPSãã®ãããã¯ã®ç®çãç解ãããããŸãããæé€ããããã«ãæ確ã«ããŸãã æ¬åœã®æå³ã§ã®ajaxã®çœ®ãæãã¯ææ¡ããŸããã ç¹å®ã®å®è£ ã§ã¯ãã¯ã©ã€ã¢ã³ããã£ãã·ã³ã°ã®ãªãã·ã§ã³ã®ã¿ãæ€èšããããšãææ¡ããŸãã ãŸããå®èšŒãããã³ãŒãã¯å®å šã§ãããšäž»åŒµãããã¢ãããŒããå®èšŒããç®çã§ã®ã¿äœæãããŸããã ãã®ãããã¯ã®äž»ãªç®æšã¯ãã¯ã©ã€ã¢ã³ãåŽã§ããã€ãã®ãããã¯ããã£ãã·ã¥ããã¢ã€ãã¢ãšããããã®ãããã¯ãæäœããæ¹æ³ã«é¢ããã¢ã€ãã¢ãšã³ã¡ã³ããåéããããšã§ãã