secondparty/dipper
Composer 安装命令:
composer require secondparty/dipper
包简介
A fast YAML parser that parses for the more commonly-used subset of YAML’s v1.0 and v1.2 specs.
README 文档
README
Dipper is fast YAML parser that parses for the more commonly-used subset of YAML’s v1.0 and v1.2 official specifications. It is being made freely available for use in personal or commercial projects under the BSD 3-clause license.
Philosophy
One has to question themselves when they sit down to create a YAML parser considering there are already a number of nice solutions out there. There’s SPYC, which does a wonderful job parsing for YAML 1.0, and Symfony also has a YAML parser that parses to YAML 1.2 specifications. Neither project claims to completely support all aspects of the specs that they repsectively parse for (the specs are quite large and in-depth), but they both support a large subset of the defined features.
But it occurred to us that we rarely use most of those features. Perhaps we’re not YAML power-users, but the subset we find ourselves using mostly is the same YAML that those libraries use when they convert straight PHP back to YAML. Mostly: normal key/value pairs (strings, scalars, numbers & booleans), lists, and maps.
Part of YAML’s design was defining a somewhat complex-to-parse syntax in exchange for simple (yet powerful) formatting for human readability. We found that a lot of the parsing complexity came in supporting features above and beyond the simple subset of YAML that we actually use.
And thus, Dipper was born. It’s built for speed, micro-optimized to parse the parts of YAML that we actually use, and nothing more.
Results
We’ve run a couple of benchmarks to make sure that Dipper is quick and thus, is worth releasing, and here is what we found. Keep in mind that we’re not scientists, but are here as an example of comparison.
Parser | YAML->PHP | PHP->YAML
------------+-------------+-------------
SPYC | ~22ms | ~17ms
Symfony | ~24ms | ~12ms
Dipper | ~10ms | ~ 3ms
We ran the same 500-line YAML file through each of the parsers described in this document 250 times. We then took the average time for each parser to parse the document to get the YAML->PHP time. Next, we parsed the 500-line YAML file into PHP and then converted that back into YAML 250 times per parser. The average time to convert it back are the PHP->YAML times.
As you can see by these times, Dipper comes out ahead in both parsing YAML and building it back up.
Usage
Dipper performs two tasks: it converts well-formed YAML into PHP, and it converts PHP into well-formed YAML.
// include Dipper and ready it for use require('Dipper.php'); use secondparty\Dipper\Dipper as Dipper; // now you can convert YAML into PHP $php = Dipper::parse($yaml); // or you can convert PHP into YAML $yaml = Dipper::make($php);
That’s all there is to it.
What It Will Parse
Below is a complete list of the subset of YAML that Dipper will parse.
Strings
string: this is a string single_quoted_string: 'this is a single-quoted string' double_quoted_string: "this is a double-quoted string" string_with_single_quote: this's a string with a single quote string_with_colon: 'this is a string: containing a colon' string_with_comma: F j, Y quoted_number: "120" quoted_true: "true" quoted_false: "false" url: http://something.com
Scalars
literal_scalar: | This is a scalar that will preserve its line breaks. folding_scalar: > This is a scalar that will fold up line breaks.
Numbers
integer: 42 # becomes an integer float: -12.12 # becomes a float octal: 0755 # YAML 1.0-style, becomes an integer, converted from octal also_octal: 0o755 # YAML 1.2-style, becomes an integer, converted from octal hex: 0xff # becomes an integer, converted from hexadecimal infinite: (inf) # YAML 1.0-style, becomes INF, PHP constant for infinity minus_inf: (-inf) # YAML 1.0-style, becomes -INF, PHP constant for negative infinity not_a_number: (NaN) # YAML 1.0-style, becomes NAN, PHP constant for not-a-number also_infinity: .inf # YAML 1.2-style, becomes INF, PHP constant for infinity also_minus_inf: -.inf # YAML 1.2-style, becomes -INF, PHP constant for negative infinity also_nan: .NaN # YAML 1.2-style, becomes NAN, PHP constant for not-a-number
Booleans & Null Values
bool_true: true # becomes true (as a boolean) bool_false: false # becomes false (as a boolean) null_value: null # becomes a PHP null value shorthand_null: ~ # becomes a PHP null value empty_value: # becomes a PHP null value
Lists
regular_list: - first item - second item - third item shorthand_list: [ first item, second item, third item ]
Maps
regular_map: one: first two: second shorthand_map: { one: first, two: second }
Combinations of These
In addition to each of these elements individually, you can also combine and nest them as you’d expect to create more complex structures. Shorthand versions of lists and maps shouldn’t nest other lists or maps.
What it Makes
Below is a complete list of the PHP that Dipper will build from the YAML passed to it.
- strings
- integers
- floats (including any float constants)
- booleans
- null values
- empty strings
- sequential arrays (into lists)
- associative arrays (into maps)
- objects (if they’ve implemented
__toString)
Notes
- Like SPYC and Symfony’s code, Dipper also supports the
syckYAML parsing extension for PHP if it’s installed and enabled on your server. This moves YAML parsing down to the system level, resulting in parsing that is much, much faster than what straight PHP code itself can deliver. - In addition to YAML, we also really like Markdown. To better support Markdown, literal scalars will not right-trim each line for extra whitespace, allowing you to define Markdown-style new lines by ending a line with two spaces.
Thanks
A special thank you to Thomas Weinert for doing the leg work of getting dipper into the composer, travis, and phpunit arenas.
secondparty/dipper 适用场景与选型建议
secondparty/dipper 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 2.52k 次下载、GitHub Stars 达 20, 最近一次更新时间为 2015 年 02 月 25 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「yaml」 「parser」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 secondparty/dipper 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 secondparty/dipper 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 secondparty/dipper 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Easy to use SDK with grabber for multiple platforms at once like YouTube, Dailymotion, Facebook and more.
An MT940 bank statement parser for PHP
Laravel integration for the jsonapi.org parser
SUML for PHP
SUML support for Symfony
provides an facade for php-yaml, syck and symphony/yaml so switching in between is easier
统计信息
- 总下载量: 2.52k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 20
- 点击次数: 18
- 依赖项目数: 1
- 推荐数: 0
其他信息
- 授权协议: BSD-3-Clause
- 更新时间: 2015-02-25