BKJIA快译】Google小组上周共享了其网站加速的技巧大全,其中包括了一些PHP性能技巧。然而这些PHP性能技巧在PHP社区中引起了一阵轩然大波,PHP小组立刻写了一篇公开信给这些性能技巧“抓虫”。有关Google的建议,BKJIA这几日做了整理,做出文章《加速,加速,再加速:来自Google的网站加速技巧大全》。其中第四页的后半部分就是专门讲PHP相关的性能技巧,在阅读本文之前可以先熟悉一下。
以下是来自PHP小组的信件译文:
PHP小组:这篇文章中所给的建议全部都是错误的。
1. 没有原因尽量不要复制变量
PHP 4和5核心的Zend引擎使用了一个名为“copy-on-write”的内存管理系统。也就是说,无论你将一个变量的值赋值给另一个变量多少次,只要你不改变数值,数据是不会被复制的。范例:
<ol class="dp-c"> <li class="alt"><span><span class="vars"><font color="#dd0000">$data</font></span><span> = </span><span class="func">str_repeat</span><span>(</span><span class="string"><font color="#0000ff">"*"</font></span><span>, 512 * 1024); </span><span class="comment"><font color="#008200">// synthesize 512K of data </font></span><span> </span></span></li> <li class=""> <span></span><span class="vars"><font color="#dd0000">$memory_used_before</font></span><span> = memory_get_usage(); </span> </li> <li class="alt"> <span></span><span class="vars"><font color="#dd0000">$more_data</font></span><span> = </span><span class="vars"><font color="#dd0000">$data</font></span><span>; </span> </li> <li class=""> <span></span><span class="vars"><font color="#dd0000">$memory_used_after</font></span><span> = memory_get_usage(); </span> </li> <li class="alt"> <span>print </span><span class="string"><font color="#0000ff">"Before: {$memory_used_before}\nAfter: {$memory_used_after}\n"</font></span><span>; </span> </li> </ol>
有thread-safety及调试功能的PHP 5.3下:
之前:853968
之后:854236
没有thread-safety及调试功能的PHP 5.2下:
之前:581912
之后:581976
也就是,调试模式下有268字节的差别,正常模式下普遍使用的)有64字节的差别。这和Google文中所述BKJIA编者注:Google原文的描述中,复制变量会“导致双倍的内存消耗”)相差甚远。
需要注意的是,PHP代码中坚决禁止在没有恰当过滤的情况下将用户提供的变量原本内容进行echo或者存储。
2. 为长字符串使用单引号
针对PHP 5.2及5.3的基准测试显示,虽然双引号使用窜改interpolation)而单引号使用连锁concatenation),这两个的速度是完全一致的甚至双引号常常会更快一些)。当使用没有包含变量的普通字符串时,使用双引号的性能要明显占优。
3. 使用echo而非print
这两个方法的运行速度取决于你的PHP是如何设置在host上的。
4. 不要与echo一起使用concatenation连锁)
事实正好相反。新的引擎处理多条echo的方法,导致在echo中使用concatenation实际上会比较快。
5. 使用switch/case替代if/else
最后,这句建议是彻底的胡说八道。决定在哪里使用switch/case或者if/else完全取决于编码习惯,他们的运行速度基本一致,除了在某些特定的情况下。
事实上,在更古老的PHP版本下PHP 3及很老的PHP 4版本)这些大部分建议是正确的,然而在新一代的PHP下,这些绝对是错误的。
- 加速,加速,再加速:来自Google的网站加速技巧大全
- 谷歌启动Web加速计划 拟改进TCP/IP和HTTP协议
- Google研究小组最新报告:互联网上,速度最重要!
- Google将推出开发者社区 改善Web性能
- Google面向开发者推出网页加速工具Page Speed

PHP和Python各有优势,选择应基于项目需求。1.PHP适合web开发,语法简单,执行效率高。2.Python适用于数据科学和机器学习,语法简洁,库丰富。

PHP不是在消亡,而是在不断适应和进化。1)PHP从1994年起经历多次版本迭代,适应新技术趋势。2)目前广泛应用于电子商务、内容管理系统等领域。3)PHP8引入JIT编译器等功能,提升性能和现代化。4)使用OPcache和遵循PSR-12标准可优化性能和代码质量。

PHP的未来将通过适应新技术趋势和引入创新特性来实现:1)适应云计算、容器化和微服务架构,支持Docker和Kubernetes;2)引入JIT编译器和枚举类型,提升性能和数据处理效率;3)持续优化性能和推广最佳实践。

在PHP中,trait适用于需要方法复用但不适合使用继承的情况。1)trait允许在类中复用方法,避免多重继承复杂性。2)使用trait时需注意方法冲突,可通过insteadof和as关键字解决。3)应避免过度使用trait,保持其单一职责,以优化性能和提高代码可维护性。

依赖注入容器(DIC)是一种管理和提供对象依赖关系的工具,用于PHP项目中。DIC的主要好处包括:1.解耦,使组件独立,代码易维护和测试;2.灵活性,易替换或修改依赖关系;3.可测试性,方便注入mock对象进行单元测试。

SplFixedArray在PHP中是一种固定大小的数组,适用于需要高性能和低内存使用量的场景。1)它在创建时需指定大小,避免动态调整带来的开销。2)基于C语言数组,直接操作内存,访问速度快。3)适合大规模数据处理和内存敏感环境,但需谨慎使用,因其大小固定。

PHP通过$\_FILES变量处理文件上传,确保安全性的方法包括:1.检查上传错误,2.验证文件类型和大小,3.防止文件覆盖,4.移动文件到永久存储位置。

JavaScript中处理空值可以使用NullCoalescingOperator(??)和NullCoalescingAssignmentOperator(??=)。1.??返回第一个非null或非undefined的操作数。2.??=将变量赋值为右操作数的值,但前提是该变量为null或undefined。这些操作符简化了代码逻辑,提高了可读性和性能。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

Dreamweaver Mac版
视觉化网页开发工具

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能