新版speed小试感受.

#1 xiaoziwuzui

确实极快!
暂时还没深入研究代码,只是简单的看了下核心speed文件
试着运行了一下例子,很大一个感受就是很快,没有其它框架那种卡顿感,

有几个小小的期待,
以后会支持多数据库类型么?
好像没有做安全过滤之类的操作了吧.
还有.貌似是自动加载所有的模型和类了.这样以后扩展多了会不会对资源消耗比较大. 还是倾向于手动加载
别的我就不懂了.我也是个菜鸟, 正则知识很差劲,所以URL重写和模板编译那块就不懂了.
后期还加日志功能么.. 还有.可以弄个扩展模块之类的.那些方便扩展一些类似支付,短信,这类的第三方接口,或者文件上传之类的
别的我觉得都挺好的. 函数库什么的完全没必要像其它框架那样准备一堆.

{:soso_e154:}{:soso_e154:}

2015-09-17 09:06:30

#2 jake

感谢支持

稍微说一下:

1. 多种数据库,如MSSQL等,短期内不会支持,毕竟PHP+MySQL是非常普遍的。但其他的数据库和PHP本身就很少相容。

当然,如果是“多个”数据库(都是MySQL),那么是原生支持的,支持读写分离和多库链接

2. 安全过滤是内含的。包括防SQL注入是在model的位置,防XSS是在模板引擎的位置。都是自动实施的,按正常的用法,它们会一直在。

3. 不清楚你说的自动加载是指哪个方面,新版speed的结构是一个文件,包含了MVC核心,当然这里代码不多(不到500行)。

如果是扩展或者其他的类文件,都是按需加载的。autoload机制只是当找不到类代码时,自动搜索目录进行include那一个类文件,不会加载其他的东东。

所以整个来说,跟你理想中的微核心+按需加载,是符合的。资源占用方面不用担心。

4. 具体的一些使用方法会在稍后的教程里面。

5. 扩展方面,要加入到框架里面是比较简单的。等教程出来后会逐步搞上来,第一部分大概是这样:

cache(file/memcache/apc)
mongo
redis
多语言扩展
数据验证
session扩展
文件上传类
用户级日志
XML支持
Excel操作类
拼音
(未完待续)

外加三个示例+一个生产工具

ACL权限系统示例
微信接口示例
静态HTML示例
appbuilder


2015-09-17 10:03:52

#3 xiaoziwuzui

jake 发表于 2015-9-17 10:03
感谢支持

稍微说一下:
@jake 大神,是我描述错了,数据库那里应该说多驱动支持,
因为5.5以后mysql驱动已经不再支持, 得用mysqli吧.所以我想会不会有能支持mysqli的驱动,
确实 我也不喜欢PHP 和其它数据库一起使用,最适用的还是MYSQL
自动加载是说的 inner_autoload函数,
如果我没理解错的话, 这个函数是会自动引用  model,include,controller这三个文件夹下面的PHP文件,
不知道后期开发写了很多类文件时,会不会对内存要求高一些,
我个人觉得,开发的时候,比如很多后台管理用的 类或者函数库文件,在前台界面 就不需要引用了,
还有 针对多模块开发时,有些模块应该是只需要核心类就可以了.这样做应该也会把不需要的资源文件一起引用吧?  不知道我这样理解正确不, PHP引用这些资源文件应该也要消耗内存吧?

很期待框架出来,

{:soso_e154:}{:soso_e150:}  正则知识太水了, 都没注意到模板引擎那里 做了过滤.

还有.下面这个验证问答是不是有问题哈, 每次第一个问题怎么答都不对.  LAMP  L 我试了 linux  Linux都说错的!!!!!  好像验证码也是.....第一次怎么答都不对. 估计SESSION有问题? 猜的.

2015-09-17 10:49:23

#4 jake

