分类存档: PHP
IN:PHP 标签: fl, perfomance, php, smarty, xhprof 评论: 0最近利用空闲的时间准备对Fl进行重构,Fl是一个支持模版语法(如:Smarty3模版语法)的HTML/Js/Css解析,压缩,美化,检测等工具。关于Fl的更多信息你可以从github上了解。
但是重构完HTML的解析之后,在使用simpletest进行单元测试的时候,使用豆瓣首页的源代码发现比较慢,发现需要1.5s,但在第一个版本中只要200ms就解析完了,这个差距是完全不能接受的。虽然这次重构对很多方法进行了抽象,但应该不至于直接导致这么慢。
之前看过可以使用Facebook开发的xhprof来分析PHP的性能,安装了下分析后终于发现了直接影响到性能的瓶颈。xhprof的安装网上有很多教程,这里就不在说明了。 这里就有个安装的教程: http://hi.baidu.com/thinkinginlamp/blog/item/f4bd08fa1a03ba9e59ee90fd.html
继续阅读 »
IN:PHP 标签: smarty3, 优化, 工具, 性能 评论: 1之前的文章中提到在一些复杂的模版页面中,Smarty3有性能问题。经过分析发现,主要是管理文件依赖,自定义函数参数以及一些依赖导致的。目前官方发布的新版本中虽然进行了一些性能优化,但并没有彻底解决这个问题。既然官方还没有解决,在实际项目中如何解决这个问题呢?
结合前端编译平台,可以在开发的时候还是使用Smarty3的这些新特性(毕竟这些新特性给开发和代码维护带来了非常多的便利),然后在上线前编译的时候将这些新特性的书写方式还原。如:将自定义函数还原到代码中。
经过一段时间开发和测试之后,目前已将代码放到github上,https://github.com/welefen/smarty3optimizer。有需要的同学可以了解下
继续阅读 »
IN:PHP, 前端开发 标签: baidu, 服务, 百度, 编译平台 评论: 3之前写过如何减少代码上线过程中对线上服务的影响,文中提到的方法是将所有的代码上到服务器的一个临时目录,然后一起操作cp到目标目录。这种方式虽然可以大大的减少上线过程中对线上服务的影响,可以影响时间缩短到2分钟以内。但对于0故障的服务来说,2分钟的服务故障还是非常不能接受的(比如:百度新首页)。
由于静态文件和模版是上到不同的服务器,静态文件还部署到CDN。模版是和后端代码放在一起。这样如果还是原文件名的不能彻底解决问题。
我们知道,任何的静态文件最开始都是在模版里引用了才生效,比如:在模版里有个link,或者有个外链的script。
通过分析,如果上线的时候,将静态文件先上,并且将有改动的静态文件全部重命名的话就可以彻底解决这个问题。一方面静态文件重命名后不会干扰线上正在使用的静态文件,另一方面模版还没上的时候,这部分新的静态文件将不会引用,待模版上线后就会全面切到新的静态文件模式下。
继续阅读 »
IN:PHP 标签: baidu, google, imghash, phash, php, sift, tineye, 图片指纹, 相似搜索 评论: 8前几天看到阮一峰的博客里写到关于相似图片搜索的原理, 里面介绍了Google相似图片搜索的大致原理,主要是从Neal Krawetz博士的LOOKS LIKE IT翻译而来。文章详细的介绍了相似图片搜索处理的相关步骤,并且给出了一个python的实现,由于我对PHP比较熟,所以写了个PHP的版本。 继续阅读 »
IN:PHP 标签: ActionChain, Dispatcher, php, Router, ThinkPHP, 自定义URL, 路由 评论: 0什么是ActionChain
在MVC框架中,一般都提供对自定义URL的支持。也就是将所有的请求都重定向到index.php,然后PHP程序通过URL配置规则来确定执行什么样的逻辑。
随着产品业务逻辑越来越复杂,页面模块化程度越来越高,一个URL要执行多个逻辑功能。通常的情况就是在对应的Action里分别调用不同模块的接口,然后输出到模版。但这种方式对代码的维护和管理非常不方便,不能很快速的定位到一个URL执行了哪些逻辑。
ActionChain就是用来解决这个问题的,它可以在一个URL里指定按顺序执行多个Action,每个Action可以是相互独立的。这样可以极大的方便了代码的阅读性和维护性。
什么是ThinkPHP框架
THinkPHP是一个国人开发的已经有多年历史的框架,已经有越来越多的中小型产品使用这个框架开发。并且我也用这个框架开发了多个应用。
这个框架提供了大量的非常快捷的访问接口,这也是我为什么喜欢这个框架的原因。并且相对于Zend, Yii, CI等框架,要简洁的多。
http://thinkphp.cn/ 可以通过这个URL了解更多的信息
继续阅读 »
IN:PHP, wordpress, 前端开发 标签: ajax, compress, css3, event, free, github, google, html, html5, localstorage, manifest, pjax, plus, pushstate, theme, wordpress, 免费, 开源 评论: 69ps: 由于plus这个名字在wordpress.org已经使用,该主题改名为 gplus,给大家带来的不便敬请谅解。
Google+出来后,立即被它简洁的界面吸引了。并且用了ajax+pushstate等技术,以及一些键盘事件,对用户体验有非常大的提升。
正好最近想给自己的博客做个wordpress主题,顺便学习下制作wordpress主题的过程,于是就想到了借鉴google plus的界面了。
下面是plus版主题的预览图:

