个人开发的小商城,golang目前不太建议,因为生态不太健全,一个需求需要找现成的库重做轮子得令你抓狂,但做服务中间件、核心业务的高并发语言go语言倒是首选。中小型网站用PHP+vue的全栈都没啥问题。但我更推荐Python,因为Python的生态非常强大,一个需求你可以找出不下5种以上的解决方案,改善性能的选择性就比PHP大了。新版PHP吹到顶天就一个JIT编译器、和那堆半死不活的Web框架。而Python的加速方案、高性能框架也很多。中小型网站的Python Web全栈方案。Cython后端做运算密集型Python代码加速。这些方案一点都不比PHP慢。

  • 方案1:PyPy+tornado Web异步框架+Cython C扩展 这套组合可以跑Python并发量的页游应用,更何况是商城这些小菜一碟。
  • 方案2:PyPy+Flask Web框架+Cython+SqlAchemy数据库组件 ,SqlAchemy的数据库连接中间件有针对Cython版本的C性能优化。
  • 方案3:PyPy+Pyramid Web框架+Cython+SqlAchemy,跟第二方案很相似,跟Flask一样提供了很多方插件。
  • 方案4:Django类比Java的SpringBoot,但这货太过臃肿,对于低效的CPython解释器有些负重前行的感觉。所以我不太喜欢使用Django。

@索恩 平台回复发言不可见,就在自己评论回复你

有何不敢说,你单拿PHP做Web开发常用的工具跟Python生态支持相比,是不是笑话呢?我看扁PHP就一个理由:就是生态单一。这个足将维护PHP项目的那帮人掉打多次也不怨。Python的强项不光是Web全栈、Python可以打通跨各个领域软件生态。覆盖数据分析、运维开发领域、制造业自动化等难道这是PHP能比的?!我自己使用Python也没有一味鼓吹它,Python那该死CPython性能问题,已经有其他成熟高性能Python拟补Python的不足。

以下是给各自的回复:

找不找到问题,不是Python Web开发方面的生态问题,而是找问题时程序员的水平问题(别在笑死了,也不要对号入座)。stackflow上面有一大堆Python Web开发的,说找不到问题的,应该说反省一下是否对一门编程语言的生态是否深入了解。

@sinux , @索恩 你们可能还没深入了解Python。中毒不中毒,看完我回复再作评论。你感兴趣的话,可以看我下面这个问题贴,我比知呼上那些培训号毫无原则性地鼓吹Python不一样,我在很多Python问题贴中,对那些无脑盲目鼓吹Python提出过尖锐的批评。客观地说Python有很多不足、但它可取的地方是生态百花齐放,通过Cython非常轻易地将C代码和Python解释器打通。我不否认PHP在中小型的Web开发的易用性。

Python做Web开发顶不顶天,轮子够不够看我给上面一个老兄的回复。你说得“Python做Web顶天了”那是大多数人不深入了解Python,所以用单纯用CPython去跑Web后端的代码当然定天了。CPython只有Numba+Cython的加速技术才能在高并发场景环境下去跑。

Python的生态不是光有Python语言的,还有高性能Cython语言,它融入C和Python语言的易用性。我从事做Linux后端开发、写各种服务中间件。经常跟Python、C++、Cython这些语言打交道。用Python去做Web后端不可能单纯用Python代码来写核心业务逻辑和功能实现,核心的业务和功能细节几乎靠Cython、和C的混编实现的。

我举一个Python的Web高并发的方案 的例子。当然Python只是调包的角色将现成的Web框架和自己用Cython写的C扩展打通。Flask 、Pyramid、tornado这些Web请求入口使用异步API处理这类并发请求,这些请求转发给Web后端,通常这个Web后端可以另一个Python后台进程加载由Cython语言实现的C扩展,该C扩展内部的核心代码采用一种或多种线程并行技术处理来自网络的I/O请求或者密集型运算,因为Cython支持OpenMP多核线程并行、SIMD这些技术都非常成熟。

深入理解CPython实现的执行原理,那CPython根本就烂泥扶不上的。所以单纯CPython做Web后端,在生产环境并发量大的场景用CPython去跑行当然不行的。但对于小商城,用纯Python代码来写足以应付。当业务量或需求更加复杂时可以用上PyPy+Cython的执行模式、或者CPython+Numba JIT做前端+Cython后端的执行模式。

值得一提的是,PyPy在大部分CPU密集型、循环嵌套的Python代码中执行性能表现的非常出色的,PyPy底层的执行有些类似JVM虚拟机,被编译的Python字节码在执行目标是尽可能实现Python层面的无栈化可以摆脱类似CPython解释器类似完全基于栈的低效的执行方式,而CPython严格意义上连一个虚拟机都算不上。因为CPython连一个原生内置的JIT编译器都没有,而CPython鼓吹者在收割各种韭菜时即喜欢将Numba、PyJion歪曲成CPython内置的JIT编译器技术,误导新手,我在《Python是不是被严重高估》那一贴对那些言论作出理性的批判。PyPy7.0以上的版本完全兼容CPython的异步API库、这些目前在Python领域应付高并发I/O场景、摆脱GIL高消耗的成功的技术。当前的毛病就是字符串拼接方面会略低于CPython。

过去的PyPy因为对Cython的支持一直备受各种批评。而新版的PyPy在支持Cython的兼容性和调用执行时的性能开销作出了很大的改善。现在的PyPy也跟兼容PyPI上各种主流的C扩展库。所以笔者在各种Python应用场景中,已经将PyPy作为自己默认的Python解释器去使用。