xiaoziwuzui 发表于 2015-9-17 10:49
@jake 大神,是我描述错了,数据库那里应该说多驱动支持,
因为5.5以后mysql驱动已经不再支持, 得用mysqli吧 ...
之前其实对比过mysqli和pdo_mysql,mysqli可以说比较亲切点,但是PDO是官方比较推荐的,而且还有个重点是PDO的绑定参数是可以使用字符串的,而mysqli只能是用?方式来绑定,你如果用到数据库绑定之后,就会明白mysqli那个绑定有多丑了~~~所以选用了PDO

其实对于普通开发者来说,是PDO或者mysqli应该是感觉不到的,而绝大部分的PHP环境都有两者,所以问题不大。



自动加载autoload是这样的:当new到没有加载的类,才会执行autoload,而且看看inner_autoload的代码,它也只include一个文件,没有全部引用其他的文件。

举个流程的例子说明一下:

首先,框架程序运行,从index.php开始,会加载

index.php 入口
speed.php 框架的全部(不到500行代码)
config.php 配置
BaseController.php 控制器父类(一般是空的)
你的Controller.php 你的代码所在

其他都不加载,这已经很轻了,对吧。

然后,当你的代码里面有这样的一句:

$user = new User();

的时候,那么new就找不到User这个类了。然后autoload就会在model目录下面找 model/User.php 这个文件,

注意,这里只是找(model/User.php)这个文件,
即使model目录里面有成千上万个文件,autoload只是定位有没有model/User.php这个文件(file_exists),
当它找到有这个文件,那么就会执行 include model/User.php

也注意一下,只是  include model/User.php 一个文件,没有管其他任何的文件

接下来new就会实例化User类。这就是autoload的过程,可以看到这个只是一个简化了include(一个文件)的过程,它不会把全部文件都加载进来的。



另外,数据库链接方面,稍微说一下,这里也是按需加载。

比如说$user = new User();的时候,User虽然是继承了Model,但是这时候也没有去链接数据库。
等到执行下一句

$this->newid = $user->create($data);

之类的,create才去链接数据库。

这样的好处是当你的model类,有部分方法是不需要数据库的时候,不会产生数据库链接。



关于多模块开发,指的是module对吧,它也是按需加载的。再对比一下

如果用了module,现在的请求是访问某个module,那么

框架程序运行,从index.php开始,会加载

index.php 入口
speed.php 框架的全部(不到500行代码)
config.php 配置
module/BaseController.php 该module的控制器父类(一般是空的)
module/你的Controller.php 该module的控制器代码所在

框架会忽略非这个module下的控制器,只会执行到本module的控制器。




2015-09-17 12:29:54

#5 xiaoziwuzui

jake 发表于 2015-9-17 12:29
之前其实对比过mysqli和pdo_mysql,mysqli可以说比较亲切点,但是PDO是官方比较推荐的,而且还有个重点是P ...
受教了.原来这个autoload的流程是这样子的.
还是学艺不精.一直以为他会直接把文件加载进来.
刚写了两控制器试了一下,果然如你所说.
speed文件已经比较充实了, 剩下的功能只期待缓存模块出来. 我觉得文件缓存类可以参考下ci的 有过期 时间.  别的方面都只能默默的期待了..


... 附加一下. 刚看到验证问答. 为嘛   echo true ? 0 : true ? 1 : 2;  答案会是2  把我惊呆了

2015-09-17 14:31:06

#6 admin

xiaoziwuzui 发表于 2015-9-17 14:31
受教了.原来这个autoload的流程是这样子的.
还是学艺不精.一直以为他会直接把文件加载进来.
刚写了两控 ...
缓存的过期时间?指的是类似这个吗?http://www.speedphp.com/thread-3853-1-1.html
spAccess的第四个参数lift_time

这是任何一个缓存程序都会有的~~~而且也不是框架提供的,框架只是对接。

2015-09-17 14:35:02

#7 jake

