The following are guidelines for building new views.
- Caching
- For all public facing views, always use some form of caching. A non
time-based cache is preferable because it often permits the longest cache
lifetimes, and invalidates caches only when necessary. Possible options are:
- Views content cache
- Views argument cache
- Time based
- For all public facing views, always use some form of caching. A non
time-based cache is preferable because it often permits the longest cache
lifetimes, and invalidates caches only when necessary. Possible options are:
- Pagination
- Always specify either a fixed number of results or a pager. Never display all results.
- Whenever possible, use Views lite pager rather than a full pager.
- Note that this is unfortunately mutually exclusive with caching due to bugs in Views Lite Pager. @see https://www.drupal.org/node/2285591.
- Advanced
- Always add a semantically descriptive machine name to views displays. E.g
., use
press_releases_all
rather thanpage_1
. This makes all PHP, CSS, and JS related to the view display more readable.
- Always add a semantically descriptive machine name to views displays. E.g
., use
- Relationships
- Whenever possible, use "require this relationship" for all views relationships. This causes views to perform an inner join rather than a left join, and is almost always faster.
- Never use the
Taxonomy Terms on Node
relationship or filter. Instead, use a relationship or filter for the specific taxonomy reference field. This has a tremendous performance impact.
- Filters
- For all exposed filters, manually set the fitler identifier to something
end-user friendly. This should not contain drupalisms. E.g., use
type
rather thanfield_type
.
- For all exposed filters, manually set the fitler identifier to something
end-user friendly. This should not contain drupalisms. E.g., use
- No Results Behavior
- Always add "No Results behavior" of some type. This is typically text informing that user that no results were found.
@todos:
- When to ditch Views in favor of EFQ or straight queries. There's a reason Advanced Forum is slow on big sites.
- Proper views naming and tagging