Caelum dicas web 2010
-
Upload
fabio-akita -
Category
Technology
-
view
2.286 -
download
0
description
Transcript of Caelum dicas web 2010
A apresentação já vai começar ...
Friday, April 16, 2010
AkitaOnRails.com
Friday, April 16, 2010
~ 50 min~ 85 slides
Friday, April 16, 2010
www.slideshare.net/akitaonrails
http://dl.dropbox.com/u/1732133/dicas-de-desenvolvimento-web-com-rails.zip
Friday, April 16, 2010
Entendendo a WebDicas sobre Desenvolvimento Web com Ruby
Fabio Akita
Friday, April 16, 2010
Friday, April 16, 2010
Recapitulando ...
Friday, April 16, 2010
Rails não Escala
Friday, April 16, 2010
Rails não Escala(TM)
Friday, April 16, 2010
Friday, April 16, 2010
Friday, April 16, 2010
Blaine Cook
http://www.akitaonrails.com/2008/6/17/chatting-with-blaine-cook-twitter
Friday, April 16, 2010
Para colocar as coisas em perspectiva, o Friendster foi
escrito em Java e eles mudaram para PHP. MySpace foi escrito
em ColdFusion e eles mudaram para ASP.NET.
Blaine Cook
http://www.akitaonrails.com/2008/6/17/chatting-with-blaine-cook-twitter
Friday, April 16, 2010
Para colocar as coisas em perspectiva, o Friendster foi
escrito em Java e eles mudaram para PHP. MySpace foi escrito
em ColdFusion e eles mudaram para ASP.NET.
Blaine Cook
http://www.akitaonrails.com/2008/6/17/chatting-with-blaine-cook-twitter
Quando as pessoas caem em problemas de escalabilidade, normalmente acham que a
linguagem é o problema, mas eu acho que isso raramente é a
realidade.
Friday, April 16, 2010
http://www.computerworld.com.au/article/268003/ruby_rails_rolls_into_enterprise?fp=16&fpid=1
“O The New York Times usou Ruby on Rails para agregar, analizar e mostrar os resultados das
eleições em quase tempo real em um de seus sites mais acessados de todos os tempos.”
Friday, April 16, 2010
http://www.computerworld.com.au/article/268003/ruby_rails_rolls_into_enterprise?fp=16&fpid=1
“O The New York Times usou Ruby on Rails para agregar, analizar e mostrar os resultados das
eleições em quase tempo real em um de seus sites mais acessados de todos os tempos.”
Friday, April 16, 2010
Web Server
MySQL
Browser
Friday, April 16, 2010
Web Server
MySQL
Browser
Varnish/HAProxy
Friday, April 16, 2010
Web Server
MySQL
Browser
Varnish/HAProxy
Memcached
Friday, April 16, 2010
Web Server
MySQL
Browser
Varnish/HAProxy
Memcached
CouchDB/MongoDB
Friday, April 16, 2010
Ruby é Lento
Friday, April 16, 2010
Ruby é Lento(TM)
Friday, April 16, 2010
Existem mentiras, mentiras malditas e
estatísticas.
Friday, April 16, 2010
Existem mentiras, mentiras malditas e
estatísticas.
Friday, April 16, 2010
Existem mentiras, mentiras malditas e
estatísticas.
Friday, April 16, 2010
Friday, April 16, 2010
x mais lento que C++
Friday, April 16, 2010
0 32.5 65 97.5 130
Python 2
Ruby 1.9
JRuby
Perl
Python 3
PHP
Ruby 1.8
x mais lento que C++
Friday, April 16, 2010
Homepage: 331 ms
Friday, April 16, 2010
Homepage: 331 ms
Total: 5.45 s
Friday, April 16, 2010
Performance!=
Escalabilidade
Friday, April 16, 2010
Exemplo
Friday, April 16, 2010
Friday, April 16, 2010
Friday, April 16, 2010
Friday, April 16, 2010
Friday, April 16, 2010
Friday, April 16, 2010
Friday, April 16, 2010
Friday, April 16, 2010
Friday, April 16, 2010
Friday, April 16, 2010
6Técnicas
Friday, April 16, 2010
Menos Requisições
Friday, April 16, 2010
Mini!que CSS e Javascript
Friday, April 16, 2010
Juicerhttp://github.com/cjohansen/juicer/
Friday, April 16, 2010
gem install juicer
script/plugin install git://github.com/ktheory/juicer-rails.git
Friday, April 16, 2010
gem install juicer
script/plugin install git://github.com/ktheory/juicer-rails.git
Friday, April 16, 2010
juicer install yuicompressor
juicer install jslint
juicer install closure_compiler
Friday, April 16, 2010
juicer install yuicompressor
juicer install jslint
juicer install closure_compiler
Friday, April 16, 2010
juicer install yuicompressor
juicer install jslint
juicer install closure_compiler
Friday, April 16, 2010
<%= juiced_tag '/stylesheets/application.css' %> <%= yield(:head) %>
</head><body>
... <%= juiced_tag '/javascripts/application.js' %>
</body>
/app/views/layouts/application.html.erb
Friday, April 16, 2010
<%= juiced_tag '/stylesheets/application.css' %> <%= yield(:head) %>
</head><body>
... <%= juiced_tag '/javascripts/application.js' %>
</body>
/app/views/layouts/application.html.erb
Friday, April 16, 2010
@import url("reset.css");@import url("base.css");@import url("fonts.css");
...
/* @depends jquery-1.4.min.js @depends jquery.edit_in_place.js @depends jqueryamail.js*/
...
/public/stylesheets/application.css
/public/javascripts/application.js
Friday, April 16, 2010
@import url("reset.css");@import url("base.css");@import url("fonts.css");
...
/* @depends jquery-1.4.min.js @depends jquery.edit_in_place.js @depends jqueryamail.js*/
...
/public/stylesheets/application.css
/public/javascripts/application.js
Friday, April 16, 2010
juicer merge public/stylesheets/application.css
public/stylesheets/application.min.css
juicer merge -i public/javascripts/application.js
public/javascripts/application.min.js
Friday, April 16, 2010
juicer merge public/stylesheets/application.css
public/stylesheets/application.min.css
juicer merge -i public/javascripts/application.js
public/javascripts/application.min.js
Friday, April 16, 2010
juicer merge public/stylesheets/application.css
public/stylesheets/application.min.css
juicer merge -i public/javascripts/application.js
public/javascripts/application.min.js
Friday, April 16, 2010
juicer merge public/stylesheets/application.css
public/stylesheets/application.min.css
juicer merge -i public/javascripts/application.js
public/javascripts/application.min.js
Friday, April 16, 2010
DEVELOPMENT
Friday, April 16, 2010
PRODUCTION
Friday, April 16, 2010
Asset HostsNavegadores abrem poucas conexões
simultâneas por domínio
Friday, April 16, 2010
Friday, April 16, 2010
def gallery gallery_path = File.join(Rails.root, "public/images/gallery/")
@images = Dir.glob(gallery_path + "*").map{ |f| f.gsub(gallery_path, "") }
end
/app/controllers/hello_controller.rb
Friday, April 16, 2010
def gallery gallery_path = File.join(Rails.root, "public/images/gallery/")
@images = Dir.glob(gallery_path + "*").map{ |f| f.gsub(gallery_path, "") }
end
/app/controllers/hello_controller.rb
/app/views/hello/gallery.html.erb
<% title "Gallery" %>
<% @images.each do |image| -%> <%= image_tag "gallery/#{image}" %>
<% end -%>
Friday, April 16, 2010
def gallery gallery_path = File.join(Rails.root, "public/images/gallery/")
@images = Dir.glob(gallery_path + "*").map{ |f| f.gsub(gallery_path, "") }
end
/app/controllers/hello_controller.rb
/app/views/hello/gallery.html.erb
<% title "Gallery" %>
<% @images.each do |image| -%> <%= image_tag "gallery/#{image}" %>
<% end -%>
Friday, April 16, 2010
DEVELOPMENT
Friday, April 16, 2010
DEVELOPMENT
Friday, April 16, 2010
/con!g/environments/production.rb
config.action_controller.asset_host = Proc.new do |source, request| protocol = if request.ssl?
request.headers["USER_AGENT"] =~ /(Safari)/ ? "http" : "https" else
"http" end
"#{protocol}://asset#{rand(6) + 1}.akitaonrails.local:3000"end
Friday, April 16, 2010
/con!g/environments/production.rb
config.action_controller.asset_host = Proc.new do |source, request| protocol = if request.ssl?
request.headers["USER_AGENT"] =~ /(Safari)/ ? "http" : "https" else
"http" end
"#{protocol}://asset#{rand(6) + 1}.akitaonrails.local:3000"end
Friday, April 16, 2010
### Host Database## localhost is used to configure the loopback interface# when the system is booting. Do not change this entry.##127.0.0.1 localhost255.255.255.255 broadcasthost::1 localhost fe80::1%lo0 localhost127.0.0.1 asset1.akitaonrails.local asset2.akitaonrails.local asset3.akitaonrails.local asset4.akitaonrails.local asset5.akitaonrails.local asset6.akitaonrails.local www.akitaonrails.local
/etc/hosts
Friday, April 16, 2010
PRODUCTION
Friday, April 16, 2010
PRODUCTION
Friday, April 16, 2010
Javascript embaixo!
Friday, April 16, 2010
<head> <title><%= h(yield(:title) || "Untitled") %></title> <%= stylesheet_link_tag 'application' %> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/chrome-frame/1.0.2/CFInstall.min.js" type="text/javascript"></script> <%= yield(:head) %></head><body>...
/app/views/layouts/application.html.erb
Friday, April 16, 2010
<head> <title><%= h(yield(:title) || "Untitled") %></title> <%= stylesheet_link_tag 'application' %> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/chrome-frame/1.0.2/CFInstall.min.js" type="text/javascript"></script> <%= yield(:head) %></head><body>...
/app/views/layouts/application.html.erb
Friday, April 16, 2010
... <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/chrome-frame/1.0.2/CFInstall.min.js" type="text/javascript"></script> <script type="text/javascript"> // meu javascript customizado ... </script> </body></html>
/app/views/layouts/application.html.erb
Friday, April 16, 2010
... <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/chrome-frame/1.0.2/CFInstall.min.js" type="text/javascript"></script> <script type="text/javascript"> // meu javascript customizado ... </script> </body></html>
/app/views/layouts/application.html.erb
Friday, April 16, 2010
Gzip
Friday, April 16, 2010
a2enmod de"ate
editar/etc/apache2/mods-available/de"ate.conf
Friday, April 16, 2010
a2enmod de"ate
editar/etc/apache2/mods-available/de"ate.conf
Friday, April 16, 2010
<IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE image/svg+xml AddOutputFilterByType DEFLATE image/x-icon AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x-httpd-php AddOutputFilterByType DEFLATE application/x-httpd-fastphp AddOutputFilterByType DEFLATE application/x-httpd-eruby
DeflateCompressionLevel 9
# Netscape 4.X has some problems BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine BrowserMatch \bMSIE !no-gzip !gzip-only-text/html</IfModule>
/etc/apache2/mods-available/de"ate.conf
Friday, April 16, 2010
Cabeçalhos de Expiração
Friday, April 16, 2010
a2enmod expires
editar/etc/apache2/mods-available/expires.conf
Friday, April 16, 2010
a2enmod expires
editar/etc/apache2/mods-available/expires.conf
Friday, April 16, 2010
<IfModule mod_expires.c> ExpiresByType image/x-icon "access plus 1 year" ExpiresByType image/png "access plus 1 year" ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/gif "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType application/pdf "access plus 1 year" ExpiresByType audio/x-wav "access plus 1 year" ExpiresByType audio/mpeg "access plus 1 year" ExpiresByType video/mpeg "access plus 1 year" ExpiresByType video/mp4 "access plus 1 year" ExpiresByType video/quicktime "access plus 1 year" ExpiresByType video/x-ms-wmv "access plus 1 year" ExpiresByType application/x-shockwave-flash "access 1 month" ExpiresByType text/css "access plus 1 year" ExpiresByType text/javascript "access plus 1 year"</IfModule>
/etc/apache2/mods-available/expires.conf
Friday, April 16, 2010
Cache Busters
Friday, April 16, 2010
<%= stylesheet_link_tag 'application' %>
<%= javascript_include_tag 'application' %>
<%= image_tag "logo.png" %>
/app/views/layouts/application.html.erb
Friday, April 16, 2010
<link href="/stylesheets/application.css?1264345891" media="screen" rel="stylesheet" type="text/css" />
<script src="/javascripts/application.js?1264345058"
type="text/javascript"></script>
<img alt="Logo" src="/images/logo.png?1268943058" />
/app/views/layouts/application.html.erb
Friday, April 16, 2010
<link href="/stylesheets/application.css?1264345891" media="screen" rel="stylesheet" type="text/css" />
<script src="/javascripts/application.js?1264345058"
type="text/javascript"></script>
<img alt="Logo" src="/images/logo.png?1268943058" />
/app/views/layouts/application.html.erb
Friday, April 16, 2010
Use CDNs
Friday, April 16, 2010
<script src="/javascripts/jquery-1.4.min.js" type="text/javascript"></script><script src="/javascripts/jquery-ui-1.7.2.min.js" type="text/javascript"></script><script src="/javascripts/swfobject-2.2.js" type="text/javascript"></script><script src="/javascripts/CFInstall-1.0.2.min.js" type="text/javascript"></script>
/app/views/layouts/application.html.erb
Friday, April 16, 2010
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js" type="text/javascript"></script><script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js" type="text/javascript"></script><script src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js" type="text/javascript"></script><script src="http://ajax.googleapis.com/ajax/libs/chrome-frame/1.0.2/CFInstall.min.js" type="text/javascript"></script>
/app/views/layouts/application.html.erb
Friday, April 16, 2010
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js" type="text/javascript"></script><script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js" type="text/javascript"></script><script src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js" type="text/javascript"></script><script src="http://ajax.googleapis.com/ajax/libs/chrome-frame/1.0.2/CFInstall.min.js" type="text/javascript"></script>
/app/views/layouts/application.html.erb
Friday, April 16, 2010
Search
Friday, April 16, 2010
select * from ... where ... like “%...%”
Friday, April 16, 2010
select * from ... where ... like “%...%”
or ... like “%...%”or ... like “%...%”or ... like “%...%”or ... like “%...%”
Friday, April 16, 2010
select * from ... where ... like “%...%”
or ... like “%...%”or ... like “%...%”or ... like “%...%”or ... like “%...%”
Friday, April 16, 2010
Friday, April 16, 2010
Open Source Enterprise Search Platform
Baseado no famoso Lucene
Full Text Search, com relevância
Indexa documentos (Word, PDF, etc)
Interface REST
Roda em containers de Servlet (Tomcat)
Friday, April 16, 2010
Open Source Enterprise Search Platform
Baseado no famoso Lucene
Full Text Search, com relevância
Indexa documentos (Word, PDF, etc)
Interface REST
Roda em containers de Servlet (Tomcat)
Friday, April 16, 2010
Open Source Enterprise Search Platform
Baseado no famoso Lucene
Full Text Search, com relevância
Indexa documentos (Word, PDF, etc)
Interface REST
Roda em containers de Servlet (Tomcat)
Friday, April 16, 2010
Open Source Enterprise Search Platform
Baseado no famoso Lucene
Full Text Search, com relevância
Indexa documentos (Word, PDF, etc)
Interface REST
Roda em containers de Servlet (Tomcat)
Friday, April 16, 2010
Open Source Enterprise Search Platform
Baseado no famoso Lucene
Full Text Search, com relevância
Indexa documentos (Word, PDF, etc)
Interface REST
Roda em containers de Servlet (Tomcat)
Friday, April 16, 2010
Open Source Enterprise Search Platform
Baseado no famoso Lucene
Full Text Search, com relevância
Indexa documentos (Word, PDF, etc)
Interface REST
Roda em containers de Servlet (Tomcat)
Friday, April 16, 2010
Friday, April 16, 2010
Friday, April 16, 2010
select * from ... where ... like “%...%”
or ... like “%...%”or ... like “%...%”or ... like “%...%”or ... like “%...%”
Friday, April 16, 2010
select * from ... where ... like “%...%”
or ... like “%...%”or ... like “%...%”or ... like “%...%”or ... like “%...%”
Friday, April 16, 2010
Tarefas Assíncronas
Friday, April 16, 2010
Friday, April 16, 2010
Requisição
Friday, April 16, 2010
ProcessamentoRequisição
Friday, April 16, 2010
Resposta
ProcessamentoRequisição
Friday, April 16, 2010
Crontab
Friday, April 16, 2010
Friday, April 16, 2010
RMagick
Friday, April 16, 2010
Friday, April 16, 2010
Friday, April 16, 2010
RedisWorkers
Resque-Web
Friday, April 16, 2010
Friday, April 16, 2010
Friday, April 16, 2010
ProcessamentoRequisição
291 s
Friday, April 16, 2010
Resposta
Processamento
Requisição
32 s
Worker
Friday, April 16, 2010
Friday, April 16, 2010
Imagens
Relatórios
Web Services
Transações
Friday, April 16, 2010
Imagens
Relatórios
Web Services
Transações
Friday, April 16, 2010
Imagens
Relatórios
Web Services
Transações
Friday, April 16, 2010
Imagens
Relatórios
Web Services
Transações
Friday, April 16, 2010
Aprendendo Mais
Friday, April 16, 2010
RAILS LABS
Friday, April 16, 2010
RAILSCASTS.com
Friday, April 16, 2010
caelum.com.br
Friday, April 16, 2010
egenial.com.br
Friday, April 16, 2010
Friday, April 16, 2010
Entenda os browsers
Entenda HTTP
Arquiteturas
Mundo Assíncrono
Mundo não Relacional
Friday, April 16, 2010
Entenda os browsers
Entenda HTTP
Arquiteturas
Mundo Assíncrono
Mundo não Relacional
Friday, April 16, 2010
Entenda os browsers
Entenda HTTP
Arquiteturas
Mundo Assíncrono
Mundo não Relacional
Friday, April 16, 2010
Entenda os browsers
Entenda HTTP
Arquiteturas
Mundo Assíncrono
Mundo não Relacional
Friday, April 16, 2010
Entenda os browsers
Entenda HTTP
Arquiteturas
Mundo Assíncrono
Mundo não Relacional
Friday, April 16, 2010
Friday, April 16, 2010
Thx!www.slideshare.net/akitaonrails
http://dl.dropbox.com/u/1732133/dicas-de-desenvolvimento-web-com-rails.zip
Friday, April 16, 2010