热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP框架Phalcon1.0.0beta发布,实测性能强劲

我们宣布今天(时差问题,应该是昨天了)发布Phalcon1.0.0beta版本,发布此版本,主要是从社区得到测试反馈加以改进。此版本引入了一些比较重要的特性:多级缓存:这个新功能是缓存组件的一部分,允许开发人...

我们宣布今天(时差问题,应该是昨天了)发布Phalcon 1.0.0 beta版本,发布此版本,主要是从社区得到测试反馈加以改进。此版本引入了一些比较重要的特性:

多级缓存:

这个新功能是缓存组件的一部分,允许开发人员来实现一个多级缓存。这个新功能非常有用,因为你可以保存相同的数据在多个后端缓存组件中,并可配置不同的生命周期,读取缓存从最快的适配器到最慢的一个,直到数据都已经过期:

01
02 $ultraFastFrontend = new Phalcon\Cache\Frontend\Data(array(
03     "lifetime" => 3600
04 ));
05  
06 $fastFrontend = new Phalcon\Cache\Frontend\Data(array(
07     "lifetime" => 86400
08 ));
09  
10 $slowFrontend = new Phalcon\Cache\Frontend\Data(array(
11     "lifetime" => 604800
12 ));
13  
14 //Backends are registered from the fastest to the slower
15 $cache = new \Phalcon\Cache\Multiple(array(
16     new Phalcon\Cache\Backend\Apc($ultraFastFrontend, array(
17     "prefix" => 'cache',
18   )),
19   new Phalcon\Cache\Backend\Memcache($fastFrontend, array(
20     "prefix" => 'cache',
21     "host" => "localhost",
22     "port" => "11211"
23   )),
24   new Phalcon\Cache\Backend\File($slowFrontend, array(
25     "prefix" => 'cache',
26     "cacheDir" => "../app/cache/"
27   ))
28 ));
29  
30 //Save, saves in every backend
31 $cache->save('my-key', $data);


Volt模板引擎改进
此版本引入的一些Volt改进特性:

01 {# Ternary operator #}
02 {{ total > 0 ? total|format('%0.2f') : '0.0' }}
03  
04 {# For-Else clause #}
05 {% for robot in robots %}
06     {{ robot.name }}
07 {% else %}
08     There are no robots
09 {% endfor %}
10  
11 {# Loop-Context #}
12
13 {% for robot in robots %}
14     {% if loop.first %}
15         
16             
17                 Position
18                 Id
19                 Name
20             
21         ae
22         
23     {% endif %}
24     
25         {{ loop.index }}
26         {{ robot.id }}
27         {{ robot.name }}
28     
29     {% if loop.last %}
30         
31     {% endif %}
32 {% endfor %}
33
34  
35 {# Space control delimiters #}
36
37     {%- for robot in robots -%}
38     
  •   {{- robot.name -}}
  • 39     {%- endfor %}
    40

    垂直/水平分片的改进
    现在,你可以定义不同的数据库连接,使之一个只用于读操作,另一个只用于写操作。对于RDBMS中使用主从方式的应用场景非常有用:

    1 class Robots extends Phalcon\Mvc\Model
    2 {
    3     public function initialize()
    4     {
    5         $this->setReadConnectionService('dbSlave');
    6         $this->setWriteConnectionService('dbMaster');
    7     }
    8 }

    在大中型项目中,在数据库设计的时候,考虑到数据库最大承受数据量,通常会把数据库或者数据表水平切分,以降低单个库,单个表的压力。
    因此,水平切片意味着读取数据将根据条件进行数据查询:

    01 class Robots extends Phalcon\Mvc\Model
    02 {
    03     public function selectReadConnection($intermediate, $bindParams, $bindTypes)
    04     {
    05         //Check if there is a 'where' clause in the select
    06         if (isset($intermediate['where'])) {
    07  
    08             $conditions = $intermediate['where'];
    09  
    10             //Choose the possible shard according to the conditions
    11             if ($conditions['left']['name'] == 'id') {
    12                 $id = $conditions['right']['value'];
    13                 if ($id > 0 && $id <10000) {
    14                     return $this->getDI()->get('dbShard1');
    15                 }
    16                 if ($id > 10000) {
    17                     return $this->getDI()->get('dbShard2');
    18                 }
    19             }
    20         }
    21  
    22         //Use a default shard
    23         return $this->getDI()->get('dbShard0');
    24     }
    25  
    26 }

    记录快照
    有了这项新功能,指定的Models可以设定为查询时保持记录的快照。你可以使用此功能来实现审计或只是为了知道哪些字段被更改过:

    1 class Robots extends Phalcon\Mvc\Model
    2 {
    3     public function initalize()
    4     {
    5         $this->keepSnapshots(true);
    6     }
    7 }

    你可以通过以下方式检测哪些字段被更改过:

    1 $robot = new Robots();
    2 $robot->name = 'Other name';
    3 var_dump($robot->getChangedFields()); // ['name']
    4 var_dump($robot->hasChanged('name')); // true
    5 var_dump($robot->hasChanged('type')); // false

    动态更新
    此功能允许ORM在创建SQL UPDATE语句时,只改变有改变的字段,而不是整个表的所有字段。在某些情况下,这可以提高性能,减少应用程序与数据库服务器之间的传输数据量:

    1 class Robots extends Phalcon\Mvc\Model
    2 {
    3     public function initalize()
    4     {
    5         $this->useDynamicUpdate(true);
    6     }
    7 }

    验证
    Phalcon\Validation 是基于ORM,ODM验证系统实现的一个独立的验证组件,该组件可以在model及collection之外实现验证规则:

    01 $validation = new Phalcon\Validation();
    02  
    03 $validation
    04     ->add('name', new PresenceOf(array(
    05         'message' => 'The name is required'
    06     )))
    07     ->add('name', new StringLength(array(
    08         'min' => 5,
    09         'minimumMessage' => 'The name is too short'
    10     )))
    11     ->add('email', new PresenceOf(array(
    12         'message' => 'The email is required'
    13     )))
    14     ->add('email', new Email(array(
    15         'message' => 'The email is not valid'
    16     )))
    17     ->add('login', new PresenceOf(array(
    18         'message' => 'The login is required'
    19     )));
    20  
    21 $messages = $validation->validate($_POST);
    22 if (count($messages)) {
    23     foreach ($messages as $message) {
    24         echo $message;
    25     }
    26 }

    版本 1.0.0还包括其他一些小改动,bug修复及稳定性方面的改进。你可以在此看到完整的更新日志

     

    帮助测试
    可以从1.0.0分支中安装此版本:

    1 git clone http://github.com/phalcon/cphalcon
    2 cd build
    3 git checkout 1.0.0
    4 sudo ./install

    Windows用户可以直接从下载页面下载DLL文件。

    我们欢迎您提供宝贵的意见与建议,可以通过 PhosphorumStack Overflow or Google Group 进行交流。如果你发现了任何BUG,请在Github上创建issue.

    中文文档: http://phalcon.5iunix.net


    推荐阅读
    • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
    • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
    • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
      本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
    • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
    • [译]技术公司十年经验的职场生涯回顾
      本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
    • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
    • 知识图谱——机器大脑中的知识库
      本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
    • Oracle分析函数first_value()和last_value()的用法及原理
      本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
    • Java验证码——kaptcha的使用配置及样式
      本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
    • 高质量SQL书写的30条建议
      本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
    • MySQL中的MVVC多版本并发控制机制的应用及实现
      本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
    • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
    • Windows下配置PHP5.6的方法及注意事项
      本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
    • Metasploit攻击渗透实践
      本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
    • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
    author-avatar
    艺卓显示、巴可投影
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有