在国内使用 laravel 开发的公司多吗,这么优美的框架开发起来是不是很舒服?

2017-04-28 16:23:16 +08:00
 hellowwo
32496 次点击
所在节点    PHP
150 条回复
denghongcai
2017-04-30 22:52:45 +08:00
@zencoding 哈哈,真理
denghongcai
2017-04-30 23:00:59 +08:00
单请求内存峰值 Laravel 毋庸置疑是比其他框架 /原生大的,每次请求 bootstrap 框架的时间也是很高的,可以尝试下 https://github.com/garveen/laravoole 这类项目

加上业务逻辑的情况下,对 MySQL / Cache 这种外部系统的请求都是同步 I/O 调用,对性能影响还是挺大的,耗在框架上的时间占比很难讲。具体情况具体分析吧

最后一句:不要抛开场景来谈技术选型
gouchaoer
2017-04-30 23:33:54 +08:00
@sagaxu
371 个城市数据配置请用 yaconf,php 每个请求都加载一遍很不划算
jiujianlu
2017-04-30 23:52:05 +08:00
真心不喜欢 Laravel,除了官网做得漂亮,实在找不出什么优势。
小项目我不会选这么重的框架,大一点的项目我会选 Symfony 2/3。

Laravel 想在工程化和极客范之间寻找平衡,最终给我的却是一种华而不实的感觉,喜欢不起来。
sagaxu
2017-04-30 23:55:06 +08:00
@gouchaoer 这类业务我们已经用了 swoole 常驻内存,fpm 里还剩一些暂时没迁移完的业务。性能要求很高的业务,跑 JVM 上了,性能要求高的基础设施,是 Java,C++和 Go 做的,PHP 做起来太累太麻烦。

