SAE memcache

SAE的memcache基本继承了php本身的memcached,基于memcached有所优化

Typecho Mostcache 插件

Mostcache插件提供了MySQL的cache和SAE的memcache两种方案,因为路上部署在SAE上面,所以直接使用memcache方案。

使用memcache后,chrome浏览器的函数调用从53000+降低到了5300左右,也就是说只有原来的十分之一,而IE11和firefox则更加明显,直接降低到700-800,即只有原来的1.4%左右。换而言之,使用memcache后,性能提升明显。

使用cache后IE/firefox的函数调用图
callgraph1426240020-752.png

究其原因,因为Typecho在设计之初,对数据库进行了充分(过分)的抽象,导致加载页面的时候,会产生过多(复杂)的数据库查询。这就降低了整个网站的效率。

从第一个图片可以看出,在数据库查询是,对mysql_query的查询Inc:104.455ms,Excl:104.455ms,产生了62次调用;对Tyecho_Db_Query::filterColumn的查询Inc:101.316ms,Excl:87.362ms,产生了234次调用,而其对ctype_alnum则有15736次调用。两个大的数据库查询函数调用占到了接近50%(25%+24%)的总执行时间(416.407ms)。从第三个图,也就是采用了cache之后IE访问的函数调用图可以看到:总的执行时间为46.084ms,而且关于数据库查询的时间占用也下降到了<20%。

这再次说明cache是多么的重要!

意外发现

  1. chrome 对后台的调用比IE和firefox多了7倍(5300/750),而且还调用了两次
  2. 采用了gzip压缩网站之后,经常会出现ERR_CONTENT_DECODING_FAILED的错误,导致网站加载失败。。

为什么选择 Typecho

之前花了一个星期调试和优化emlog,使其能够更好的运行在SAE上。但是搞来搞去没搞个结果的时候,(准确说是寻找一个好用的markdown 框架/编辑器的时候),突然注意到Typecho。Typecho简单漂亮的界面吸引到了我,如果继续搞emlog,我还要进行前端的大修(HTML5+CCS3化),这是一个巨大的工程。但是Typecho则完全不用,前端非常简洁和漂亮。就如Typecho官网所说的那样,作为一个写代码的,有时候需要的就是些简单高效记录自己思考和学习的轻博客而已。Typecho很符合这个要求,也符合我的需求。而且居然已经有了SaeUpload这样适用于SAE 环境的插件,免得我再去coding。只是尼玛一个星期的时间完全做无用功实在是浪费啊

如何部署在SAE上

因为之前部署emlog的时候使用的是SAE上面的应用,结果发现其版本严重落后,导致增加了大量的后续修补工作。所以这次部署Typecho时,虽然SAE也有应用,但是还是采用了下载Typecho官方版本,然后再部署到SAE的方式。

步骤

  1. 新建一个应用,使用带有svn的IDE(Netbeansphpstorm等)update这个应用仓库来创建一个新的项目
  2. 从官网上下载最新版本的Typecho,合并到新创建的项目中,再commit到应用仓库中
  3. 下载SaeUpload插件,合并到项目中,再commit到应用仓库
  4. 输入 应用网址/install.php Typecho会识别出SAE环境,按照指引填入信息。由于SAE不能直接写入文件,所以Typecho会提示手动建立config.inc.php文件。
  5. 在IDE或者SAE提供的代码编辑器中建立config.inc.php文件,复制Typecho产生的内容保存到其中。如果是IDE下建立则还需要合并config.inc.php文件并commit到应用仓库中。
  6. 登录刚才建立的Typecho博客后台,开启SaeUpload功能。至此,Typecho博客系统就算真正部署在SAE上面了。

后续

  1. 添加了几个插件

    • google code prettify : 让代码部分看起来更漂亮一些
    • 多说插件: 使用多说社会化评论框架
  2. 添加了几个分类

    • 生活
    • Code (Android, webfrontend,webbackend)
  3. 想完成的事情

    • 同步所发日志到各个平台(Qzone, LJ, etc.)
    • 添加除了首页之外的其他分类

不信了这个代码的问题

斜体文字 这是斜体格式

<?php echo"hello world!"; ?>
function _rFrom() {
    $result = array();
    $params = func_get_args();

    foreach ($params as $param) {
        $result[$param] = isset($_REQUEST[$param]) ?
            (is_array($_REQUEST[$param]) ? NULL : $_REQUEST[$param]) : NULL;
    }

    return $result;
}


标题2

标题3

标题1?

选择了半天,还是选择了Typecho来创建这个blog。目前功能还是够用的。

其实用什么技术,除了原有的技术栈和目标技术的使用人群规模以外,其他影响微乎其微。

最重要不是技术,还是背后的原理,以及用它实现的功能本身。