V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  encro  ›  全部回复第 107 页 / 共 152 页
回复总数  3038
1 ... 103  104  105  106  107  108  109  110  111  112 ... 152  
2020-04-15 11:50:27 +08:00
回复了 dvaknheo 创建的主题 PHP [吐槽]刚读了 yii3-demo, PHP 框架是怎么把 PHP (优雅的)玩死的。
@HiCode

openresty 很好,价值很大。
曾经尝试做 waf 。

你们网站流量居然用 openresty ?
比我现在做的流量高吧?
我怕人难招,老板嫌开发不够敏捷。
如果不是因为上面原因,我更乐意用 go 慢慢堆代码吧,毕竟新玩具比较好玩。
2020-04-15 11:43:05 +08:00
回复了 dvaknheo 创建的主题 PHP [吐槽]刚读了 yii3-demo, PHP 框架是怎么把 PHP (优雅的)玩死的。
@nicoljiang

PHP 还是简单,快速啊。
你看我都学了用了这么多框架,
我还是个很懒的人,
经常在 v2 灌水。
就知道这些框架有多简单了。

你说的 lue,python 方向是可以做客户端之类的吗?
那些真不适合 PHP 。

我宁愿去学 C#,C++,
每个人都有适合自己的定位。
历史决定的。
2020-04-15 11:38:11 +08:00
回复了 dvaknheo 创建的主题 PHP [吐槽]刚读了 yii3-demo, PHP 框架是怎么把 PHP (优雅的)玩死的。
@HiCode

小而美得框架也已经有一堆了啊。
所以没必要重复造轮子。
大框架也提供了小而美得兼容方式。

至于 PHP 发展,我有两个观点:

第一:

一门想语言发展好,主要是建立好生态。

这方面探索我们能看到的有:

1,前面我提到可以建立一个基于云原生的框架;

2,symfony 的 api 平台;

3,thinkphp 的 fastadmin ;

4,微擎的应用商店;


第二:

PHP 享受了 WEB 高速发展的红利期,
而现在虽然还没有进入衰退期,
但是 WEB 发展已经没有以前那么快了。
前文提到环境变化了,
恐龙就不能生存了,
自我改良是缓慢的,
所以不要将所有鸡蛋都放在一个篮子里面,
我们尝试 PHP 新出路同时,
不妨碍同时 go,python,java 甚至 c++等语言,
生老病死本常态,
一招鲜吃遍天的懒惰思想是行不通的。
2020-04-15 11:19:32 +08:00
回复了 dvaknheo 创建的主题 PHP [吐槽]刚读了 yii3-demo, PHP 框架是怎么把 PHP (优雅的)玩死的。
@jowan
性能测试的时候,开启 opcache 是公平的,HiCode 给的连接也是开启了 opcache 的。
如果开启数据缓存,有的框架没开启,这就不公平了,不好比了,开启后命中率等影响较大。

而且缓存级别也是有很大差别的,比如 head 直接返回 304 HTTP 304,直接 http 头设置一个超时时间两者区别都很大啊。比如 Yii 的请求,页面,widget 局部,data 级别缓存,每一级性能差别都很大啊。如果我开发一个 blog,为了测试性能好,我直接设置一个一小时过期头,那么其他框架都别比了,原生都别比了。。。所以是作弊。。。规则就是咱还是比谁代码写的好吧。

但是生产环境,可以根据情况设置缓存。

框架性能只是架构其中一个考量,大部分公司而言,都放不到第一,人员招聘容易度和开发维护成本重要程度都比它高得多。
2020-04-15 10:38:45 +08:00
回复了 dvaknheo 创建的主题 PHP [吐槽]刚读了 yii3-demo, PHP 框架是怎么把 PHP (优雅的)玩死的。
@HiCode

才看到你前面发的链接,看了下测试代码和环境,比较公平和准确。
收回我前面的话,说声抱歉。


Single query On Cloud

PHP 15,248
php-laravel-query-builder 4,867
yii2 2,545
laravel 1,087

Multiple queries On Cloud
php 1,897
yii2-raw 1,677
yii2 919
php-laravel-query-builder 825
laravel 430

这个是非常有意义的:
随着页面查询增加,性能差别变少。且这都是在框架不开启数据缓存的情况下。
如果开启缓存,那么就。。。作弊了。。。