swoole+php7 基本上可以榨干 php 的性能了,swoole 的协程用起来也还可以,虽然没有 go 语言方便。
msg7086
2017-05-01 06:59:14 +08:00
@bianhua 我说的是「通宵改原生」的代价,不是在说性能本身。
gouchaoer
2017-05-01 08:38:06 +08:00
@sagaxu
swoole 的 http 压测 qps 应该和单页 php/phalcon/yaf 一样啊,你们换 swoole 后 qps 有提升么?
bianhua
2017-05-01 10:22:27 +08:00
@msg7086 哦,我错了(捂着脸跑
ibegyourpardon
2017-05-01 11:15:12 +08:00
@ovear 我插个嘴跑个题,代码规范和框架约束这两者其实几乎每个人都早晚会遇到这些。

但我个人职位是偏技术管理方向,就我的经验看来……代码规范总会有执行不好的时候,而通过框架实施某种半强制的约束,其实总体上来看,在大家的交流方面是省心一些的。

虽然我也觉得其实限制死了有时候挺不爽,但写久了发现还是工具框架的约束比规范来得靠谱……

当然这个话题和这里说 Laravel 其实没有什么直接关系就是了。
ibegyourpardon
2017-05-01 11:24:29 +08:00
同是 Laravel 5.2,一套东西上,我们跑过一秒钟 100 都扛不住的业务,也跑过 2000+无障碍……

这种锅我觉得纯粹丢给 Laravel 或者 PHP 或者服务器都不对。

我就是那个同环境下 100 跑不过跑到 2000 + 的人。

重新思考了业务,一步步拆开,重新组合,总有办法。
sagaxu
2017-05-01 13:50:06 +08:00
@gouchaoer 和我直接有关的那个 case,没法跟 fpm 对比,不用 swoole 协程得开 1000 到 3000 个 fpm 进程,吃不消。如果不用 swoole,只能 Java 或者 Go 了。其它迁移到 swoole 的项目,CPU 降低了很多。因为 swoole 是我们厂维护的,所以不大可能考虑其它标榜高性能的 php 框架。
dawniii
2017-05-01 15:45:39 +08:00
@sagaxu 使用 swoole 替代传统的 php 开发模式吗?感觉牺牲了 php 无状态的优势,不太好。需要效率的地方我感觉换个语言才是王道
sagaxu
2017-05-01 16:40:10 +08:00
@dawniii php 的无状态那不是优势是劣势,无状态是架构上的,节点之间对等可替换,但是节点自己,需要记住一些自己的 metadata,内部是需要状态的。
dawniii
2017-05-01 21:25:45 +08:00
@sagaxu 我说的无状态,可以理解为。撒开膀子就是干。我不用特别关心内存会不会释放,不用担心第三方库是不是因为常驻内存而有什么奇怪的情况发生。因为每次请求就看做是一次生命周期。
dawniii
2017-05-01 21:33:22 +08:00
@sagaxu 无状态会让很多事情变得简单,这也是 php 开发效率高的原因,对比下 java 和 php 的部署。php 环境搭建好,覆盖文件就是更新了。为什么要把简单的事情复杂化呢。不如换个更擅长的语言。
sagaxu
2017-05-02 00:16:09 +08:00
@dawniii

先说内存的事,Java 和 Go 都有成熟的 GC,除非你开着全局变量并且一直往里塞东西,否则泄露不了内存,每个请求的 handler 是个闭包或者函数,只要不故意定义超过函数生命周期的变量,你不玩 off-heap 黑魔法,完全不会泄露内存。

部署的话,php 和 python 差不多,比起 Java 和 Go 麻烦太多了,Go 最简单,就一个可执行文件,大部分情况下也不依赖什么运行库。Java 比起 go 稍微麻烦一点,就是需要先安装一个 JRE,然后也是一个 jar 包直接运行(现代 javaweb 一般内置了 tomcat 这类 webserver),复杂一点就是把 war 扔到 tomcat 的 webapps 目录,它会自动重启。

php 和 python 就麻烦很多了,用 pip/pear 安装扩展的时候经常会遇到 xxx.h 找不到,典型的比如 db 驱动。然后还必须前置一个 nginx 或者 apache,fastcgi 配起来还麻烦,不同框架配置方法不一样,还要提防 cgi 的 fixpath 问题。python 稍微好一些,uwsgi 比较简单,或者直接走 http 协议更简单。Java 和 Go 的最简单,把 static 资源外的直接 proxy_pass 走就行了。
PHP 光是把环境搭一遍都很麻烦。

php7.1 开始内置代码的 cache 了,改 php 文件是没用的,改完文件得重启 fpm 进程才能生效,这个应该是性能增强带来的副作用。在需要重启服务以后,php 的新版本手动部署,已经跟 java 或者 go 没有不同了。




觉得 php 部署简单的,我提个前几年遇到过好几次的场景,看看大家有没有好办法。

几台服务器,无外网连接,系统有 rhel5 和 rhel6,还有 ubuntu12 和 14,还有 windows 32 位和 64 位都有,用到的数据库是 pgsql 和 db2,如何打包 php 程序过去部署?

当时我的解法是,Java 给每个平台下载一个 JRE,应用打成 jar 包就好了,db 驱动也是 java 实现的,直接打进 jar 包里了,不依赖运行库。php 真的难倒了我,最后,我给每个平台下载了对应版本的 vmware,然后为 php 制作了虚拟机镜像,把兼容性工作交给了 vmware 去做。还好那些机器都有图形界面和 root 帐号,不然还得折腾无 gui 甚至无 root 的情况下怎么安装 vmware。
hellowwo
2017-05-02 09:28:39 +08:00
@sagaxu 你这种情况用 Docker 会更好
sagaxu
2017-05-02 09:31:30 +08:00
@hellowwo 给无外网网络的 rhel5 和 windows 装 docker,你是在开玩笑吗?
pein
2017-05-02 10:01:49 +08:00
laravel 中的一些思想是好的,跟我不知道 laravel 时的一些想法不谋而合,就是个人认为它可能在实现或者封装上过于复杂了点。外国人写框架就是这样,一门心思实现自己的想法,不怎么关注性能什么的,自己爽就行了。
hellowwo
2017-05-02 10:22:19 +08:00
@sagaxu 你不知道离线安装这回事吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/357983

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX