译PHP8.0 JIT介绍,及如何在PHP 8中设置JIT
PHP 8在PHP的内核中添加了JIT(即时编译)编译器,可以极大地提高性能。
纯解释程序语言没有编译步骤,可以直接在虚拟机中执行代码。实际上,包括PHP在内的大多数解释型语言都有一个轻量级的编译步骤来提高其性能。
另一方面,使用Ahead-Of-Time(AOT)编译进行编程的语言要求在运行代码之前首先对其进行编译。
即时编译是解释器和提前编译的混合模型,部分或全部代码通常在运行时进行编译,而无需开发人员手动进行编译。
PHP历史上是一种解释语言,所有代码都是由虚拟机(Zend VM)解释的。通过引入由PHP代码生成的Opcache和Opcodes,可以对此进行更改,并且可以将其缓存在内存中。PHP 7.0添加了AST(抽象语法树)的概念,该概念进一步将解析器与编译器分离。
PHP的JIT内部使用LuaJIT的DynASM,并作为Opcache的一部分实现。
深入
了解JIT有关最佳JIT配置,基准以及JIT如何工作的详细指南
Opcache可以检查使用的代码(通常称为热代码),并将它们的编译版本存储在共享的Opcache内存中。什么时候应该编译代码,什么时候应该编译代码是可配置的。
平台支持
当前在运行在x86和x64处理器指令集上的Linux和Windows系统上启用了JIT。当前不支持Apple M1和ARM CPU。
DynASM是PHP JIT中使用的编译器,它也支持ARM指令,但是尚不清楚PHP JIT是否可以在ARM处理器上运行。
如果CPU支持JIT,则JIT也可以使用AVX。2011年及以后的大多数消费者和服务器级处理器都支持AVX指令。cat /proc/cpuinfo | grep
…
如何安装与升级到 PHP 8.0 (Debian/Ubuntu)
PHP 8.0 带来了一些新功能,并在性能,语法,安全性和稳定性方面进行了改进。借助目前所有受支持的Debian和Ubuntu版本中可用的预编译软件包,可以轻松地在几乎任何类型的服务器/开发设置上安装PHP 8.0。
…目前尚无PHP 8.0的普遍可用版本。尽管PHP 8.0当前处于功能冻结状态,但有可能在2020年11月发布更稳定的版本之前进行许多更改。对于生产系统,请等待正式的稳定版本。
使用Laravel Packer创建laravel包脚手架
Laravel Packer是Sarthak Shrivastava的命令行工具,用于加快laravel软件包的创建速度。您可以在创建Laravel软件包时使用所有artisan命令,并为在软件包中创建的模型创建CRUD。要创建新程序包,可以使用packr
CLI,它将为您创建所有程序包脚手架:
packr new your-package-name {vendor} {author} {author_email}
在开发软件包时,可以使用熟悉的Artisan命令生成软件包控制器,模型等:
packr make:controller ExampleController
packr make:model Post
Packer是使用Laravel Zero构建的,您可以在他的YouTube播放列表中找到有关此组合的详细教程(由Sarthak发布):
您可以在bitfumes/laravel-packer上了解有关此软件包的更多信息,获取完整的安装说明,并在GitHub上查看源代码。
更多创建laravel软件包方法与工具请参考 https://laravelpackage.com/
…
译Composer 2.0 发布了!
1 /有什么新功能?
变更和改进的清单很长,如果您有兴趣阅读全部内容,请查看完整的变更日志。我将在这里重点介绍一些关键点。
性能提升
从Composer和packagist.org之间使用的协议到依赖关系解析,我们几乎对所有内容进行了全面检查,包括使用curl和约束评估优化来并行下载文件。这导致速度和内存使用方面的巨大改进。差异取决于您的用例,因此尽管我看到某些项目的两个方面的改进都超过50%的报告,但我无法在上面给出确切的数字。但是我敢肯定,如果您还没有尝试过Composer 2,将会感到非常惊讶。
作为补充,require
/remove
和部分更新现在快得多,因为Composer现在将仅加载要更改的程序包的元数据。…
译Laravel:何时使用依赖注入,服务和静态方法
有时我们需要将应用程序逻辑放在控制器或模型之外的某个地方,通常称为服务。但是,有几种方法可以使用它们-作为静态“helpers”,作为对象或依赖注入。让我们看看每一个什么时候用是合适的。
我在本主题中看到的最大问题–关于如何使用依赖注入和服务的文章很多,但是几乎没有解释为什么应该使用它以及何时用是真正有用的。因此,让我们通过一些理论深入研究示例。…
译Laravel前端脚手架的完整指南
关于Laravel前端脚手架的状态,存在很多争论,戏剧性和最终的困惑。我不会关注任何戏剧-谁对谁错是不重要的。
什么是重要的是确保人们理解的-相对复杂-前端脚手架的状态。初学者和经验丰富的开发人员似乎都对该前端“生态系统”的某些部分感到困惑。
因此,本文将尝试作为Laravel前端脚手架的完整指南。
注意:如果您只是想快速了解要使用的内容,而又不对不同解决方案的用途进行解释,请跳到文章结尾。…
100 Laravel Quick Tips下载
原laravel万能路由( 自动路由、动态路由)实现方法分享
laravel万能路由 自动路由 动态路由
有了万能路由就不用一条一条添加路由了,很方便。如果你要用资源控制器做Restful接口,那还是要写资源路由的,注意,资源路由一定要写在最上面。
Route::resource('photos', 'PhotoController');//资源路由要写在上面。 //万能路由 Route::group(['middleware'=>['web']],function (){ Route::any("/{module}/{controller}/{action}",function ($module,$class,$action){ $class = "App\\Http\\Controllers\$module\\".ucfirst(strtolower($class)).'Controller'; if(class_exists($class)) { $ctrl = \App::make($class); return \App::call([$ctrl, $action]); } return abort(404); })->where([ 'module'=>'[0-9a-zA-Z]+','class' => '[0-9a-zA-Z]+', 'action' => '[0-9a-zA-Z]+']); });
在你的控制器方法中获取参数要用(Request $request)
public function index(Request $request) {…
GO+PHP, 让全宇宙最好的两种语言合体的神器——RoadRunner
数据说话
从图中可以看出RoadRunner对比Nginx+FPM,运行效率是有数量级上的提升。
近期评论