SlideShare a Scribd company logo
Building Efficient Visualforce Pages
Steve Bobrowski, salesforce.com, @sbob909
Markus Spohn, salesforce.com, @markus_spohn
Joseph Ferraro, Mavens Consulting, @joeferraro
Safe harbor
Safe harbor statement under the Private Securities Litigation Reform Act of 1995:
This presentation may contain forward-looking statements that involve risks, uncertainties, and assumptions. If any such uncertainties
materialize or if any of the assumptions proves incorrect, the results of salesforce.com, inc. could differ materially from the results
expressed or implied by the forward-looking statements we make. All statements other than statements of historical fact could be
deemed forward-looking, including any projections of product or service availability, subscriber growth, earnings, revenues, or other
financial items and any statements regarding strategies or plans of management for future operations, statements of belief, any
statements concerning new, planned, or upgraded services or technology developments and customer contracts or use of our services.
The risks and uncertainties referred to above include – but are not limited to – risks associated with developing and delivering new
functionality for our service, new products and services, our new business model, our past operating losses, possible fluctuations in our
operating results and rate of growth, interruptions or delays in our Web hosting, breach of our security measures, the outcome of any
litigation, risks associated with completed and any possible mergers and acquisitions, the immature market in which we operate, our
relatively limited operating history, our ability to expand, retain, and motivate our employees and manage our growth, new releases of our
service and successful customer deployment, our limited history reselling non-salesforce.com products, and utilization and selling to
larger enterprise customers. Further information on potential factors that could affect the financial results of salesforce.com, inc. is
included in our annual report on Form 10-K for the most recent fiscal year and in our quarterly report on Form 10-Q for the most recent
fiscal quarter. These documents and others containing important disclosures are available on the SEC Filings section of the Investor
Information section of our Web site.
Any unreleased services or features referenced in this or other presentations, press releases or public statements are not currently
available and may not be delivered on time or at all. Customers who purchase our services should make the purchase decisions
based upon features that are currently available. Salesforce.com, inc. assumes no obligation and does not intend to update these
forward-looking statements.
Your company uses
Salesforce/Force.com …
You are a developer or architect
maintaining your org …
Many Visualforce pages
are slow & hurting user
productivity …
You need to find and rework slow
Visualforce pages.
Common problems & practical
solutions for finding & fixing
slow Visualforce pages
Today’s Agenda
Steve Bobrowski
Architect Evangelist
@sbob909
Markus Spohn
Architect Evangelist
@markus_spohn
What makes for an efficient Visualforce page?
Two keys to building efficient Visualforce pages …
Memory usage Database access
Visualforce page
Happy, productive users …
Use tools to find and fix inefficient source code …
Related DevZone hands-on, mini-workshop
Designing memory-efficient
Visualforce pages
Visualforce page view state
How can you ______ it?
Understand Visualforce page
view state
Visualforce page view state comes from … forms
<apex:page showHeader="true" controller="invoiceController" tabstyle="Invoice__c" sidebar="false">
<apex:form >
<apex:pageBlock >
<h1>Open Invoices</h1>
<apex:pageBlockTable id="invoiceList" value="{!invoices}" var="i">
<apex:column headerValue="Name">
<apex:outputLink value="/{!i.Id}">{!i.Name}</apex:outputLink>
</apex:column>
<apex:column value="{!i.Status__c}"/>
</apex:pageBlockTable>
</apex:pageBlock>
<apex:actionPoller action="{!pollAction}" reRender="invoiceList" interval="15"/>
</apex:form>
</apex:page>
<apex:form>
Visualforce page view state supports postbacks
Browser
page with
form
Server
post
postback
Error
Submit
Visualforce page view state is encrypted …
Less view state is better for response time …
Recap: View state …
Examine Visualforce page
view state
Force.com Development Mode … configuration
Advanced user details …
Force.com development mode … view state
Live demo page
Avoid unnecessary
Visualforce page
view state
Minimize data … examine data page uses
<apex:page showHeader="true" controller="invoiceController" tabstyle="Invoice__c" sidebar="false">
<apex:form >
<apex:pageBlock >
<h1>Open Invoices</h1>
<apex:pageBlockTable id="invoiceList" value="{!invoices}" var="i">
<apex:column headerValue="Name">
<apex:outputLink value="/{!i.Id}">{!i.Name}</apex:outputLink>
</apex:column>
<apex:column value="{!i.Status__c}"/>
</apex:pageBlockTable>
</apex:pageBlock>
<apex:actionPoller action="{!pollAction}" reRender="invoiceList" interval="15"/>
</apex:form>
</apex:page>
Minimize data … examine data controller gets
public class invoiceController {
Invoice__c[] invoices;
String query = 'SELECT Id, Name, Status__c, Invoice_Total__c, CreatedDate,
LastModifiedDate, LastModifiedById, OwnerId FROM Invoice__c ORDER BY Status__c ASC’
LIMIT 1000;
public Invoice__c[] getInvoices() {
invoices = Database.query(query);
return invoices;
}
public PageReference pollAction() {
invoices = Database.query(query);
return null;
}
}
Minimize data … match page and controller data
public class invoiceController {
Invoice__c[] invoices;
String query = 'SELECT Id, Name, Status__c FROM Invoice__c ORDER BY Status__c ASC LIMIT 1000';
public Invoice__c[] getInvoices() {
invoices = Database.query(query);
return invoices;
}
public PageReference pollAction() {
invoices = Database.query(query);
return null;
}
}
Minimize data … only get the rows that page needs
public class invoiceController {
Invoice__c[] invoices;
String query = 'SELECT Id, Name, Status__c FROM Invoice__c
WHERE Status__c != 'Closed'
LIMIT 1000';
public Invoice__c[] getInvoices() {
invoices = Database.query(query);
return invoices;
}
public PageReference pollAction() {
invoices = Database.query(query);
return null;
}
}
Live demo page
Recap: Minimize view state by minimizing data
Use transient controller variables for read-only data
public class invoiceController {
Invoice__c[] invoices;
String query = 'SELECT Id, Name, Status__c FROM Invoice__c
WHERE Status__c != 'Closed'
LIMIT 1000';
public Invoice__c[] getInvoices() {
invoices = Database.query(query);
return invoices;
}
public PageReference pollAction() {
invoices = Database.query(query);
return null;
}
}
Use transient controller variables for read-only data
public class invoiceController {
Transient Invoice__c[] invoices;
String query = 'SELECT Id, Name, Status__c FROM Invoice__c
WHERE Status__c != 'Closed'
LIMIT 1000';
public Invoice__c[] getInvoices() {
invoices = Database.query(query);
return invoices;
}
public PageReference pollAction() {
invoices = Database.query(query);
return null;
}
}
Live demo page
Recap: Eliminate read-only data from the view state
Avoid Visualforce page
view state altogether
Refresh data without actionPoller (and view state)
Traditional polling alternatives to actionPoller:
Long polling/streaming updates:
Building database-efficient
Visualforce pages
Database-efficient Visualforce controllers
Key characteristics: ______
 SOQL
 logic
