前言

公司的APP响应速度比较慢,公司大神决定使用C语言编写的PHP框架Phalcon 代替原来的框架,响应速度有比较大的提升。以前只是听说过,没有深入的了解过。即然工作中有用到,便花点时间了解了下,你啥都不懂,会被别人鄙视,需要不断的充电补齐自己的短板啊!

第一感受

花了些时间看了phalcon 框架的文档,对这个框架有了整体的一些认识,说下我的一些感受。

1 主体代码C语言编写,执行效率肯定比其它纯PHP编写的框架要高;
2 框架功能大而全,全栈式框架,WEB开发相关的组件都有,组件之间低耦合;
3 对象容器以及依赖注入的神奇使用,简化代码编写;
4 很多组件使用适配器模式,方便自定义开发扩展,只要实现适配器接口即可;
5 安全可靠,对WEB常见漏洞提供了相应解决方案,这对团队开发非常有帮助,想想最近一些脱库事件,还是有些后怕,开发拥有安全意识非常重要;
6 PHQL类SQL数据库查询语言,查询数据非常灵活,感觉这个没啥用;
7 这个框架很灵活,没有固定的范式,开发时可以任意组织代码;
8 提供开发脚手架,枯燥重复的操作有相应的脚本代劳,是我懒人喜爱的:)
9 命令行执行任务控制台
10 事件管理器HOOK机制,这个用起来肯定很爽:)
11 基于角色简单权限管理机制,对于资源权限管理不复杂的应用绝对足够了

框架架构

以前接触过比较多的框架,比如CI,Qeephp,Laravel等,发现大家的实现套路基本上差不多,无外乎在MVC三层架构基础之上做些文章,实现的方式有差异而已。

单入口
通过一个入口处理客户端响应,这个需要设置WEB服务器将所有动态脚本请求转发到单一入口上

路由以及分发器
需要设置路由规则,以及路由对应的处理控制器和方法,找到匹配路由之后,通过分发器转发执行,有一个路由组件和分发器组件实现这2个功能

控制器
用于对客户端请求进行响应,用于连接模型和视图对胶水

模型
业务逻辑层,数据的CRUD操作相关,模型之间的关联关系管理

缓存层
使用适配器模式,后端支持主流的缓存服务,比如memache,redis ,mongodb 等,如果需要使用其它服务,可以自己扩展,实现适配器接口就行了

视图
客户端视图渲染,层次结构,视图继承,支持内置模版以及自定义模版引擎

多语言
支持多语言,这个对公司业务主要是在海外很有帮助,话说自己实现也不难,也就一语言包而已,使用PHP数组就可以了:)

优势

1 功能大而全

2 执行速度快

劣势

1 学习成本高

2 需要安装PHP扩展
3 相比纯PHP框架维护成本大

适合场景

1 需要快速开发且对性能要求比较高

依赖注入

依赖的服务通过注入的方式获得访问,这个是Phalcon 框架的基础,通过依赖注入,各组件之间可以做到低耦合,又能获得其它服务的能力。依赖注入比较绕,初次了解可能会搞的晕头转向,熟悉了之后就好了。Phalcon 文档对依赖注入说的很生动很具体,从问题开始入手,一步一步引导如何实现依赖注入。依赖注入实现原理:创建一个对象容器,注册服务到对象容器,需要访问服务的实例通过对象容器访问服务,不同的语言实现方式不一样。

后记

说的东西很理论,没有相关实践的部分,主要是我只看了文档介绍,还没有实际使用过,使用过程中会碰到什么坑,我现在说不清楚):以后有新系统开发或者业余搞的项目,会尝试使用它!

参考资料

【1】Phalcon官方文档

https://docs.phalconphp.com/en/latest/index.html

https://media.readthedocs.org/pdf/phalcon-php-framework-documentation/latest/phalcon-php-framework-documentation.pdf
【2】Phalcon官方网站

https://phalconphp.com/zh/

【3】Phalcon代码库地址

https://github.com/phalcon

