成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

simdjson_php 高速解析json

shadajin / 1748人閱讀

摘要:介紹,它綁定來實現(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

相關(guān)文章

  • 簡述CDN 什么是CDN 為什么要用CDN CDN適用場景

    摘要:用戶向緩存服務(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)速度和成功率。解決因分布...

    番茄西紅柿 評論0 收藏0
  • 簡述CDN 什么是CDN 為什么要用CDN CDN適用場景

    摘要:用戶向緩存服務(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)速度和成功率。解決因分布...

    didikee 評論0 收藏0
  • CyberPanel免費(fèi)開源面板-高速LSCache免費(fèi)SSL證書-可自建DNS和企業(yè)郵局

    摘要:是一個基于開發(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證...

    番茄西紅柿 評論0 收藏2637
  • Weex——關(guān)于移動端動態(tài)性的思考、實現(xiàn)和未來

    摘要:什么是動態(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)化...

    heartFollower 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<