作家
登录

别再像2009年那样写PHP代码了

作者: 来源: 2017-08-23 09:13:10 阅读 我要评论

【51CTO晃荡】8.26 带你与清华大年夜学、搜狗、京东大年夜咖们一路商量基于算法的IT运维实践


分开在Facebook担负工程师的仅仅2个月时光,我就很困惑,外面的世界看上去仍然像是在2009年的时刻那样写 PHP。

貌似人们大年夜来没听过 Hack、 HHVM、 XHP 等等,人们仍然在代率攀里大年夜量应用 require() 和 include() 语句。的确了。

我仍然认为 PHP 是一门写前端应用的优良说话(营业逻辑和 API 层),但只有当你应用了以下它的现代优势时,这一说法才成立:

HHVM 指 HipHop 虚拟机,是在 Facebook 开辟的旨在极大年夜改进 PHP 范围化的履行复杂度问题。

别再像2009年那样写PHP代码了

1. Hack

打出你的变量:

说实话,PHP 最大年夜的问题是它缺乏强类型。 变量可所以任何类型,很多时刻这就是一个准时炸弹。

如不雅你不得不写如许的代码:

  1. if ($var !== null && is_int($var)) {   
  2.     //... 

这意味着你可以想引用一个null变量,或者缺点的变量类型。

如不雅你添加了 hack 类型提示,它强迫束缚你的变量(包含把他们标记为可能为 null)。例如:

  1. class Foo { 
  2.   ?int $var = null;  // ... some code ... 

可以用在办法签名、类属性等膳绫擎,接着它许可你经由过程 hh_client 检查代率攀里是否存在缺点,存在就会把类型缺点高亮出来。

Async 异步

对于面子的 PHP 网站来说,下一?重要的跨越是应用 hack 的 async/await 关键词。

如不雅你大年夜未接触过类似特点的说话,我来解释一下。

Hack 是向 PHP 逐渐添加类型信息的门路,并且它是基于 PHP 的。

比如讲,你须要对数据库做 3 次函数调用,为了获取 3 块数据。为了计算出页面想要的结不雅,你须要所有 3 个萌芽结不雅,但每个结不雅都须要 1 条不一样的 SQL 语句。

一般你会如许写:

  1. $data1 = querySQL1(); 
  2. $data2 = querySQL2(); 
  3. $data3 = querySQL3(); 
  4. $result = computeResult($data1, $data2, $data3); 

好,实际上,除非你在明白的做一些牛逼的器械,PHP 平日是在一个请求琅绫擎单线程跑的。 这意味着办事器会起首给第一条萌芽履行一条 SQL,等待结不雅,然后再履行第二条 SQL,接着再履行第三条。

这有什愦问题呢?这狼9依υ?题是,计算最终结不雅所需的时光是履行 query1、query2 和 query3 三者的时光之和。

但大年夜多半数据库都是多线程,且可以并行履行操作的。如不雅在此之上,你的 DB 在 SSD 上而不是在机械硬盘上履行,你就可以应用上 DB 的多核处理器和并行处理才能...

如不雅你在萌芽多个 DB 或者多个不合的办事,或是请求多个 API,对你来嗣魅这一特点也可以发挥优势。

  1. list($data1, $data2, $data3) = await\HH\Asio\v(array( 
  2.   querySQL1(), 
  3.   querySQL2(), 
  4.   querySQL3(), 
  5. )); 

是这种方法,3 条萌芽一次性发送并等待结不雅。如今获取 3 块数据的时光就是履行耗时最长那条萌芽的时光,因为 3 条都在并行处理。

Hack 应用图表的方法更好地对 async 做了解释:https://docs.hhvm.com/hack/async/introduction

Hack 供给了对 MySQL, memcache 和 Curl 的 async 实现,所以你可以只需用它们的库调换掉落你的调用就能急速应用到这一优势。

Collections:

PHP 数据,有时刻是一个向量,有时刻是一个字典,有时刻两者都是。

即便你知道它琅绫擎包含什么,其他的工程师很可能认为本身也知道,但却在琅绫擎放进了缺点的数据类型。

如不雅你曾经应用过像 C#, Java 或 C++ 如许的说话,你可能对 Generics 和 Collections 会认为熟悉。

Hack 惹人了 Collections, 它让你指定 Collections 琅绫擎的数据类型。 这意味着你只是盲目寄望于数组包含了你想要的值,如今你知道这一构造包含了你想要的数据类型(字符串、整型等等)。

  1. class Bar { array  
  2. $vector_of_ints = array();  
  3. array  
  4. $dictionary_with_string_keys = array();  

  5.   推荐阅读

      Python爬虫实战:股票数据定向爬虫

    【51CTO晃荡】8.26 带你与清华大年夜学、搜狗、京东大年夜咖们一路商量基于算法的IT运维实践 解释 网站选择原则: 股票信息静态存在于html页面中,非js代码生成,没有Robbts协定限制。>>>详细阅读


    本文标题:别再像2009年那样写PHP代码了

    地址:http://www.17bianji.com/lsqh/36864.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)