この Ruby 1.8.7 アプリケーションでYAML.load
は、既存のデータが多数の比較的小さな YAML ドキュメントに格納されているため、YAML デシリアライズ ( で実行) が必要ですが、これがパフォーマンスのボトルネックになっています。
これを改善する方法やライブラリはありますか? ruby 1.9 へのアップグレードはオプションではありません。
この Ruby 1.8.7 アプリケーションでYAML.load
は、既存のデータが多数の比較的小さな YAML ドキュメントに格納されているため、YAML デシリアライズ ( で実行) が必要ですが、これがパフォーマンスのボトルネックになっています。
これを改善する方法やライブラリはありますか? ruby 1.9 へのアップグレードはオプションではありません。
私は専門家ではありませんが、YAML ドキュメントを Marshal ドキュメントに変換し、その後アプリケーションで使用することが可能であれば、Marshal.load
はるかに高速になるはずです。YAML と Marshal のパフォーマンスを比較するために、しばらく前にこの要点を使用しました。
私はこれを行う方法を見つけられませんでした。文字列操作を介してYAMLをJSONに変換し、YajlやOJなどの高速JSONパーサーで解析しようとしましたが、YAMLをJSONに変換するオーバーヘッドは、実際にYAMLを解析するよりもすでに長くなりました。
私の変換スクリプトは、賢い人が本当にこれを行うために多くの時間を費やした場合に比べておそらく速くはありませんでしたが、自分のスクリプトを最適化しても、それでも勝てないことに気付いた後、これを早くあきらめましたYAMLの解析時間は、アプローチ全体を保証するのに十分です。
この実験によると、1.8.7 で ZAML を使用すると、YAML パーサーよりも高速になります。