你是希望轻量级框架,这个也已经有很多轮子也多了。如 slim,micro 等,
但是为什么我们知道的少?
我认为应为太容易了啊,很容易就自己造一个,所以大家都自己造去了,导致不集中没有流行广的框架。

ROR,django, yii, laravel, symfony 都是比较重量级的,
适合团队有前端,后端,API 接口规模的,
当然熟练了,也可以在小团队适用,比如我现在就是 3 个后端采用 YII2 的,2 年时间大小开发了十来个公司自己用的系统 3 个产品吧,目前在用的还有维护和用的有十个左右。如果不用框架,或者用简单的框架我认为做不到。基本我们是九五六吧。

yii raw, php-laravel-query-builder, symfony 等等很多框架都提供了针对 api 的简洁版本。

其实不用 orm 性能就能直接上升一倍以上,但是我还是在我团队让大家优先用 orm,因为维护简单,只有处理个别大量数据导入导出会用到 DB 类和原生 sql.
2020-04-15 09:56:31 +08:00
回复了 dvaknheo 创建的主题 PHP [吐槽]刚读了 yii3-demo, PHP 框架是怎么把 PHP (优雅的)玩死的。
@HiCode

首先,laravel 将性能降低到原生 4%左右,这个标准是什么,难道我们平时只开发 hello world ? laravel 哪个地方导致性能低了有清楚吗?是不是某个配置,某个插件导致的?不用这个配置或者插件行不行?环境配置是怎样的?有没有开启 opcache 呢,首次运行还是非首次运行?

如果不清楚这些,你只是人云既云的的程序员,没事瞎起哄。


其次,laravel 性能很重要吗?我前面提到真实环境一个 4 核 8G 一年也能跑上亿交易额,每天几千单。对我和我的团队来说,用框架我能快速定位性能问题,快速上线,统一标准统一文档代码容易维护能让我节省多少时间,团队少招聘的人,用来给其他程序加工资不更好吗?


ps:

我自己实际测试的时候,YII2,5 年前购买的笔记本 4c8g,linux 系统,fpm 配置了 150 最大请求,开启 opcache,代码连接一次 db,纯 PHP 4000rps,框架自带 DB 类不用 ORM 2500rps,用框架 ORM 500rps 。

实际项目中,我全采用 ORM,平均每秒钟处理 50-200 个请求,nginx 日志显示 fastcgi 响应时间是 5-50ms,我觉得够用了。再不行人员开支上节省的钱,我再加点服务器配置足够了。
2020-04-14 20:30:50 +08:00
回复了 dvaknheo 创建的主题 PHP [吐槽]刚读了 yii3-demo, PHP 框架是怎么把 PHP (优雅的)玩死的。
@dvaknheo
我知道都能说的通,
但是一个框架或者一段代码,
如果不是明摆着的,
而是需要解释,
那么就是没人愿意看的愿意用的。


一: 也是我困惑的问题,为什么要 Controller 非得要 return 一些东西?初学者最容易搞不懂的就是这个。
所以我们要明白为什么几乎所有流行框架都用 return 呢?其实因为后面方便加 cache 层,加 layout 啊。


二: 控制器命名空间为 \ 根命名空间。因为常规下是在 ProjectNamespace\Controller 底下的。 这个小例子不需要。 这个例子就是写小型程序用的,这样其他控制器类也直接写。我应该还加上配置扩展选项,使得没服务器配置也能用。追加

$options=[
'namespace_controller'=>'\\', // 设置控制器的命名空间为根
];

你改成
$options=[
'controller_namespace'=>'Controller ',
];
这样,你的框架又少了一条潜规则(双斜杠),框架不是潜规则越少,越容易学么?


三: 修改默认设置。skip_setting_file=false 目的是为了防止你传代码不传设置文件上去的时候报错。

做多了

$options=[
'namespace_controller'=>'\\', // 设置控制器的命名空间为根
'skip_setting_file'=>true, // 跳过配置文件,防止传代码不传设置文件上去的时候报错
];

多别扭,新手关心这个干什么,这个就不是最佳实践



四:

