摘要:介紹,它綁定來實現(xiàn)快速解析,是一個高速的解析器,它使用了大多數(shù)單一指令。介紹環(huán)境依賴帶有的處理器即,年發(fā)布的微體系結(jié)構(gòu)的處理器和年發(fā)布的微體系結(jié)構(gòu)的處理器,大多數(shù)都是支持的最近的編譯器例如,或或,我們假設(shè)。
介紹
simdjson_php(https://github.com/crazyxman/...,它綁定simdjson來實現(xiàn)快速解析,simdjson是一個高速的json解析器,它使用了大多數(shù)SIMD單一指令。simdjson介紹:https://github.com/lemire/sim...
環(huán)境依賴php7+
帶有AVX2的處理器(即,2013年發(fā)布的Haswell微體系結(jié)構(gòu)的Intel處理器和2017年發(fā)布的Zen微體系結(jié)構(gòu)的AMD處理器),大多數(shù)cpu都是支持的
最近的C ++編譯器(例如,GNU GCC或LLVM CLANG或Visual Studio 2017),我們假設(shè)C ++ 17。GNU GCC 7或更高版本或LLVM的clang 6或更高版本
檢查操作系統(tǒng)/處理器是否支持它:
OS X: sysctl -a | grep machdep.cpu.leaf7_features
Linux: grep avx2 /proc/cpuinfo
使用簡介當(dāng)需要獲取一個較大json串中的某個key時 使用simdjson_key_value() 是比較合適的,不像json_decode() 把整個json串解析成數(shù)組,開辟不必要的內(nèi)存,當(dāng)然在性能上是略遜于hash查找的。
當(dāng)驗證一個字符串是否為json時simdjson_isvaild() 是比較合適的,并且是非??斓?,同樣不需要通過json_decode()來驗證。
//檢查字符串是否為一個有效的json: $isValid = simdjson_isvalid($jsonString); //return bool //解析一個json字符串,返回數(shù)組,對象,null,類似json_decode(),第三個參數(shù)為解析的深度 $parsedJSON = simdjson_decode($jsonString, true, 512); //return array|object|null. "null" string is not a standard json /* { "Image": { "Width": 800, "Height": 600, "Title": "View from 15th Floor", "Thumbnail": { "Url": "http://www.example.com/image/481989943", "Height": 125, "Width": 100 }, "Animated" : false, "IDs": [116, 943, 234, 38793, {"p": "30"}] } } */ //注意. " " 是一個分割符. 它必須是一個控制字符. 它用來分割對象的key或數(shù)組的下標(biāo) //例如. "Image Thumbnail Url" 是正確. "Image Thumbnail Url" 是錯誤的 //根據(jù)json串獲取指定key的值 $value = simdjson_key_value($jsonString, "Image Thumbnail Url"); var_dump($value); // string(38) "http://www.example.com/image/481989943" $value = simdjson_key_value($jsonString, "Image IDs 4", true); var_dump($value); /* array(1) { ["p"]=> string(2) "30" } */ //獲取json解析后的資源,只解析一次,后續(xù)使用不再解析 $resource = simdjson_resource($jsonString); //根據(jù)json資源獲取指定key的值 $value = simdjson_key_value($resource, "Image Thumbnail Url"); var_dump($value); // string(38) "http://www.example.com/image/481989943" $value = simdjson_key_value($resource, "Image IDs 4", true); var_dump($value); /* array(1) { ["p"]=> string(2) "30" } */ //檢查key是否存在,參數(shù)可以是一個json串也可以是一個json資源,返回true,false,null。當(dāng)?shù)谝粋€參數(shù)是字符串時返回null代表解析失敗 $res = simdjson_key_exists($jsonString, "Image IDs 1"); var_dump($res) //bool(true) $res = simdjson_key_exists($resource, "Image IDs 1"); var_dump($res) //bool(true)性能測試(秒)
filename | json_decode | simdjson_decode | simdjson_isvalid |
---|---|---|---|
apache_builds.json | 0.00307300 | 0.00225200 | 0.00018100 |
canada.json | 0.13955000 | 0.02773900 | 0.00358300 |
citm_catalog.json | 0.03030900 | 0.01334000 | 0.00117000 |
github_events.json | 0.00294100 | 0.00090400 | 0.00008500 |
gsoc-2018.json | 0.04292500 | 0.01112000 | 0.00186700 |
instruments.json | 0.00509700 | 0.00231800 | 0.00017500 |
marine_ik.json | 0.09833600 | 0.04417500 | 0.00463400 |
mesh.json | 0.01869200 | 0.00722600 | 0.00114800 |
mesh.pretty.json | 0.03576200 | 0.00738100 | 0.00163400 |
numbers.json | 0.00263600 | 0.00069900 | 0.00018200 |
random.json | 0.01713500 | 0.00973900 | 0.00063000 |
twitter.json | 0.01258600 | 0.00618400 | 0.00057400 |
twitterescaped.json | 0.01435900 | 0.00650400 | 0.00074300 |
update-center.json | 0.01506000 | 0.00869100 | 0.00047800 |
You may run the benchmarks by running the commands:
php benchmark/benchmark.php
如有不足之處下方留言即可,歡迎大家批評指正,我會虛心接納。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/31707.html
摘要:用戶向緩存服務(wù)器發(fā)起請求,緩存服務(wù)器響應(yīng)用戶請求,將用戶所需內(nèi)容傳送到用戶終端。當(dāng)處理器引用存儲器中的某地址時,高速緩沖存儲器便檢查是否存有該地址。 考慮到對CDN認(rèn)知程度的各層小伙伴,開頭有必要簡單介紹下CDN原理(高年級同學(xué)可以直接跳過): 一、CDN的基本原理和基礎(chǔ)架構(gòu) CDN是將源站內(nèi)容分發(fā)至最接近用戶的節(jié)點(diǎn),使用戶可就近取得所需內(nèi)容,提高用戶訪問的響應(yīng)速度和成功率。解決因分布...
摘要:用戶向緩存服務(wù)器發(fā)起請求,緩存服務(wù)器響應(yīng)用戶請求,將用戶所需內(nèi)容傳送到用戶終端。當(dāng)處理器引用存儲器中的某地址時,高速緩沖存儲器便檢查是否存有該地址。 考慮到對CDN認(rèn)知程度的各層小伙伴,開頭有必要簡單介紹下CDN原理(高年級同學(xué)可以直接跳過): 一、CDN的基本原理和基礎(chǔ)架構(gòu) CDN是將源站內(nèi)容分發(fā)至最接近用戶的節(jié)點(diǎn),使用戶可就近取得所需內(nèi)容,提高用戶訪問的響應(yīng)速度和成功率。解決因分布...
摘要:是一個基于開發(fā)的服務(wù)器控制面板,支持高性能緩存,提供免費(fèi)證書,可以一鍵簽發(fā)證書,支持自建服務(wù)器,可以一鍵安裝,你可以用它搭建服務(wù)器。關(guān)于的安裝與使用早在年挖站否就已經(jīng)分享過了免費(fèi)服務(wù)器面板安裝與使用,這幾年發(fā)展越來越好了。CyberPanel是一個基于OpenLiteSpeed開發(fā)的服務(wù)器控制面板,支持LSCache高性能緩存,提供免費(fèi)letsencrypt SSL證書,可以一鍵簽發(fā)SSL證...
摘要:什么是動態(tài)性今天在移動端,尤其是像手機(jī)淘寶這樣的中,動態(tài)性問題逐漸成為一個比較棘手的問題。在云端實現(xiàn)了天貓前端運(yùn)營發(fā)布系統(tǒng)斑馬的對接,在前端開發(fā)實現(xiàn)了主會場的界面模塊和業(yè)務(wù)邏輯處理,同時在客戶端上對接了手機(jī)天貓手機(jī)淘寶。 什么是動態(tài)性 今天在移動端,尤其是像手機(jī)淘寶這樣的 App 中,動態(tài)性問題逐漸成為一個比較棘手的問題。所謂動態(tài)性,就是把移動應(yīng)用本身的靈活性、迭代更新的周期和成本優(yōu)化...
閱讀 2588·2021-09-22 15:25
閱讀 3001·2021-09-14 18:03
閱讀 1268·2021-09-09 09:33
閱讀 1738·2021-09-07 09:59
閱讀 2961·2021-07-29 13:50
閱讀 1527·2019-08-30 15:44
閱讀 1742·2019-08-29 16:22
閱讀 1316·2019-08-29 12:49