我正在开发一个项目,我开发了一个关于travelagency的网站。事情变得越来越好,正在产生更多的流量。问题在于缓慢生成的pricetable。我和我的客户认为,由于可用的资金,memcache应该做到这一点。退出我开始时我已经用新的jQuery ajax代码重写了旧的ajax代码。今晚的其他一些帖子有点涉及这个话题。
现在我有以下代码显示某个月的价格:
function ShowPriceTable(targetElement, accommodationID, month)
{
$.ajax({
type: "POST",
url: basePath + "/ajax/GetPriceTable.php",
data: "accommodationID="+accommodationID+"&month="+month,
success: function(data){
$("#"+targetElement).html(data);
$.ajax({
type: "POST",
url: basePath + "/ajax/WriteCache.php",
data: "accommodationID="+accommodationID+"&month="+month+"&data="+data,
});
}
});
}
GetPriceTable.php是一个大文件,执行许多查询,并在那里进行了大量的价格计算。这一切都导致HTML表格的价格。存储在data
中的输出将注入div的innerHTML属性,在本例中为targetElement
,因为它必须是可调整的。
我想,好吧..当我在data
中输出正确的输出时,我只是用数据发起另一次对WriteCache.php
的调用。然后,数据由$cache->set("my_key", $_POST["data"]);
存储在内存缓存服务器中(使用标头并设置为过去以确保浏览器的“新”访问)。
现在来了一个棘手的部分......无论我尝试什么,我的缓存中只能得到4067个字符。我已经没有了我能想到的选择。这只是总产出的一小部分...... 加法,alert
data.length
显示了我正在寻找的住宿价格,长度是98.858。
你有什么建议可能导致这种奇怪的行为吗?数据是否可以一点一点传递? Memcache有一个选项chunk_size
,默认设置为8192(我想是字节?,documentation不告诉..)
非常感谢任何帮助!
干杯!
P.S。标签memcached必须是memcache但我不能选择那个选项..
更新 问题与memcache无关。出于某种原因,我的数据在重新发送时会发生变化。这导致无效的HTML,由于某种原因,它没有设置到缓存中并且没有显示在我的输出中(邮件给自己)但是当我将结果(使用成功:在第二次调用中)输出到另一个DIV时,我确实看到了'损坏'输出......
答案 0 :(得分:1)
我已经明白了,虽然我整个晚上都花了...我的输出包含HTML实体。你已经猜到了。 HTML实体以&符号开头,同时也是由$_GET
,$_POST
或$_REQUEST
检索的数据的分隔符字符。一个简单的escape(data)
就可以了。感谢所有花时间去挖掘这个的人!
答案 1 :(得分:0)
您可以尝试在php.ini中设置MEMCACHE_COMPRESSED
,或者在设置函数la Memcache::set($key, $var, MEMCACHE_COMPRESSED);
中将其作为标志传递以压缩值。