Execute efficient SOQL
Minimize record width
public class invoiceController {
Transient Invoice__c[] invoices;
String query = 'SELECT Id, Name, Status__c, Invoice_Total__c, CreatedDate,
LastModifiedDate, LastModifiedById, OwnerId FROM Invoice__c ORDER BY Status__c ASC
LIMIT 1000';
public Invoice__c[] getInvoices() {
invoices = Database.query(query);
return invoices;
}
public PageReference pollAction() {
invoices = Database.query(query);
return null;
}
}
Minimize record count
public class invoiceController {
Transient Invoice__c[] invoices;
String query = 'SELECT Id, Name, Status__c FROM Invoice__c
WHERE Status__c != 'Closed'
LIMIT 1000';
public Invoice__c[] getInvoices() {
invoices = Database.query(query);
return invoices;
}
public PageReference pollAction() {
invoices = Database.query(query);
return null;
}
}
Force.com Query & Search Optimization Cheat Sheet
http://developer.force.com/architect
Fetch target rows with optimizable filter conditions
public class invoiceController {
Transient Invoice__c[] invoices;
String query = 'SELECT Id, Name, Status__c FROM Invoice__c
WHERE Status__c = ’Open'
LIMIT 1000';
public Invoice__c[] getInvoices() {
invoices = Database.query(query);
return invoices;
}
public PageReference pollAction() {
invoices = Database.query(query);
return null;
}
}
Leverage field indexes in filter conditions
public class invoiceController {
Transient Invoice__c[] invoices;
String query = 'SELECT Id, Name, Status__c FROM Invoice__c
WHERE Status__c = ’Open'
LIMIT 1000';
public Invoice__c[] getInvoices() {
invoices = Database.query(query);
return invoices;
}
public PageReference pollAction() {
invoices = Database.query(query);
return null;
}
}
Live demo page
Leverage the Salesforce sharing architecture
public with sharing class invoiceController {
Transient Invoice__c[] invoices;
String query = 'SELECT Id, Name, Status__c FROM Invoice__c
WHERE Status__c = ’Open'
LIMIT 1000';
public Invoice__c[] getInvoices() {
invoices = Database.query(query);
return invoices;
}
public PageReference pollAction() {
invoices = Database.query(query);
return null;
}
}
Recap: Execute efficient SOQL queries
(And don’t forget to use the sharing architecture)
Design efficient controller logic
Use standard set controllers, when possible
Use whenever possible: don't reinvent things
Place DML and SOQL outside of loops
Use bulk processing best practices
Make efficient design choices
openInvoices page, revisited
Refreshes … every 15 seconds
Avoid traditional polling
pull (polling)
Invoice
Use long polling with the Force.com Streaming API
pull (polling)
Invoice
Update
Live demo page
Recap: Use efficient overall page designs
Using tools to find and fix
common problems …
FAST!
Be aware of available tools
Force.com browser-based tools
Force.com IDE (Eclipse)
Third-party Force.com application development tools
MavensMate
All about Joe Ferraro and Mavens Consulting
Mavens Consulting is the Life Science industry’s premier
salesforce.com implementation partner focused exclusively
on delivering optimized Force.com solutions.
 Certified Force.com and Veeva Experts
 Unparalleled Global Knowledge in Life Sciences
 Specialists in Service Cloud Implementations for MedInfo Contact
Centers and Multi-Channel Portals for Physicians and Reps
MavensMate
MavensMate
Leverage the power
of your tools
MavensMate Project Health Check
Live demo page
Recap: Find and fix common problems proactively
Session summary
Building Efficient Visualforce Pages
Related DevZone hands-on, mini-workshop
Steve Bobrowski
Salesforce.com
@sbob909
Markus Spohn
Salesforce.com
@markus_spohn
Joseph Ferraro
Mavens Consulting
@joeferraro
Building Efficient Visualforce Pages
Slide parts
Slide parts
Ad

More Related Content

What's hot (20)

Winter 21 Developer Highlights for Salesforce
Winter 21 Developer Highlights for SalesforceWinter 21 Developer Highlights for Salesforce
Winter 21 Developer Highlights for Salesforce
Peter Chittum
 
Modeling and Querying Data and Relationships in Salesforce
Modeling and Querying Data and Relationships in SalesforceModeling and Querying Data and Relationships in Salesforce
Modeling and Querying Data and Relationships in Salesforce
Salesforce Developers
 
All Aboard the Lightning Components Action Service
All Aboard the Lightning Components Action ServiceAll Aboard the Lightning Components Action Service
All Aboard the Lightning Components Action Service
Peter Chittum
 
Apex Enterprise Patterns: Building Strong Foundations
Apex Enterprise Patterns: Building Strong FoundationsApex Enterprise Patterns: Building Strong Foundations
Apex Enterprise Patterns: Building Strong Foundations
Salesforce Developers
 
Webinar: Build Apps Customers Love as a Salesforce Developer
Webinar: Build Apps Customers Love as a Salesforce DeveloperWebinar: Build Apps Customers Love as a Salesforce Developer
Webinar: Build Apps Customers Love as a Salesforce Developer
Salesforce Developers
 
Mbf2 salesforce webinar 2
Mbf2 salesforce webinar 2Mbf2 salesforce webinar 2
Mbf2 salesforce webinar 2
BeMyApp
 
Performance Tuning for Visualforce and Apex
Performance Tuning for Visualforce and ApexPerformance Tuning for Visualforce and Apex
Performance Tuning for Visualforce and Apex
Salesforce Developers
 
Winter '22 highlights
Winter '22 highlightsWinter '22 highlights
Winter '22 highlights
AtaullahKhan31
 
If you can write a Salesforce Formula you can use the command line
If you can write a Salesforce Formula you can use the command lineIf you can write a Salesforce Formula you can use the command line
If you can write a Salesforce Formula you can use the command line
Peter Chittum
 