继续阅读 »
IN:PHP, 前端开发 标签: perfomnace, smarty3, 优化, 性能 评论: 4前篇文章中主要介绍了使用smarty3下的开发规范以及从smarty2迁移到smarty3中要注意的问题。
虽然刚出来的时候官方对性能这块给出的结果是smarty3的性能相比smarty2要好很多,但最近在实际项目使用中发现了性能方面是有很大问题的。下面通过一个具体的实例案例分析。
实际案例
由于之前使用的是smarty2,最近在向smarty3迁移的过程中,一些不重要的页面上线后运行的一直很良好。在迁移最后的一个模块后(访问量很大),上线后直接导致页面挂了,并且CPU的占有率始终是100%,只好回滚了。但在线下并不能复现挂了的情况,后来定位到可能是性能的问题,相关的QA同学进行压力测试时,证明了这一猜测。在并发量很高的情况下,线下也能复线CPU占用100%,页面挂了的情况。
继续阅读 »
IN:PHP, 前端开发 标签: smarty3, 性能, 构造数据, 模版继承, 自定义函数 评论: 1介绍
在smarty2的时候,之前写过一篇文章,Smarty中实现模板继承功能,文中就是结合smarty2的一些特点如何实现模块功能的。
现在Smarty3出来了,带来了非常多新的特性,包括:模版继承、自定义模版函数、直接调用PHP函数、模版里很方便的构造数据等。
本文不介绍如何使用Smarty3,简单的使用可以去官方网站查看文档。本文主要介绍Smarty3下模版开发规范和一些问题的解决方案 继续阅读 »
IN:PHP 标签: php, unicode, utf--8, utf8 评论: 0介绍
在前端开发中,为了让中文在不同的环境下都能很好的显示,一般是将中文转化为unicode格式,即\u4f60,比如:”你好啊”的unicode编码为”\u4f60\u597d\u554a”。
JS里将中文转为unicode编码很简单。
function convert2Unicode(str) {
return str.replace(/[\u0080-\uffff]/g,
function($0) {
var tmp = $0.charCodeAt(0).toString(16);
return "\u" + new Array(5 - tmp.length).join('0') + tmp;
});
}
并且也很简单,直接alert出来或者innerHTML到dom节点里都可以。
但如果将\u4f60\u597d\u554a”字符传递给php,php就不能直接echo或者其他操作了。直接echo的话还是原生的字符,不能自动转化为中文。
继续阅读 »
IN:PHP 标签: block, smarty, 模板继承 评论: 4在PHP+Smarty大行其道的今天,怎么样进行快速的模板开发成为了前端开发人员必须思考的问题。不同的页面,相同或者相似的页面结构是否进行了模块化处理,同样的头部或者尾部是否进行了内容分离决定了开发的效率。虽然Smarty本身支持include a file的功能,但这远远不够。我们需要的是不想重写同样的页面结构。
Jinja2的模板继承功能
Jinja是基于python的模板引擎,有个非常实用的功能就是模板继承。不太了解的可以去这里看详细的介绍http://opensource.csdn.net/bbs/thread/3943?lp=1
模板继承的好处就是你不在需要写整个页面,只要写页面的模块,然后用一个布局的页面套一下就可以了。并且页面中的模块书写顺序是无序的。
smarty本身并没有模板继承的功能,但我们可以通过block,capture和方法插件(其实block,capture也是插件)。 继续阅读 »