一个神奇的PHP框架:Phalcon 之初识的更多相关文章

  1. 一个神奇的PHP框架:Phalcon 之编译安装

    前言 CentOS7下升级PHP到最新版本以及编译安装phalcon框架,看相关文档无数遍,自己尝试编译安装之后才理解的更深,编译步骤以及碰到的问题做个简单的记录 php-7.0.11编译安装 1.下 ...

  2. SSH 框架学习之初识Java中的Action、Dao、Service、Model-收藏

    SSH 框架学习之初识Java中的Action.Dao.Service.Model-----------------------------学到就要查,自己动手动脑!!!   基础知识目前不够,有感性 ...

  3. DotNetty网络通信框架学习之初识Netty

    p{ text-align:center; } blockquote > p > span{ text-align:center; font-size: 18px; color: #ff0 ...

  4. WWW 2015:一个神奇的会议

    2015:一个神奇的会议" title="WWW 2015:一个神奇的会议"> 作者:微软亚洲研究院研究员 袁进辉 WWW 2015(24th Internatio ...

  5. 一个轻量级分布式RPC框架--NettyRpc

    1.背景 最近在搜索Netty和Zookeeper方面的文章时,看到了这篇文章<轻量级分布式 RPC 框架>,作者用Zookeeper.Netty和Spring写了一个轻量级的分布式RPC ...

  6. 用Python写一个简单的Web框架

    一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...

  7. 【niubi-job——一个分布式的任务调度框架】----如何开发一个niubi-job的定时任务

    引言 上篇文章LZ主要讲解了niubi-job如何安装,如果看过上一篇文章的话,大家应该知道,niubi-job执行的任务是需要用户自己上传jar包的. 那么问题来了,这个jar包如何产生?有没有要求 ...

  8. 为了支持AOP的编程模式,我为.NET Core写了一个轻量级的Interception框架[开源]

    ASP.NET Core具有一个以ServiceCollection和ServiceProvider为核心的依赖注入框架,虽然这只是一个很轻量级的框架,但是在大部分情况下能够满足我们的需要.不过我觉得 ...

  9. 一个响应式数据库框架SQLBrite,完美解决数据库和UI的同步更新!

    相信小伙伴们在开发中或多或少都可能遇到过这样的问题:打开一个应用后,为了快速响应,先将数据库中的数据呈现给用户,然后再去网络上请求数据,请求成功之后将数据缓存至数据库,同时更新UI,但是我们经常会这样 ...

随机推荐

  1. [App Store Connect帮助]三、管理 App 和版本(5)添加平台以创建通用购买

    您可以为 App 添加一个平台以创建通用购买.例如,为现有的 iOS App 添加相关的 Apple TVOS App,从而将该 Apple TVOS App 和 iOS App 一同出售. 与创建新 ...

  2. jeecg中列表查询数据关联其他表的显示

    1.A表字段:id,name;B表字段:id,name,fid(A表外键),现查询A表和B表的所有数据并且查询条件A,B都有,在前台页面list显示 2.后台方法: @RequestMapping(p ...

  3. group by 和 select

    group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面.

  4. 338 Counting Bits Bit位计数

    给定一个非负整数 num. 对于范围 0 ≤ i ≤ num 中的每个数字 i ,计算其二进制数中的1的数目并将它们作为数组返回.示例:比如给定 num = 5 ,应该返回 [0,1,1,2,1,2] ...

  5. java基础之吃货联盟

    因为用的是普通数组,所以编写的代码可能比较长,而且有的功能还比较不健全,代码如下: 0.定义数组(因为用static修饰可以不用New,比较方便,但可能比较损耗性能) //订餐人名字 static S ...

  6. EasyUI系列学习(二)-使用EasyUI

    一.引入必要文件 <!--1.0引入jQuery核心库--> <script src="jquery-easyui-1.4.4/jquery.min.js"> ...

  7. linux php全能环境一键安装,小白福利!

    phpStudy Linux版&Win版同步上线 支持Apache/Nginx/Tengine/Lighttpd/IIS7/8/6 phpStudy for Linux 支持Apache/Ng ...

  8. bindColumn、bindParam与bindValue的区别

    bindColumn:绑定一列到一个 PHP 变量(类似于list()函数为变量赋值) <?php //连接数据库函数 functionconnect() { try { $dbh = new ...

  9. Android HTTP 数据提交

    在Android 项目中,使用HTTP协议获取数据或者处理数据,需要使用到多线程和配置相应的APP权限 1.使用线程,使用HTTP 提交数据 private Thread submitThread = ...

  10. 【译】x86程序员手册03 - 2.1内存组织和分段

    2.1 Memory Organization and Segmentation 内存组织和分段 The physical memory of an 80386 system is organized ...