{ 2010.12.13 }

PHPExcelとReviserの比較(後編)

    はてなブックマーク - PHPExcelとReviserの比較(後編)
    このエントリーをはてなブックマークに追加

    まさかの1日明けでアドベントカレンダーの順番が回ってきました。
    生まれ変わって元素になるなら、アルミニウムになりたい
    ・・・という設定らしい1年目の新人、萩原です。

    さて、前回はPHPExcelとReviserの機能について比較を行いました。
    機能としてReviserも十分な機能を持ち合わせていますが、PHPExcelの方が優れているという結論でした。

    スピードの比較

    さて、実際に運用していく上でスピードは重要なポイントだと思います。
    ファイルダウンロードに時間がかかってしまってはストレスもたまりますしね。
    というわけで、今日は、スピードについて検証していくことにします。

    今回、クリックしてからダウンロードを開始する直前までの時間を測定しています。
    ソースにmicrotime(‘now’)を埋め込んでいる&virtualBox上のCentOSなので時間自体は正確ではない(というか倍くらい時間がかかっている)ですが、相対的な値としては問題ないです。

    20回ずつ測定をして平均を取っているので比較としては十分かと思われます。

    まずは、何も書きこまれていないテンプレートに何も入力せずそのまま出力した結果です。
    参考までにPHPExcelでのExcel5形式出力も一緒に載せています。

    Reviser
    平均値:0.033(s)
    標準偏差:0.016

    PHPExcel(.xlsx)
    平均値:0.123(s)
    標準偏差:0.011

    PHPExcel(.xls)
    平均値:0.223(s)
    標準偏差:0.039

    かなり差がでましたね。
    ただ、Reviserと比べてPHPExcelの方が標準偏差が小さく安定はしているのかなという印象です。

    続いてテンプレートに横15、縦600すべてのセルに’test’と入力した状態で何も入力せずにそのまま出力した結果です。

    Reviser
    平均値:0.911(s)
    標準偏差:0.113

    PHPExcel(.xlsx)
    平均値:2.508(s)
    標準偏差:0.080

    PHPExcel(.xls)
    平均値:2.483(s)
    標準偏差:0.027

    こちらも差がでましたね。

    次に何も入力されていない空のテンプレートに横10、縦1000すべてのセルに’test’と入力して出力した結果です。
    ここからはPHPExcelのExcel5形式での出力は行っていません。

    Reviser
    平均値:0.871(s)
    標準偏差:0.026

    PHPExcel(.xlsx)
    平均値:2.798(s)
    標準偏差:0.034

    こちらも時間はPHPExcelの方が時間がかかっています。
    この辺りで20回測定するのが面倒になってきてちょっと後悔を始めました・・・。

    最後に上の条件にさらに該当セル全てに色と左右上下の罫線を引いてみました。

    Reviser
    平均値:0.873(s)
    標準偏差:0.049

    PHPExcel
    平均値:73.269(s)

    ・・・タイプミスじゃないですよ。。。100倍くらい差が出ましたよ。
    CentOS内部で73秒平均なのですが、多分3,4分くらいかかってる気がしないでもない・・・
    因みにPHPExcelは20回やる気力が流石になかったので(無駄だし)5回しか測定してません。

    罫線と色のどちらに時間がかかっているかと思って色をつけずに出力させてみたところ40.981(s)かかりました。

    どっちもどっちといったところですかね。

    まとめ

    というわけで2回にわたってReviserとPHPExcelの比較を行ってきました。
    ReviserとPHPExcel、どちらも長所短所あると思います。

    色や罫線がある場合ちょっと使用に耐えられないレベルだという結果に見えますが、そうではないと思います。
    例えば色をつけることについても全てのセルに色や罫線をつけるわけではないし、PHPExcelは個別に指定できますが、Reviserはテンプレートを準備しないといけません。
    極端な話セルのパターンが100パターンあればReviserならあらかじめ100パターンのテンプレートセルを準備する必要があるという問題点があります。
    また、xlsx形式はPHPExcelしか使えません。

    機能的な面で見ればやはり、PHPExcelの方が優れていると思います。

    まぁ一方で流石に何分もダウンロードに時間がかかってしまっては困るという面もあります。
    Excelの出力はPHPExcelにしてもReviserにしてもかなりメモリを食いますので他の作業を並行して行うことが難しいです。
    (両者ともini_set(“memory_limit” , -1);をつけている理由ですね。これを記述していないとまともに動かせません。)

    現に私がPHPExcelで作ったもの(社内システムですが)は長いものは出力に5分ほどかかりますし、使いどころが難しいですね。

    個人的には基本的にはReviserだと思いますが、xlsx形式を使いたい場合、Excel2007関数をどうしても使いたい場合など、PHPExcelでないと機能が実現できない場合も出てくると思います。

    最後に役に立たない化学豆知識を

    空気中に2番目に多く存在している、酸素
    実は常磁性、つまり磁石に引っ付くってこと、ご存知でしたか?
    実際、液体酸素を流しているところに磁石を近づけると流れの向きが変わります。

    それでは。

    Comments are closed.