DuckPHP\DuckPHP::RunQuickly($options,$callback) =>
DuckPHP\DuckPHP::G()->init($options);
//$callback();
DuckPHP\DuckPHP::G()->run();
前者只初始化,后面才开始路由。DuckPHP 不仅仅支持整站配置,还支持非整站的路由设置, 如放到 /something/index.php 里。
还有 Swoole 兼容的插件, 把初始化部分放在主流程, 运行部分在工作协程。无需改动代码。


试试
DuckPHP\DuckPHP::run(['mode'=>'swoole'])
或者
DuckPHP\DuckPHP::run([],DuckPHP::RUN_MODE_SWOOLE)

还有这个 DuckPHP\DuckPHP::G()又多了一个方法,写全一点就少了一个隐藏点,仍然是潜规则越少越好,我记不住,大多数人都记不住。大部分时候,显式表达由于隐式表达。

同事说给我去买个带个午餐上周二你帮我带过的,或者说给我去兰州拉面买个刀削面,当然是后者更不会出错。

这些基础不搞好,再提性能和架构都是扯。
2020-04-14 19:57:23 +08:00
回复了 dvaknheo 创建的主题 PHP [吐槽]刚读了 yii3-demo, PHP 框架是怎么把 PHP (优雅的)玩死的。
这几个才是正规项目开始的地方。

yii-base-web,yii-base-api 和 yii-base-cli 这几个参考才是正式开始的地方

demo 是某些人练手的地方,确实不友好。

https://github.com/yiisoft/docs 的 Roadmap 还有很多,不知道什么时候呢,我等了 2 年了。
2020-04-14 19:43:07 +08:00
回复了 dvaknheo 创建的主题 PHP [吐槽]刚读了 yii3-demo, PHP 框架是怎么把 PHP (优雅的)玩死的。
2020-04-14 19:38:42 +08:00
回复了 dvaknheo 创建的主题 PHP [吐槽]刚读了 yii3-demo, PHP 框架是怎么把 PHP (优雅的)玩死的。
@dvaknheo
既然你放出了你得框架( https://github.com/dvaknheo/duckphp ),
那么我就去看一下吧:

你的 hello world 代码,虽然只有几行,但是存在几个点,我看了之后基本不会用,也会劝别人不要用。

```
<?php
require_once __DIR__.'/../vendor/autoload.php';

class Main
{
public function index()
{
echo "hello world";
}
}
$options=[
'namespace_controller'=>'\\', // 设置控制器的命名空间为根
'skip_setting_file'=>true, // 跳过配置文件
];
DuckPHP\DuckPHP::RunQuickly($options);
```

第一:echo "hello world"; 而不是 return "hello world"?直接在控制器里面输出 html 这也是一绝了(绝迹的绝),你想让其他人都学样在控制器 echo html 吗?为什么其他框架都要采用 return 呢?

第二:namespace_controller 这是什么配置,双斜杆为根,什么奇葩?单独只让自己知道一个标准?我是不看源码心里没底。好的框架不应该直接一看就知道是什么吗?和 yii 的 'controllerNamespace' => 'api\controllers' 比一下,后者我一看就知道是什么意思,我用的着这简写吗,我在给别人还是自己挖坑吗?你真要少代码,因为反正都隐藏了,不如直接不配置,约定俗称。

第三:skip_setting_file=true 脱裤子放屁?不应该是不写配置就是自动跳过配置吗?


第四:DuckPHP\DuckPHP::RunQuickly($options)?莫非还有一个 RunSlowly($options)?有什么问题是直接一个 DuckPHP\DuckPHP::Run($options)解决不了的?


第五:Controller 写在入口文件?这得多 demo 啊?这是 micro/slim/flask 这类函数式框架的写法吧?


对于你的提到 Yii3 demo 增加了复杂度,我是同样看法的,应该可以更加简单,不妨先看看 yii2 吧,如果 yii3 真就这样,反正不用就是了,现在也在难产中,什么时候出来不知道。
我 yii 2 目前够用(除了那个和 bootstrap3 绑定外)。

对于以上评价,可能显得刻薄,请谅解。
敬佩你写开源框架的精神。

Yii3 确实被玩坏了,你的判断是对的,我也有这种感觉,团队成员现在动力不大了,因为 PHP 的发展空间就摆在这里,这个轮子不好玩了,意义不大了,我们都要承认。

PHP 要续命,目前我看只有写出一个好的基于云原生的框架,然后提供这个框架之上的大量现成程序,改下就能用。(类似 thinkphp 的 fastadmin,微擎的应用商店,这些都是中国特色,老外是不屑玩的)。
2020-04-14 18:42:30 +08:00
回复了 wangbenjun5 创建的主题 程序员 现在的所谓 AI 推荐算法只能这样吗?
其实我也做过推荐,也能理解吧。

1,推荐外层的是根据用户浏览历史标签来的;
2,购物车页面的推荐才是根据用户当前选择的产品,推荐相关产品;

而亚马逊主要是根据用户购买历史,而不是浏览历史。


还有一个是性能问题,按照浏览历史用户通常看得太多,filter 不好实现啊,filter 之后基本没有价值了。

另外一个因为推荐的都是广告位,是主营收入呢,都被加入 filter 之后,平台怎么赚钱呢,难道学 AMAZON ?收入怕得大降,被竞争对手打死,被投资人骂死,Aamzon 交易手续费高啊,所以药不能停,只能继续牺牲消费者利益,保证平台利益了。
2020-04-14 18:26:43 +08:00
回复了 wangbenjun5 创建的主题 程序员 现在的所谓 AI 推荐算法只能这样吗?
说过狗东的笑话:你上午卖了一款 iPhone,下午给你推荐另外一家店铺同型号更便宜的,我究竟要不要退货呢?
2020-04-14 18:23:41 +08:00
回复了 taaaang 创建的主题 生活 买了个超高层
以前在深圳 30 层办公,
有次肇庆地震了,
椅子蹦了几下,
大家先是心里一慌,
然后又安静下来了,
反正电梯已经无法上去了,走楼梯也晚了。
2020-04-14 18:17:30 +08:00
回复了 taaaang 创建的主题 生活 买了个超高层
昨天跑到 32 层,
按向下的电梯(我们电梯 2 梯 4 户停 16 层我住 11 平时觉得速度还挺快的),
不巧两个都下行过程中,那个等啊,大概 3 分钟吧,平时我都是 30 秒到 1 分钟的啊。
这时候我就想以后不住高层。

还有打雷时候,停电停水时候,谁来分享下?
2020-04-14 18:04:40 +08:00
回复了 RJH 创建的主题 程序员 BOSS 直聘服务宕机了
原来是会员就不会出广告
2020-04-14 18:03:51 +08:00
回复了 RJH 创建的主题 程序员 BOSS 直聘服务宕机了
看这个帖子,在 firefox 下出现广告了,而 chrome 就不会。
2020-04-14 14:51:47 +08:00
回复了 dvaknheo 创建的主题 PHP [吐槽]刚读了 yii3-demo, PHP 框架是怎么把 PHP (优雅的)玩死的。
@dvaknheo


一:



<?php
// ...
echo Alert::widget()
//..
?>

我个人会选择

<?=Alert::widget(['class'=>'my-custom'])?>

更加灵活,而不是从控制器传入,
框架的核心有一条是逻辑分离,减少大脑负载,
yii model 负责规则配置、数据操作,
控制器负责接收请求、组装数据,
视图负责展示,
如果采用控制器传入,那么就不是在视图定制了,而是在控制器定制界面,
如果你连这条不清楚,
那么你的框架我非常不看好,
而且会劝别人不要用,
因为大家会找不到这个界面的代码写在哪里,
我是不会去维护这样的代码的。


二:

action="<?= $urlGenerator->generate('site/contact') ?>"


Url::to(['site/contract'])方法是可以用的。


三:

其实最希望的是 View 里 一个命名空间都不用,代码简洁得多。

前面有提到视图负责展示逻辑,你记住这句就可以了,只要没有脱离这个本质,再多命名空间,那么代码也是清晰和直白的。

代码的清晰条理性重要性很重要,你说的 view 一个命名空间不用,Yii 至少有 5 种选择:

1,将展示逻辑放在控制器;(展示逻辑不分离,不推荐)
2,隐式引用;(没有代码提示,不好 DEBUG,不直观,不推荐)
3,模板引擎;(个人认为 php 本身就是最好的模板引擎,不推荐)
4,采用 ajax ;(这个可以);
5,调用 rest 接口;(这个也可以)

你有第六种办法,还是用了其中一种?


四:

配置 rule VS 手动 debug

rule 可以自动生成(gii),改好 rule 就会错误提示一致,不会出 bug,不需要 debug 了,所以这就是自动驾驶,你现在和我说手动挡好?


五:

安全

比如内置了 jwt,rules 验证,cookie 加密,防注入等等,这些基本是目前框架标配吧。
你感觉不到,因为你看的是普通模板,不是高级模板,普通模板是隐藏了这些的,不表示它不存在,且你没有看官方文档,直接上手一个 demo 了。
比如需要配置 cookieValidationKey 你知道是做什么用的吗?
比如为什么配置文件要分为 local 和非 local ?
environments 里面的 prod 和 dev 又是做什么用的?


六:

有没有默认配置,让我的 业务工程看起来简单。


https://www.yiiframework.com/
首页 5 个步骤第一个步骤:安装 composer,下载标准模板,运行 yii serve 。
三行命令项目都跑起来了,进入开发了,你说没有默认配置?



七:
比如模拟某个人操作,没必要用 curl 模拟从他登录开始吧。
拿到 uid,直接调用 service 业务层就行了。

Model 还可以用,Console 也可以用,其他都可以用,不必重复,
Yii3 最大的不同和目的就是将 jq,bt 等前端框架从核心中分离出来。
至于这个 demo 你可以看成秀技术的,Yii 其实一直都是紧跟 PHP 版本的。


八:

php7.4 预加载,解决了一部分性能问题。但是并没有完全解决

还是请举出一个除了不能常驻内存之外的性能问题例子出来,不能说空话啊,写程序的不能空对空,得摆事实。



九:
一个请求过来,框架的 hello world 要比纯 php 的 helloworld 跑多出很多 php 代码。

现实是大家都用框架,WHY ?
都是大牛们为了优雅好玩的?
大牛们都傻?
老板也傻?
层次不同而已,你看到的是自己写得爽,对其他任来说是团队合作有一套默契的规范,能够高效解决问题。

十:

为了追求性能和模式,所谓 [WEB] 高手们抛下了 PHP 改用 go 、java 、c#,留下一个所谓“优雅”的 PHP 开发氛围。

你还是可以不用框架啊,而且你还是可以自己写一个框架啊,所以有什么好说的。
环境变了,
你以为 PHP 还是嵌入 html 中用,
其实已经经历过我前面提到过的 cake,zend,yii,laravel 多个时代了,
现在即将进入云原生时代了,
你期望 PHP 什么都能解决,
我只期望它做好 Web 即可,
至少现在开发一个人人商城,微擎这样的软件,我找不到更好的语言,
至于其他,至少我还会 Python,node,go,还在学习 C++和 C#,哪个适合我就用哪个,有什么好纠结的。



建议先看完官方手册,以及下载官方推荐的几个开源项目下来用用,然后自己动手写一个商业项目,想想这个框架适合场景,再来评价框架好坏更好。
当然还需要看下软件工程,软件思想的书籍。
知道你想骗我,想多从我这里掏点东西,自己快速学走捷径,先满足你吧。
然后有一天你会明白“欲速则不达”的道理。
2020-04-14 10:58:22 +08:00
回复了 Bramblex2 创建的主题 程序员 后端接口这样设计是否合理
结构应该表意,这是写代码基本规范,应该尽量遵守。

users:null vs users:[] 通常后者能明确告诉我们这是一个空的 User 列表
user:{} vs user:null 通常后者表示这个用户不存在而不是这用户存在但是属性为空
user: {id:''} vs user:{id:null} 区别是一个表示 id 为空字符串,一个表示 id 没有设置
user:{orders:[]} vs user:{orders:null} 当然选前者
book:{author:null} vs book:{author:''} 当然选前者
book:{author_name:null} vs book:{author_name:''} 应该还是选前者表示作者名未设置而不是被设置未空字符串,但是这条动态类型语言比较难办,那么可以商量来。

以上可以衍生到数据库设计上。

如果以上很难办,
通常是因为缺少一个合适的框架,
比如 django rest 和 yii rest 只需要数据库设计合理通常就没这些问题。
1 ... 103  104  105  106  107  108  109  110  111  112 ... 152  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2234 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 47ms · UTC 05:44 · PVG 13:44 · LAX 22:44 · JFK 01:44
Developed with CodeLauncher
♥ Do have faith in what you're doing.