摘要:介紹,它綁定來實現快速解析,是一個高速的解析器,它使用了大多數單一指令。介紹環境依賴帶有的處理器即,年發布的微體系結構的處理器和年發布的微體系結構的處理器,大多數都是支持的最近的編譯器例如,或或,我們假設。
介紹
simdjson_php(https://github.com/crazyxman/...,它綁定simdjson來實現快速解析,simdjson是一個高速的json解析器,它使用了大多數SIMD單一指令。simdjson介紹:https://github.com/lemire/sim...
環境依賴php7+
帶有AVX2的處理器(即,2013年發布的Haswell微體系結構的Intel處理器和2017年發布的Zen微體系結構的AMD處理器),大多數cpu都是支持的
最近的C ++編譯器(例如,GNU GCC或LLVM CLANG或Visual Studio 2017),我們假設C ++ 17。GNU GCC 7或更高版本或LLVM的clang 6或更高版本
檢查操作系統/處理器是否支持它:
OS X: sysctl -a | grep machdep.cpu.leaf7_features
Linux: grep avx2 /proc/cpuinfo
使用簡介當需要獲取一個較大json串中的某個key時 使用simdjson_key_value() 是比較合適的,不像json_decode() 把整個json串解析成數組,開辟不必要的內存,當然在性能上是略遜于hash查找的。
當驗證一個字符串是否為json時simdjson_isvaild() 是比較合適的,并且是非常快的,同樣不需要通過json_decode()來驗證。
//檢查字符串是否為一個有效的json: $isValid = simdjson_isvalid($jsonString); //return bool //解析一個json字符串,返回數組,對象,null,類似json_decode(),第三個參數為解析的深度 $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或數組的下標 //例如. "Image Thumbnail Url" 是正確. "Image Thumbnail Url" 是錯誤的 //根據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解析后的資源,只解析一次,后續使用不再解析 $resource = simdjson_resource($jsonString); //根據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是否存在,參數可以是一個json串也可以是一個json資源,返回true,false,null。當第一個參數是字符串時返回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
如有不足之處下方留言即可,歡迎大家批評指正,我會虛心接納。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/31707.html
摘要:用戶向緩存服務器發起請求,緩存服務器響應用戶請求,將用戶所需內容傳送到用戶終端。當處理器引用存儲器中的某地址時,高速緩沖存儲器便檢查是否存有該地址。 考慮到對CDN認知程度的各層小伙伴,開頭有必要簡單介紹下CDN原理(高年級同學可以直接跳過): 一、CDN的基本原理和基礎架構 CDN是將源站內容分發至最接近用戶的節點,使用戶可就近取得所需內容,提高用戶訪問的響應速度和成功率。解決因分布...
摘要:用戶向緩存服務器發起請求,緩存服務器響應用戶請求,將用戶所需內容傳送到用戶終端。當處理器引用存儲器中的某地址時,高速緩沖存儲器便檢查是否存有該地址。 考慮到對CDN認知程度的各層小伙伴,開頭有必要簡單介紹下CDN原理(高年級同學可以直接跳過): 一、CDN的基本原理和基礎架構 CDN是將源站內容分發至最接近用戶的節點,使用戶可就近取得所需內容,提高用戶訪問的響應速度和成功率。解決因分布...
摘要:是一個基于開發的服務器控制面板,支持高性能緩存,提供免費證書,可以一鍵簽發證書,支持自建服務器,可以一鍵安裝,你可以用它搭建服務器。關于的安裝與使用早在年挖站否就已經分享過了免費服務器面板安裝與使用,這幾年發展越來越好了。CyberPanel是一個基于OpenLiteSpeed開發的服務器控制面板,支持LSCache高性能緩存,提供免費letsencrypt SSL證書,可以一鍵簽發SSL證...
摘要:什么是動態性今天在移動端,尤其是像手機淘寶這樣的中,動態性問題逐漸成為一個比較棘手的問題。在云端實現了天貓前端運營發布系統斑馬的對接,在前端開發實現了主會場的界面模塊和業務邏輯處理,同時在客戶端上對接了手機天貓手機淘寶。 什么是動態性 今天在移動端,尤其是像手機淘寶這樣的 App 中,動態性問題逐漸成為一個比較棘手的問題。所謂動態性,就是把移動應用本身的靈活性、迭代更新的周期和成本優化...
閱讀 2556·2021-09-22 15:25
閱讀 2963·2021-09-14 18:03
閱讀 1212·2021-09-09 09:33
閱讀 1700·2021-09-07 09:59
閱讀 2930·2021-07-29 13:50
閱讀 1500·2019-08-30 15:44
閱讀 1715·2019-08-29 16:22
閱讀 1287·2019-08-29 12:49