30
エコな Web サーバー emasaka

エコなWebサーバー

  • Upload
    emasaka

  • View
    1.204

  • Download
    0

Embed Size (px)

Citation preview

Page 1: エコなWebサーバー

エコなWebサーバーemasaka

Page 2: エコなWebサーバー

自己紹介

● twitterとかGitHubとか: emasaka● blog: 本を読む

http://emasaka.blog65.fc2.com/

Page 3: エコなWebサーバー

● ダジャレをGoogle検索結果としてtwitterに流すメソッドのたぶん元祖

Page 4: エコなWebサーバー

過去の実績

● Bash on Rails● pure Bashのメタプログラミングで、オブジェクト指向もどき+ActiveRecordもどき+ERBもどき+YAMLもどき、ほか

Page 5: エコなWebサーバー

● sh.inatra● pure Bashでsinatraもどき

Page 6: エコなWebサーバー

● 2008年LL future「キミならどう書く」● 数値をK/M/G/T表記● →ddでファイルを作ってls -lh

Page 7: エコなWebサーバー

ヒキョーなネタ

Page 8: エコなWebサーバー

本題

Page 9: エコなWebサーバー

Webのページには余分なものがいっぱい

必要なのはここだけ

※GI○AZINEさん例にしてごめんなさい

Page 10: エコなWebサーバー

エコじゃない!

MOTTAINAI!

Page 11: エコなWebサーバー

● ブラウザでカット?● Adblock PlusとかGreaseMonkeyとか

● でも送ってくる分のHTMLが無駄

MOTTAINAI!

Page 12: エコなWebサーバー

HTTPの仕様を見る

● HTTP 1.1 "Range Requests and Partial Responses"

● コンテンツの一部分をリクエストできる● リクエストヘッダーにRange:フィールド● 206 Partial Contentのレスポンス

Range: bytes=1000­

Page 13: エコなWebサーバー

使用例

● ダウンローダー● 分割ダウンロード● リジューム

● 2chブラウザ(追記型データ)

Page 14: エコなWebサーバー

ただ

● バイト数指定なので、本文抽出には使いづらい● やっぱりDOMとかでやりたい

新しい指定方法が必要

Page 15: エコなWebサーバー

メールヘッダを見てみる

● 1990年代に一部で流行(通信用語の基礎知識 http://www.wdic.org/w/WDIC/X-Moe より)

X­Moe: CCSakura/Sakura(萌え属性表明)

Page 16: エコなWebサーバー

X-*フィールド

● 勝手拡張フィールド● X-Mailer:とかX-ML-Name:とかはメジャー

Page 17: エコなWebサーバー

HTTPのレスポンスヘッダでも

● Passengerで

X­Powered­By: Phusion Passenger (mod_rails/mod_rack) 2.2.5

Page 18: エコなWebサーバー

● WordPress.comのHTTPレスポンスヘッダー● X-*:フィールドを使ってリクルート

X­hacker: If you're reading this, you should visit automattic.com/ jobs and apply to join the fun,  mention this header.

※ネタ元http://www.1x1.jp/blog/2009/09/wordpress_http_heade.html

Page 19: エコなWebサーバー

以上をふまえて、X-*拡張を使って

X­Path:

というHTTPリクエストヘッダーを提唱します

Page 20: エコなWebサーバー

XPathで指定

● X-Path:フィールドでXPathを指定● HTMLのうち、その部分だけ返ってくる

X­Path: //p[@id="hello"]

<p id="hello">〜</p>

※厳密にはこの指定じゃNGみたいですが

(リクエスト)

(レスポンス)

Page 21: エコなWebサーバー

さっそくサーバーを実装してみる

WEBrickなら

Rubyで簡単に拡張できて実験に便利

ですね

Page 22: エコなWebサーバー

作りました

● 名付けて

WEBrick-DOM(ウェブリック・ドム)

←これはリックドム

Page 23: エコなWebサーバー

サーバーのサンプル(WEBrick)

require 'webrick'

srv = WEBrick::HTTPServer.new({  :DocumentRoot => './',  :BindAddress => '127.0.0.1',  :Port => 20080 })trap('INT'){ srv.shutdown }srv.start

※ほぼRubyのリファレンスマニュアルから

Page 24: エコなWebサーバー

サーバーのサンプル(WEBrick-DOM)

require 'webrick/dom'

srv = WEBrick::HTTPServer.new({  :DocumentRoot => './',  :BindAddress => '127.0.0.1',  :Port => 20080 })trap('INT'){ srv.shutdown }srv.start

Page 25: エコなWebサーバー

やってること

● WEBrickのDefaultFileHandlerをラップするサブクラスを作る● X-Path:フィールドがあればnokogiriで処理● それ以外はsuper丸投げ

● FileHandler.add_handler()で、.htmlと.htmのハンドラーに指定

● 50行ぐらいのごく簡単なコードです※参考http://jp.rubyist.net/magazine/?0002-WEBrickProxy

Page 26: エコなWebサーバー

※作ってから気付いた

問題点

Page 27: エコなWebサーバー

わざわざ広告カットの

APIを自分で提供する

サイトってないだろJK

Page 28: エコなWebサーバー

それ以前に

これキャッシュ効かなくない?

Page 29: エコなWebサーバー

エコじゃない!

MOTTAINAI!

Page 30: エコなWebサーバー

余った時間で

DEMO