xiaoziwuzui 发表于 2015-9-17 14:31
受教了.原来这个autoload的流程是这样子的.
还是学艺不精.一直以为他会直接把文件加载进来.
刚写了两控 ...
缓存的过期时间?指的是类似这个吗?http://www.speedphp.com/thread-3853-1-1.html
spAccess的第四个参数lift_time

这是任何一个缓存程序都会有的~~~而且也不是框架提供的,框架只是对接。

2015-09-17 14:35:44

#8 water6000

最新版啥时候出来啊?比较关注中!

2015-09-18 09:51:00

#9 xiaoziwuzui

jake 发表于 2015-9-17 14:35
缓存的过期时间?指的是类似这个吗?http://www.speedphp.com/thread-3853-1-1.html
spAccess的第四个参 ...
今天突发奇想,把speed的模板类换成 smarty
发现效率变得极其低下,

只是简单的显示一个测试界面
当然我也只是简单的用AB压力工具测试了一下.
这是直接用内置模板引擎的测试数据,页面没有做其它操作
QQ拼音截图未命名.jpg
这是只引用了Smarty类没有使用,还是用原生的模板类的数据
QQ拼音截图未命名5.jpg
这是用了Smarty之后.
QQ拼音截图未命名3.jpg

感觉 差别太大了. 数值降了一半多.
是不是我没调试好?

2015-09-18 12:06:28

#10 jake

water6000 发表于 2015-9-18 09:51
最新版啥时候出来啊?比较关注中!
不是已经发布了吗?~~~

看这里http://www.speedphp.com/thread-4828-1-1.html

2015-09-18 12:50:56

#11 jake

xiaoziwuzui 发表于 2015-9-18 12:06
今天突发奇想,把speed的模板类换成 smarty
发现效率变得极其低下,
测试起来的代码是什么样子的?

记得新版的view已经修改,不能直接跑的~~~

2015-09-18 12:53:47

#12 water6000

你这是测试版啊,也没有教程,还不知道怎么用啊?还是和以前那样使用嘛?

2015-09-18 13:26:38

#13 xiaoziwuzui

jake 发表于 2015-9-18 12:53
测试起来的代码是什么样子的?

记得新版的view已经修改,不能直接跑的~~~
就是昨天下载的最新的代码,应该跟Speed没问题

测试代码:
1.使用内置模板引擎,

2.加载了Smarty

噗. 竟然不能上传图片了.

贴到一起吧....  竟然还统计失败直接把我不能上传了.

2015-09-18 14:04:22

#14 xiaoziwuzui

water6000 发表于 2015-9-18 13:26
你这是测试版啊,也没有教程,还不知道怎么用啊?还是和以前那样使用嘛? ...
测试版核心代码很精简, 你看一下就知道怎么用了, 和以前的版本有区别哦.

2015-09-18 14:05:10

#15 xiaoziwuzui

jake 发表于 2015-9-18 12:53
测试起来的代码是什么样子的?

记得新版的view已经修改,不能直接跑的~~~
jake
在使用内置的模板引擎时发现个问题,