Building BOTS on App Cloud
Building BOTS on App CloudBuilding BOTS on App Cloud
Building BOTS on App Cloud
Salesforce Developers
 
Live coding with LWC
Live coding with LWCLive coding with LWC
Live coding with LWC
Salesforce Developers
 
Lightning Connect Custom Adapters: Connecting Anything with Salesforce
Lightning Connect Custom Adapters: Connecting Anything with SalesforceLightning Connect Custom Adapters: Connecting Anything with Salesforce
Lightning Connect Custom Adapters: Connecting Anything with Salesforce
Salesforce Developers
 
CodeLive: Build Lightning Web Components faster with Local Development
CodeLive: Build Lightning Web Components faster with Local DevelopmentCodeLive: Build Lightning Web Components faster with Local Development
CodeLive: Build Lightning Web Components faster with Local Development
Salesforce Developers
 
Salesforce and sap integration
Salesforce and sap integrationSalesforce and sap integration
Salesforce and sap integration
Karanraj Sankaranarayanan
 
Build custom user interfaces for your Salesforce data with the UI API
 Build custom user interfaces for your Salesforce data with the UI API Build custom user interfaces for your Salesforce data with the UI API
Build custom user interfaces for your Salesforce data with the UI API
Salesforce Developers
 
#Df17 Recap Series Build Apps Faster with the Salesforce Platform
#Df17 Recap Series Build Apps Faster with the Salesforce Platform #Df17 Recap Series Build Apps Faster with the Salesforce Platform
#Df17 Recap Series Build Apps Faster with the Salesforce Platform
Salesforce Developers
 
Build and Package Lightning Components for Lightning Exchange
Build and Package Lightning Components for Lightning ExchangeBuild and Package Lightning Components for Lightning Exchange
Build and Package Lightning Components for Lightning Exchange
Salesforce Developers
 
Build Better Communities with Lightning
Build Better Communities with LightningBuild Better Communities with Lightning
Build Better Communities with Lightning
Salesforce Developers
 
Oracle APPS R12 Functional Online Training by Real Time Experts in USA | BI A...
Oracle APPS R12 Functional Online Training by Real Time Experts in USA | BI A...Oracle APPS R12 Functional Online Training by Real Time Experts in USA | BI A...
Oracle APPS R12 Functional Online Training by Real Time Experts in USA | BI A...
Bianalyticsolutions.com
 
Durable Streaming and Enterprise Messaging
Durable Streaming and Enterprise MessagingDurable Streaming and Enterprise Messaging
Durable Streaming and Enterprise Messaging
Salesforce Developers
 
Winter 21 Developer Highlights for Salesforce
Winter 21 Developer Highlights for SalesforceWinter 21 Developer Highlights for Salesforce
Winter 21 Developer Highlights for Salesforce
Peter Chittum
 
Modeling and Querying Data and Relationships in Salesforce
Modeling and Querying Data and Relationships in SalesforceModeling and Querying Data and Relationships in Salesforce
Modeling and Querying Data and Relationships in Salesforce
Salesforce Developers
 
All Aboard the Lightning Components Action Service
All Aboard the Lightning Components Action ServiceAll Aboard the Lightning Components Action Service
All Aboard the Lightning Components Action Service
Peter Chittum
 
Apex Enterprise Patterns: Building Strong Foundations
Apex Enterprise Patterns: Building Strong FoundationsApex Enterprise Patterns: Building Strong Foundations
Apex Enterprise Patterns: Building Strong Foundations
Salesforce Developers
 
Webinar: Build Apps Customers Love as a Salesforce Developer
Webinar: Build Apps Customers Love as a Salesforce DeveloperWebinar: Build Apps Customers Love as a Salesforce Developer
Webinar: Build Apps Customers Love as a Salesforce Developer
Salesforce Developers
 
Mbf2 salesforce webinar 2
Mbf2 salesforce webinar 2Mbf2 salesforce webinar 2
Mbf2 salesforce webinar 2
BeMyApp
 
Performance Tuning for Visualforce and Apex
Performance Tuning for Visualforce and ApexPerformance Tuning for Visualforce and Apex
Performance Tuning for Visualforce and Apex
Salesforce Developers
 
If you can write a Salesforce Formula you can use the command line
If you can write a Salesforce Formula you can use the command lineIf you can write a Salesforce Formula you can use the command line
If you can write a Salesforce Formula you can use the command line
Peter Chittum
 
Lightning Connect Custom Adapters: Connecting Anything with Salesforce
Lightning Connect Custom Adapters: Connecting Anything with SalesforceLightning Connect Custom Adapters: Connecting Anything with Salesforce
Lightning Connect Custom Adapters: Connecting Anything with Salesforce
Salesforce Developers
 
CodeLive: Build Lightning Web Components faster with Local Development
CodeLive: Build Lightning Web Components faster with Local DevelopmentCodeLive: Build Lightning Web Components faster with Local Development
CodeLive: Build Lightning Web Components faster with Local Development
Salesforce Developers
 
Build custom user interfaces for your Salesforce data with the UI API
 Build custom user interfaces for your Salesforce data with the UI API Build custom user interfaces for your Salesforce data with the UI API
Build custom user interfaces for your Salesforce data with the UI API
Salesforce Developers
 
#Df17 Recap Series Build Apps Faster with the Salesforce Platform
#Df17 Recap Series Build Apps Faster with the Salesforce Platform #Df17 Recap Series Build Apps Faster with the Salesforce Platform
#Df17 Recap Series Build Apps Faster with the Salesforce Platform
Salesforce Developers
 
Build and Package Lightning Components for Lightning Exchange
Build and Package Lightning Components for Lightning ExchangeBuild and Package Lightning Components for Lightning Exchange
Build and Package Lightning Components for Lightning Exchange
Salesforce Developers
 
Build Better Communities with Lightning
Build Better Communities with LightningBuild Better Communities with Lightning
Build Better Communities with Lightning
Salesforce Developers
 
Oracle APPS R12 Functional Online Training by Real Time Experts in USA | BI A...
Oracle APPS R12 Functional Online Training by Real Time Experts in USA | BI A...Oracle APPS R12 Functional Online Training by Real Time Experts in USA | BI A...
Oracle APPS R12 Functional Online Training by Real Time Experts in USA | BI A...
Bianalyticsolutions.com
 
Durable Streaming and Enterprise Messaging
Durable Streaming and Enterprise MessagingDurable Streaming and Enterprise Messaging
Durable Streaming and Enterprise Messaging
Salesforce Developers
 

Viewers also liked (7)

William shakespeare
William shakespeareWilliam shakespeare
William shakespeare
EmilyLynn99
 
28804315 initial-public-offering-ipo
28804315 initial-public-offering-ipo28804315 initial-public-offering-ipo
28804315 initial-public-offering-ipo
Neetika Bansal
 
Baki Onur Okutucu - Office365 - Service Management
Baki Onur Okutucu - Office365 - Service ManagementBaki Onur Okutucu - Office365 - Service Management
Baki Onur Okutucu - Office365 - Service Management
Baki Okutucu
 
Declaracion de colombo
Declaracion de colomboDeclaracion de colombo
Declaracion de colombo
Giss Chris
 
Agenda wcy
Agenda wcyAgenda wcy
Agenda wcy
Giss Chris
 
William shakespeare
William shakespeareWilliam shakespeare
William shakespeare
EmilyLynn99
 
28804315 initial-public-offering-ipo
28804315 initial-public-offering-ipo28804315 initial-public-offering-ipo
28804315 initial-public-offering-ipo
Neetika Bansal
 
Baki Onur Okutucu - Office365 - Service Management
Baki Onur Okutucu - Office365 - Service ManagementBaki Onur Okutucu - Office365 - Service Management
Baki Onur Okutucu - Office365 - Service Management
Baki Okutucu
 
Declaracion de colombo
Declaracion de colomboDeclaracion de colombo
Declaracion de colombo
Giss Chris
 
Ad

Similar to Building Efficient Visualforce Pages (20)

His master's voice, take command of Einstein Analytics
His master's voice, take command of Einstein AnalyticsHis master's voice, take command of Einstein Analytics
His master's voice, take command of Einstein Analytics
rikkehovgaard
 
Build Amazing Website without coding using Salesforce SiteForce
Build Amazing Website without coding using Salesforce SiteForceBuild Amazing Website without coding using Salesforce SiteForce
Build Amazing Website without coding using Salesforce SiteForce
vraopolisetti
 
Force.com Friday: Intro to Force.com
Force.com Friday: Intro to Force.comForce.com Friday: Intro to Force.com
Force.com Friday: Intro to Force.com
Salesforce Developers
 
S1 and Visualforce Publisher Actions
S1 and Visualforce Publisher ActionsS1 and Visualforce Publisher Actions
S1 and Visualforce Publisher Actions
Peter Chittum
 
Intro to Apex Programmers
Intro to Apex ProgrammersIntro to Apex Programmers
Intro to Apex Programmers
Salesforce Developers
 
Lightning Data Service: Eliminate Your Need to Load Records Through Controllers
Lightning Data Service: Eliminate Your Need to Load Records Through ControllersLightning Data Service: Eliminate Your Need to Load Records Through Controllers
Lightning Data Service: Eliminate Your Need to Load Records Through Controllers
Salesforce Developers
 
Build System Performance Data Analytics Using Wave
Build System Performance Data Analytics Using WaveBuild System Performance Data Analytics Using Wave
Build System Performance Data Analytics Using Wave
Salesforce Developers
 
Cutting Edge Mobile Development in the App Cloud
Cutting Edge Mobile Development in the App CloudCutting Edge Mobile Development in the App Cloud
Cutting Edge Mobile Development in the App Cloud
Salesforce Developers
 
Visualforce Hack for Junction Objects
Visualforce Hack for Junction ObjectsVisualforce Hack for Junction Objects
Visualforce Hack for Junction Objects
Ritesh Aswaney
 
Coding Apps in the Cloud with Force.com - Part 2
Coding Apps in the Cloud with Force.com - Part 2Coding Apps in the Cloud with Force.com - Part 2
Coding Apps in the Cloud with Force.com - Part 2
Salesforce Developers
 
Seattle Dev Garage
Seattle Dev GarageSeattle Dev Garage
Seattle Dev Garage
Joshua Birk
 
Spring '16 Release Overview - Bilbao Feb 2016
Spring '16 Release Overview - Bilbao Feb 2016Spring '16 Release Overview - Bilbao Feb 2016
Spring '16 Release Overview - Bilbao Feb 2016
Peter Chittum
 
Force.com Friday : Intro to Visualforce
Force.com Friday : Intro to VisualforceForce.com Friday : Intro to Visualforce
Force.com Friday : Intro to Visualforce
Salesforce Developers
 
Building Visualforce Custom Events Handlers
Building Visualforce Custom Events HandlersBuilding Visualforce Custom Events Handlers
Building Visualforce Custom Events Handlers
Salesforce Developers
 
How We Built AppExchange and our Communities on the App Cloud (Platform)
How We Built AppExchange and our Communities on the App Cloud (Platform)How We Built AppExchange and our Communities on the App Cloud (Platform)
How We Built AppExchange and our Communities on the App Cloud (Platform)
Dreamforce
 
Developing Offline Mobile Apps with the Salesforce.com Mobile SDK SmartStore,...
Developing Offline Mobile Apps with the Salesforce.com Mobile SDK SmartStore,...Developing Offline Mobile Apps with the Salesforce.com Mobile SDK SmartStore,...
Developing Offline Mobile Apps with the Salesforce.com Mobile SDK SmartStore,...
Tom Gersic
 
Javascript and Remote Objects on Force.com Winter 15
Javascript and Remote Objects on Force.com Winter 15Javascript and Remote Objects on Force.com Winter 15
Javascript and Remote Objects on Force.com Winter 15
Peter Chittum
 
Advanced Uses of Salesforce's Login Flows
Advanced Uses of Salesforce's Login FlowsAdvanced Uses of Salesforce's Login Flows
Advanced Uses of Salesforce's Login Flows
Salesforce Developers
 
Intro to Apex - Salesforce Force Friday Webinar
Intro to Apex - Salesforce Force Friday Webinar Intro to Apex - Salesforce Force Friday Webinar
Intro to Apex - Salesforce Force Friday Webinar
Abhinav Gupta
 
Force.com Friday : Intro to Apex
Force.com Friday : Intro to Apex Force.com Friday : Intro to Apex
Force.com Friday : Intro to Apex
Salesforce Developers
 
His master's voice, take command of Einstein Analytics
His master's voice, take command of Einstein AnalyticsHis master's voice, take command of Einstein Analytics
His master's voice, take command of Einstein Analytics
rikkehovgaard
 
Build Amazing Website without coding using Salesforce SiteForce
Build Amazing Website without coding using Salesforce SiteForceBuild Amazing Website without coding using Salesforce SiteForce
Build Amazing Website without coding using Salesforce SiteForce
vraopolisetti
 
Force.com Friday: Intro to Force.com
Force.com Friday: Intro to Force.comForce.com Friday: Intro to Force.com
Force.com Friday: Intro to Force.com
Salesforce Developers
 
S1 and Visualforce Publisher Actions
S1 and Visualforce Publisher ActionsS1 and Visualforce Publisher Actions
S1 and Visualforce Publisher Actions
Peter Chittum
 
Lightning Data Service: Eliminate Your Need to Load Records Through Controllers
Lightning Data Service: Eliminate Your Need to Load Records Through ControllersLightning Data Service: Eliminate Your Need to Load Records Through Controllers
Lightning Data Service: Eliminate Your Need to Load Records Through Controllers
Salesforce Developers
 
Build System Performance Data Analytics Using Wave
Build System Performance Data Analytics Using WaveBuild System Performance Data Analytics Using Wave
Build System Performance Data Analytics Using Wave
Salesforce Developers
 
Cutting Edge Mobile Development in the App Cloud
Cutting Edge Mobile Development in the App CloudCutting Edge Mobile Development in the App Cloud
Cutting Edge Mobile Development in the App Cloud
Salesforce Developers
 
Visualforce Hack for Junction Objects
Visualforce Hack for Junction ObjectsVisualforce Hack for Junction Objects
Visualforce Hack for Junction Objects
Ritesh Aswaney
 
Coding Apps in the Cloud with Force.com - Part 2
Coding Apps in the Cloud with Force.com - Part 2Coding Apps in the Cloud with Force.com - Part 2
Coding Apps in the Cloud with Force.com - Part 2
Salesforce Developers
 
Seattle Dev Garage
Seattle Dev GarageSeattle Dev Garage
Seattle Dev Garage
Joshua Birk
 
Spring '16 Release Overview - Bilbao Feb 2016
Spring '16 Release Overview - Bilbao Feb 2016Spring '16 Release Overview - Bilbao Feb 2016
Spring '16 Release Overview - Bilbao Feb 2016
Peter Chittum
 
Force.com Friday : Intro to Visualforce
Force.com Friday : Intro to VisualforceForce.com Friday : Intro to Visualforce
Force.com Friday : Intro to Visualforce
Salesforce Developers
 
Building Visualforce Custom Events Handlers
Building Visualforce Custom Events HandlersBuilding Visualforce Custom Events Handlers
Building Visualforce Custom Events Handlers
Salesforce Developers
 
How We Built AppExchange and our Communities on the App Cloud (Platform)
How We Built AppExchange and our Communities on the App Cloud (Platform)How We Built AppExchange and our Communities on the App Cloud (Platform)
How We Built AppExchange and our Communities on the App Cloud (Platform)
Dreamforce
 
Developing Offline Mobile Apps with the Salesforce.com Mobile SDK SmartStore,...
Developing Offline Mobile Apps with the Salesforce.com Mobile SDK SmartStore,...Developing Offline Mobile Apps with the Salesforce.com Mobile SDK SmartStore,...
Developing Offline Mobile Apps with the Salesforce.com Mobile SDK SmartStore,...
Tom Gersic
 
Javascript and Remote Objects on Force.com Winter 15
Javascript and Remote Objects on Force.com Winter 15Javascript and Remote Objects on Force.com Winter 15
Javascript and Remote Objects on Force.com Winter 15
Peter Chittum
 
Advanced Uses of Salesforce's Login Flows
Advanced Uses of Salesforce's Login FlowsAdvanced Uses of Salesforce's Login Flows
Advanced Uses of Salesforce's Login Flows
Salesforce Developers
 
Intro to Apex - Salesforce Force Friday Webinar
Intro to Apex - Salesforce Force Friday Webinar Intro to Apex - Salesforce Force Friday Webinar
Intro to Apex - Salesforce Force Friday Webinar
Abhinav Gupta
 
Ad

Recently uploaded (20)

High-Performing Teams - Navigate team challenges, boost motivation, and resol...
High-Performing Teams - Navigate team challenges, boost motivation, and resol...High-Performing Teams - Navigate team challenges, boost motivation, and resol...
High-Performing Teams - Navigate team challenges, boost motivation, and resol...
Zuzana (Zuzi) Sochova
 
The Essential Guide to Process Diagrams for Smarter Business Management
The Essential Guide to Process Diagrams for Smarter Business ManagementThe Essential Guide to Process Diagrams for Smarter Business Management
The Essential Guide to Process Diagrams for Smarter Business Management
RUPAL AGARWAL
 
www.visualmedia.com digital markiting (1).pptx
www.visualmedia.com digital markiting (1).pptxwww.visualmedia.com digital markiting (1).pptx
www.visualmedia.com digital markiting (1).pptx
Davinder Singh
 
intra-mart Accel series 2025 Spring updates-en.ppt
intra-mart Accel series 2025 Spring updates-en.pptintra-mart Accel series 2025 Spring updates-en.ppt
intra-mart Accel series 2025 Spring updates-en.ppt
NTTDATA INTRAMART
 
Web Design Creating User-Friendly and Visually Engaging Websites - April 2025...
Web Design Creating User-Friendly and Visually Engaging Websites - April 2025...Web Design Creating User-Friendly and Visually Engaging Websites - April 2025...
Web Design Creating User-Friendly and Visually Engaging Websites - April 2025...
TheoRuby
 
Freeze-Dried Fruit Powder Market Trends & Growth
Freeze-Dried Fruit Powder Market Trends & GrowthFreeze-Dried Fruit Powder Market Trends & Growth
Freeze-Dried Fruit Powder Market Trends & Growth
chanderdeepseoexpert
 
Level Up Your Launch: Utilizing AI for Start-up Success
Level Up Your Launch: Utilizing AI for Start-up SuccessLevel Up Your Launch: Utilizing AI for Start-up Success
Level Up Your Launch: Utilizing AI for Start-up Success
Best Virtual Specialist
 
Mexico Office Furniture Market Share, Size, Growth & Trends (2025-2034)
Mexico Office Furniture Market Share, Size, Growth & Trends (2025-2034)Mexico Office Furniture Market Share, Size, Growth & Trends (2025-2034)
Mexico Office Furniture Market Share, Size, Growth & Trends (2025-2034)
janewatson684
 
Understanding Dynamic Competition: Perspectives on Monopoly and Market Power ...
Understanding Dynamic Competition: Perspectives on Monopoly and Market Power ...Understanding Dynamic Competition: Perspectives on Monopoly and Market Power ...
Understanding Dynamic Competition: Perspectives on Monopoly and Market Power ...
David Teece
 
TMG - Q3 2025 Earnings Call Slides - v4.pptx
TMG - Q3 2025 Earnings Call Slides - v4.pptxTMG - Q3 2025 Earnings Call Slides - v4.pptx
TMG - Q3 2025 Earnings Call Slides - v4.pptx
Marketing847413
 
Kiran Flemish - A Dynamic Musician
Kiran  Flemish  -  A   Dynamic  MusicianKiran  Flemish  -  A   Dynamic  Musician
Kiran Flemish - A Dynamic Musician
Kiran Flemish
 
From Dreams to Threads: The Story Behind The Chhapai
From Dreams to Threads: The Story Behind The ChhapaiFrom Dreams to Threads: The Story Behind The Chhapai
From Dreams to Threads: The Story Behind The Chhapai
The Chhapai
 
Alec Lawler - A Passion For Building Brand Awareness
Alec Lawler - A Passion For Building Brand AwarenessAlec Lawler - A Passion For Building Brand Awareness
Alec Lawler - A Passion For Building Brand Awareness
Alec Lawler
 
India Advertising Market Size & Growth | Industry Trends
India Advertising Market Size & Growth | Industry TrendsIndia Advertising Market Size & Growth | Industry Trends
India Advertising Market Size & Growth | Industry Trends
Aman Bansal
 
Theory of Cognitive Chasms: Failure Modes of GenAI Adoption
Theory of Cognitive Chasms: Failure Modes of GenAI AdoptionTheory of Cognitive Chasms: Failure Modes of GenAI Adoption
Theory of Cognitive Chasms: Failure Modes of GenAI Adoption
Dr. Tathagat Varma
 
Oleksandra Apanasenkova: Must, Should, Could Have Ретроспективи в команді (UA)
Oleksandra Apanasenkova: Must, Should, Could Have Ретроспективи в команді (UA)Oleksandra Apanasenkova: Must, Should, Could Have Ретроспективи в команді (UA)
Oleksandra Apanasenkova: Must, Should, Could Have Ретроспективи в команді (UA)
Lviv Startup Club
 
From Sunlight to Savings The Rise of Homegrown Solar Power.pdf
From Sunlight to Savings The Rise of Homegrown Solar Power.pdfFrom Sunlight to Savings The Rise of Homegrown Solar Power.pdf
From Sunlight to Savings The Rise of Homegrown Solar Power.pdf
Insolation Energy
 
Entrepreneurship: Practicum on Business Plan.ppt
Entrepreneurship: Practicum on Business Plan.pptEntrepreneurship: Practicum on Business Plan.ppt
Entrepreneurship: Practicum on Business Plan.ppt
Tribhuvan University
 
Accounting_Basics_Complete_Guide_By_CA_Suvidha_Chaplot (1).pdf
Accounting_Basics_Complete_Guide_By_CA_Suvidha_Chaplot (1).pdfAccounting_Basics_Complete_Guide_By_CA_Suvidha_Chaplot (1).pdf
Accounting_Basics_Complete_Guide_By_CA_Suvidha_Chaplot (1).pdf
CA Suvidha Chaplot
 
SAP S/4HANA Asset Management - Functions and Innovations
SAP S/4HANA Asset Management - Functions and InnovationsSAP S/4HANA Asset Management - Functions and Innovations
SAP S/4HANA Asset Management - Functions and Innovations
Course17
 
High-Performing Teams - Navigate team challenges, boost motivation, and resol...
High-Performing Teams - Navigate team challenges, boost motivation, and resol...High-Performing Teams - Navigate team challenges, boost motivation, and resol...
High-Performing Teams - Navigate team challenges, boost motivation, and resol...
Zuzana (Zuzi) Sochova
 
The Essential Guide to Process Diagrams for Smarter Business Management
The Essential Guide to Process Diagrams for Smarter Business ManagementThe Essential Guide to Process Diagrams for Smarter Business Management
The Essential Guide to Process Diagrams for Smarter Business Management
RUPAL AGARWAL
 
www.visualmedia.com digital markiting (1).pptx
www.visualmedia.com digital markiting (1).pptxwww.visualmedia.com digital markiting (1).pptx
www.visualmedia.com digital markiting (1).pptx
Davinder Singh
 
intra-mart Accel series 2025 Spring updates-en.ppt
intra-mart Accel series 2025 Spring updates-en.pptintra-mart Accel series 2025 Spring updates-en.ppt
intra-mart Accel series 2025 Spring updates-en.ppt
NTTDATA INTRAMART
 
Web Design Creating User-Friendly and Visually Engaging Websites - April 2025...
Web Design Creating User-Friendly and Visually Engaging Websites - April 2025...Web Design Creating User-Friendly and Visually Engaging Websites - April 2025...
Web Design Creating User-Friendly and Visually Engaging Websites - April 2025...
TheoRuby
 
Freeze-Dried Fruit Powder Market Trends & Growth
Freeze-Dried Fruit Powder Market Trends & GrowthFreeze-Dried Fruit Powder Market Trends & Growth
Freeze-Dried Fruit Powder Market Trends & Growth
chanderdeepseoexpert
 
Level Up Your Launch: Utilizing AI for Start-up Success
Level Up Your Launch: Utilizing AI for Start-up SuccessLevel Up Your Launch: Utilizing AI for Start-up Success
Level Up Your Launch: Utilizing AI for Start-up Success
Best Virtual Specialist
 
Mexico Office Furniture Market Share, Size, Growth & Trends (2025-2034)
Mexico Office Furniture Market Share, Size, Growth & Trends (2025-2034)Mexico Office Furniture Market Share, Size, Growth & Trends (2025-2034)
Mexico Office Furniture Market Share, Size, Growth & Trends (2025-2034)
janewatson684
 
Understanding Dynamic Competition: Perspectives on Monopoly and Market Power ...
Understanding Dynamic Competition: Perspectives on Monopoly and Market Power ...Understanding Dynamic Competition: Perspectives on Monopoly and Market Power ...
Understanding Dynamic Competition: Perspectives on Monopoly and Market Power ...
David Teece
 
TMG - Q3 2025 Earnings Call Slides - v4.pptx
TMG - Q3 2025 Earnings Call Slides - v4.pptxTMG - Q3 2025 Earnings Call Slides - v4.pptx
TMG - Q3 2025 Earnings Call Slides - v4.pptx
Marketing847413
 
Kiran Flemish - A Dynamic Musician
Kiran  Flemish  -  A   Dynamic  MusicianKiran  Flemish  -  A   Dynamic  Musician
Kiran Flemish - A Dynamic Musician
Kiran Flemish
 
From Dreams to Threads: The Story Behind The Chhapai
From Dreams to Threads: The Story Behind The ChhapaiFrom Dreams to Threads: The Story Behind The Chhapai
From Dreams to Threads: The Story Behind The Chhapai
The Chhapai
 
Alec Lawler - A Passion For Building Brand Awareness
Alec Lawler - A Passion For Building Brand AwarenessAlec Lawler - A Passion For Building Brand Awareness
Alec Lawler - A Passion For Building Brand Awareness
Alec Lawler
 
India Advertising Market Size & Growth | Industry Trends
India Advertising Market Size & Growth | Industry TrendsIndia Advertising Market Size & Growth | Industry Trends
India Advertising Market Size & Growth | Industry Trends
Aman Bansal
 
Theory of Cognitive Chasms: Failure Modes of GenAI Adoption
Theory of Cognitive Chasms: Failure Modes of GenAI AdoptionTheory of Cognitive Chasms: Failure Modes of GenAI Adoption
Theory of Cognitive Chasms: Failure Modes of GenAI Adoption
Dr. Tathagat Varma
 
Oleksandra Apanasenkova: Must, Should, Could Have Ретроспективи в команді (UA)
Oleksandra Apanasenkova: Must, Should, Could Have Ретроспективи в команді (UA)Oleksandra Apanasenkova: Must, Should, Could Have Ретроспективи в команді (UA)
Oleksandra Apanasenkova: Must, Should, Could Have Ретроспективи в команді (UA)
Lviv Startup Club
 
From Sunlight to Savings The Rise of Homegrown Solar Power.pdf
From Sunlight to Savings The Rise of Homegrown Solar Power.pdfFrom Sunlight to Savings The Rise of Homegrown Solar Power.pdf
From Sunlight to Savings The Rise of Homegrown Solar Power.pdf
Insolation Energy
 
Entrepreneurship: Practicum on Business Plan.ppt
Entrepreneurship: Practicum on Business Plan.pptEntrepreneurship: Practicum on Business Plan.ppt
Entrepreneurship: Practicum on Business Plan.ppt
Tribhuvan University
 
Accounting_Basics_Complete_Guide_By_CA_Suvidha_Chaplot (1).pdf
Accounting_Basics_Complete_Guide_By_CA_Suvidha_Chaplot (1).pdfAccounting_Basics_Complete_Guide_By_CA_Suvidha_Chaplot (1).pdf
Accounting_Basics_Complete_Guide_By_CA_Suvidha_Chaplot (1).pdf
CA Suvidha Chaplot
 
SAP S/4HANA Asset Management - Functions and Innovations
SAP S/4HANA Asset Management - Functions and InnovationsSAP S/4HANA Asset Management - Functions and Innovations
SAP S/4HANA Asset Management - Functions and Innovations
Course17
 

Building Efficient Visualforce Pages

  • 1. Building Efficient Visualforce Pages Steve Bobrowski, salesforce.com, @sbob909 Markus Spohn, salesforce.com, @markus_spohn Joseph Ferraro, Mavens Consulting, @joeferraro
  • 2. Safe harbor Safe harbor statement under the Private Securities Litigation Reform Act of 1995: This presentation may contain forward-looking statements that involve risks, uncertainties, and assumptions. If any such uncertainties materialize or if any of the assumptions proves incorrect, the results of salesforce.com, inc. could differ materially from the results expressed or implied by the forward-looking statements we make. All statements other than statements of historical fact could be deemed forward-looking, including any projections of product or service availability, subscriber growth, earnings, revenues, or other financial items and any statements regarding strategies or plans of management for future operations, statements of belief, any statements concerning new, planned, or upgraded services or technology developments and customer contracts or use of our services. The risks and uncertainties referred to above include – but are not limited to – risks associated with developing and delivering new functionality for our service, new products and services, our new business model, our past operating losses, possible fluctuations in our operating results and rate of growth, interruptions or delays in our Web hosting, breach of our security measures, the outcome of any litigation, risks associated with completed and any possible mergers and acquisitions, the immature market in which we operate, our relatively limited operating history, our ability to expand, retain, and motivate our employees and manage our growth, new releases of our service and successful customer deployment, our limited history reselling non-salesforce.com products, and utilization and selling to larger enterprise customers. Further information on potential factors that could affect the financial results of salesforce.com, inc. is included in our annual report on Form 10-K for the most recent fiscal year and in our quarterly report on Form 10-Q for the most recent fiscal quarter. These documents and others containing important disclosures are available on the SEC Filings section of the Investor Information section of our Web site. Any unreleased services or features referenced in this or other presentations, press releases or public statements are not currently available and may not be delivered on time or at all. Customers who purchase our services should make the purchase decisions based upon features that are currently available. Salesforce.com, inc. assumes no obligation and does not intend to update these forward-looking statements.
  • 4. You are a developer or architect maintaining your org …
  • 5. Many Visualforce pages are slow & hurting user productivity …
  • 6. You need to find and rework slow Visualforce pages.
  • 7. Common problems & practical solutions for finding & fixing slow Visualforce pages Today’s Agenda
  • 10. What makes for an efficient Visualforce page?
  • 11. Two keys to building efficient Visualforce pages … Memory usage Database access Visualforce page
  • 13. Use tools to find and fix inefficient source code …
  • 14. Related DevZone hands-on, mini-workshop
  • 16. Visualforce page view state How can you ______ it?
  • 18. Visualforce page view state comes from … forms <apex:page showHeader="true" controller="invoiceController" tabstyle="Invoice__c" sidebar="false"> <apex:form > <apex:pageBlock > <h1>Open Invoices</h1> <apex:pageBlockTable id="invoiceList" value="{!invoices}" var="i"> <apex:column headerValue="Name"> <apex:outputLink value="/{!i.Id}">{!i.Name}</apex:outputLink> </apex:column> <apex:column value="{!i.Status__c}"/> </apex:pageBlockTable> </apex:pageBlock> <apex:actionPoller action="{!pollAction}" reRender="invoiceList" interval="15"/> </apex:form> </apex:page> <apex:form>
  • 19. Visualforce page view state supports postbacks Browser page with form Server post postback Error Submit
  • 20. Visualforce page view state is encrypted …
  • 21. Less view state is better for response time …
  • 24. Force.com Development Mode … configuration Advanced user details …
  • 25. Force.com development mode … view state
  • 28. Minimize data … examine data page uses <apex:page showHeader="true" controller="invoiceController" tabstyle="Invoice__c" sidebar="false"> <apex:form > <apex:pageBlock > <h1>Open Invoices</h1> <apex:pageBlockTable id="invoiceList" value="{!invoices}" var="i"> <apex:column headerValue="Name"> <apex:outputLink value="/{!i.Id}">{!i.Name}</apex:outputLink> </apex:column> <apex:column value="{!i.Status__c}"/> </apex:pageBlockTable> </apex:pageBlock> <apex:actionPoller action="{!pollAction}" reRender="invoiceList" interval="15"/> </apex:form> </apex:page>
  • 29. Minimize data … examine data controller gets public class invoiceController { Invoice__c[] invoices; String query = 'SELECT Id, Name, Status__c, Invoice_Total__c, CreatedDate, LastModifiedDate, LastModifiedById, OwnerId FROM Invoice__c ORDER BY Status__c ASC’ LIMIT 1000; public Invoice__c[] getInvoices() { invoices = Database.query(query); return invoices; } public PageReference pollAction() { invoices = Database.query(query); return null; } }
  • 30. Minimize data … match page and controller data public class invoiceController { Invoice__c[] invoices; String query = 'SELECT Id, Name, Status__c FROM Invoice__c ORDER BY Status__c ASC LIMIT 1000'; public Invoice__c[] getInvoices() { invoices = Database.query(query); return invoices; } public PageReference pollAction() { invoices = Database.query(query); return null; } }
  • 31. Minimize data … only get the rows that page needs public class invoiceController { Invoice__c[] invoices; String query = 'SELECT Id, Name, Status__c FROM Invoice__c WHERE Status__c != 'Closed' LIMIT 1000'; public Invoice__c[] getInvoices() { invoices = Database.query(query); return invoices; } public PageReference pollAction() { invoices = Database.query(query); return null; } }
  • 33. Recap: Minimize view state by minimizing data
  • 34. Use transient controller variables for read-only data public class invoiceController { Invoice__c[] invoices; String query = 'SELECT Id, Name, Status__c FROM Invoice__c WHERE Status__c != 'Closed' LIMIT 1000'; public Invoice__c[] getInvoices() { invoices = Database.query(query); return invoices; } public PageReference pollAction() { invoices = Database.query(query); return null; } }
  • 35. Use transient controller variables for read-only data public class invoiceController { Transient Invoice__c[] invoices; String query = 'SELECT Id, Name, Status__c FROM Invoice__c WHERE Status__c != 'Closed' LIMIT 1000'; public Invoice__c[] getInvoices() { invoices = Database.query(query); return invoices; } public PageReference pollAction() { invoices = Database.query(query); return null; } }
  • 37. Recap: Eliminate read-only data from the view state
  • 38. Avoid Visualforce page view state altogether
  • 39. Refresh data without actionPoller (and view state) Traditional polling alternatives to actionPoller: Long polling/streaming updates:
  • 41. Database-efficient Visualforce controllers Key characteristics: ______  SOQL  logic
  • 43. Minimize record width public class invoiceController { Transient Invoice__c[] invoices; String query = 'SELECT Id, Name, Status__c, Invoice_Total__c, CreatedDate, LastModifiedDate, LastModifiedById, OwnerId FROM Invoice__c ORDER BY Status__c ASC LIMIT 1000'; public Invoice__c[] getInvoices() { invoices = Database.query(query); return invoices; } public PageReference pollAction() { invoices = Database.query(query); return null; } }
  • 44. Minimize record count public class invoiceController { Transient Invoice__c[] invoices; String query = 'SELECT Id, Name, Status__c FROM Invoice__c WHERE Status__c != 'Closed' LIMIT 1000'; public Invoice__c[] getInvoices() { invoices = Database.query(query); return invoices; } public PageReference pollAction() { invoices = Database.query(query); return null; } }
  • 45. Force.com Query & Search Optimization Cheat Sheet http://developer.force.com/architect
  • 46. Fetch target rows with optimizable filter conditions public class invoiceController { Transient Invoice__c[] invoices; String query = 'SELECT Id, Name, Status__c FROM Invoice__c WHERE Status__c = ’Open' LIMIT 1000'; public Invoice__c[] getInvoices() { invoices = Database.query(query); return invoices; } public PageReference pollAction() { invoices = Database.query(query); return null; } }
  • 47. Leverage field indexes in filter conditions public class invoiceController { Transient Invoice__c[] invoices; String query = 'SELECT Id, Name, Status__c FROM Invoice__c WHERE Status__c = ’Open' LIMIT 1000'; public Invoice__c[] getInvoices() { invoices = Database.query(query); return invoices; } public PageReference pollAction() { invoices = Database.query(query); return null; } }
  • 49. Leverage the Salesforce sharing architecture public with sharing class invoiceController { Transient Invoice__c[] invoices; String query = 'SELECT Id, Name, Status__c FROM Invoice__c WHERE Status__c = ’Open' LIMIT 1000'; public Invoice__c[] getInvoices() { invoices = Database.query(query); return invoices; } public PageReference pollAction() { invoices = Database.query(query); return null; } }
  • 50. Recap: Execute efficient SOQL queries (And don’t forget to use the sharing architecture)
  • 52. Use standard set controllers, when possible Use whenever possible: don't reinvent things
  • 53. Place DML and SOQL outside of loops
  • 54. Use bulk processing best practices
  • 57. Avoid traditional polling pull (polling) Invoice
  • 58. Use long polling with the Force.com Streaming API pull (polling) Invoice Update
  • 60. Recap: Use efficient overall page designs
  • 61. Using tools to find and fix common problems … FAST!
  • 62. Be aware of available tools
  • 67. All about Joe Ferraro and Mavens Consulting Mavens Consulting is the Life Science industry’s premier salesforce.com implementation partner focused exclusively on delivering optimized Force.com solutions.  Certified Force.com and Veeva Experts  Unparalleled Global Knowledge in Life Sciences  Specialists in Service Cloud Implementations for MedInfo Contact Centers and Multi-Channel Portals for Physicians and Reps
  • 70. Leverage the power of your tools
  • 73. Recap: Find and fix common problems proactively
  • 76. Related DevZone hands-on, mini-workshop