我这样写一个函数调用
解析成
$c, 'name'=>"setting[$f]", 'value'=>$cfg[, 'type'=>"text", ));?>
这样了.
中间 $cfg[ 解析不知道怎么的出错了,
不懂正则,改都不会改

2015-09-18 14:31:33

#16 jake

xiaoziwuzui 发表于 2015-9-18 14:31
jake
在使用内置的模板引擎时发现个问题,
已解决,GIT上面已经修正了这个问题。 {:soso_e179:}感谢支持。

2015-09-18 14:50:56

#17 water6000

我们还是等正式版和手册出来了,再换吧!暂时头大!

2015-09-18 14:58:12

#18 jake

water6000 发表于 2015-9-18 14:58
我们还是等正式版和手册出来了,再换吧!暂时头大!
已经是标明了测试版,没说过要替换什么的~~~

测试版的作用,是用来测试的

2015-09-18 15:08:25

#19 xiaoziwuzui

jake 发表于 2015-9-17 10:03
感谢支持

稍微说一下:
jake..  新发现个问题.
你上次在Git上改的speed.php 中的
$pattern_inner = '/\b([\w_]+?)\s*=\s*(\$[\w"\'\]\[\-_>\$]+|"[^"\\]*(?:\\.[^"\\]*)*"|[^\\]*(?:\\.[^\\]*)*)\s*?/';
这句.更新之后. 解析函数就不行了.
我写的函数:
{subclass active_id=$cat.id parent="ul.nav nav-list>li" active="active" active_tag="a"}
这样调用 就提示 Err: Parameters of '***' is incorrect!


2015-09-21 10:10:27

#20 jake

xiaoziwuzui 发表于 2015-9-21 10:10
jake..  新发现个问题.
你上次在Git上改的speed.php 中的
$pattern_inner = '/\b([\w_]+?)\s*=\s*(\$[\w ...
我这里试了一下,如果是
<{subclass active_id=$cat.id parent="ul.nav nav-list>li" active="active" active_tag="a"}>
这样,解析出来的结果是
$cat['id'], 'parent'=>"ul.nav nav-list>li", 'active'=>"active", 'active_tag'=>"a", ));?>
这个在语法里面是没有问题的哦

Err: Parameters of '***' is incorrect! 是不是其他什么位置有*号类似的参数或者是字符?

或者看看有没有写模板上面的备注,***应该是备注之类的

2015-09-21 10:34:05

#21 xiaoziwuzui

jake 发表于 2015-9-21 10:34
我这里试了一下,如果是

这样,解析出来的结果是
重新从Git上下载了speed文件覆盖又好了. 估计是我开始更新没有更新到位.
@jake 有闲心整理份Smarty精简版么...  原版的太复杂了.有很多不需要的东西  流程也太多了.

2015-09-21 14:59:40

#22 jake

xiaoziwuzui 发表于 2015-9-21 14:59
重新从Git上下载了speed文件覆盖又好了. 估计是我开始更新没有更新到位.
@jake 有闲心整理份Smarty精简版 ...
最近版本的Smarty真的挺复杂的~~~之前想过简化它,但是发现其实很难,它为了“猜想中”的扩展性做了很多很多,甚至最基本的正则匹配也是做了很多的扩展模式。

但是基本没人用过它的深度扩展功能,呵呵。

所以,新版speed才会直接写个新的,兼容部分smarty语法的模板引擎,而不是精简~~~。

2015-09-21 16:10:12

#23 xiaoziwuzui

jake 发表于 2015-9-21 16:10
最近版本的Smarty真的挺复杂的~~~之前想过简化它,但是发现其实很难,它为了“猜想中”的扩展性做了很多 ...
他的扩展性其实没什么用.大部分人最多扩展几个函数到里面.处理下URL,字符串转换截取之类的.再难的就用到PHP中去处理了.
主要是觉得他的模板解析功能挺强大的. 貌似没有什么BUG,
但是他生成的编译文件的太复杂了. 而且依赖数据也很多.基本上 编译之后的文件根本没有可读性了.
还有它加载的资源太多了.一大波子类继承  页面上就算不用Smarty渲染,光加载出来实例化到对象就要浪费很多资源.
我看SpeedPHP里面集成的有Smarty 看大神有没有很深入的研究过.可以提取最核心那块出来.   
确实他代码看的头疼.

2015-09-21 17:59:21

#24 jake

xiaoziwuzui 发表于 2015-9-21 17:59
他的扩展性其实没什么用.大部分人最多扩展几个函数到里面.处理下URL,字符串转换截取之类的.再难的就用到P ...
世界上有两种程序,一种是非常复杂,复杂到了找不到明显的bug;另一种是足够的简单,简单到一眼看到头了,没有明显的bug。

很遗憾的是,speed框架走的是第2条路,smarty是不太适合~~~

2015-09-22 08:17:35