Elements of a web site
Beetlebrow client feedback
Testimonial

I selected Beetlebrow to create our website from a shortlist of 10 possible providers. I was greatly impressed with the time and attention they gave to the school pre-contract, with their most senior staff attending a meeting with the school to gain a sense of its ethos and expectations for its website.

Our demands were fairly exacting and at no point did they attempt to steer us in a direct that ultimately would have made their lives simpler.

They produced a website which has received praise from the school community and many others. It has also attracted the kind of teachers we are looking for; in that respect it hit the nail on the head.

Post publication the service provided by Beetlebrow and its individual team members, with no exceptions, has been outstanding; I use that word as an educator and in its truest and most literal sense.

We continue to enjoy a client sensitive, truly professional service. I look forward to the planned refresh of our site shortly.

David Chappell
Associate Head
Holland Park School

More from this site »
Testimonial

I am pleased to confirm how delighted I have been with beetlebrow services.

Their design, set up and continued maintenance has been excellent and continues to bring in a good and regular response.

Nigel Graves
Owner
Chelsea Harbour Dental Practice

More from this site »
Testimonial

"We've found Beetlebrow professional, responsive, and incredibly creative."

"When we asked them for a design, they immediately understood our brief and came back with an idea which reflected our business perfectly."

"Sales inquiries have quadrupled since the new site went up, with many new clients commenting specifically that they came to us because they were so impressed by it."

Stephen Arkell
Managing Director
Retina Productions Ltd.

 

More from this site »
Testimonial

"Well done! I would like to thank you all for making this happen. You have been a pleasure to work with and I am delighted with the end result and I am really happy that we have made the 1 September date.

Jeremy Carr-Smith
Director
Moving Office

More from this site »
Testimonial

"Beetlebrow are a huge asset to LessBounce.

Their response time is impressive - amends are made almost instantaneously.

I don't know where we would be without them!"

Selaine Saxby
Proprietor
LessBounce.com

Testimonial

"When I set up my business I decided to use Beetlebrow as I liked what they did and the way they did it.

"I didn't want an off-the-shelf product – I needed a custom built site that functioned in a user friendly way and created the right impression. To achieve this, more than technical expertise is required – the designers have to interpret what a "non-techie" wants and create something from scratch.

"The service I get from Beetlebrow is excellent. They are also jolly nice chaps."

Richard Max
Partner
Richard Max & Co

More from this site »
Testimonial

"Beetlebrow provided us with a responsive service and a first class web site. They took care of all our requests and were helpful and knowledgeable to talk to. I'd recommend them to anyone."

Jeremy Balcombe
Managing Director
Ozone Clean Ltd

More from this site »
Testimonial

"The best and most original web design company I've come across. They understood my requirements and fulfilled them in every department."

John Davies
Managing Director
Charity Supply Company

 

More from this site »
Testimonial

Beetlebrow understood the brief perfectly and produced exactly the web site we wanted.

Since launch, they have provided great support and make changes promptly and efficiently. I'm very pleased to be working with them.

Jeremy Balcombe
Managing Director
Springdene Care Homes Group

More from this site »
 

Tips on how to make a Plone site faster

by Rafael Oliveira - Point to common and easy ways to make a Plone site faster.

Purpose

This document's purpose is to point to common and easy ways to make a Plone site faster. It's not meant to be exhaustive nor include detailed instructions.

The "hard" part of making a Plone site faster is not mentioned here: use a proxy/cache in front of the Zope instance. This is a complex topic, which involves other pieces of software outside the Plone/Zope world, and is covered in other places.

Profiling and benchmarking

First you'll need to setup some tools for profiling and benchmarking. You need some way to tell whether your attempts to improve performance are working or not, and you need to know what is really consuming time.

ab

ab is an Apache tool that makes a number of HTTP requests to your site and measures the time consumed and the number of requests per second the web server can handle. The basic usage syntax:

ab -c 5 -n 100 http://127.0.0.1:8080/somesite

It means ab will make 100 requests, 5 at a time (i.e concurrently).

FireBug

Firebug is an add-on for Firefox, very useful for web development. It has a "Network" panel, which shows the size and the time to load of each resource requested when opening a page. It also shows the HTTP request and response headers (which is very useful when debugging caching issues).

ZopeProfiler and PTProfiler

Usage of ZopeProfiler and PTProfiler is well covered by this article by Mikko Ohtamaa.

There's also this blog entry by Bertrand Mathieu containing instructions on how to patch ZopeProfiler to avoid errors which occurs on recent versions of Zope and Plone. Without this patch it won't work at all.

The author also mentions Gprof2dot and xdot.py, two tools that allows visualizing the data produced by ZopeProfiler as a pretty formatted graph.

Install collective.remove.kss

Install collective.remove.kss add-on to remove KSS, which does all the Ajax stuff inside Plone. Beware this will remove some functionalities (check the add-on page for a list). Ajax operations are expensive, so it is often worthy to remove them.

Install archetypes.schematuning

Straight from archetypes.schematuning entry on PyPI:

This package speeds up Archetypes Schemas and is a patch for Products.Archetypes. It uses plone.memoize to cache Archetypes Schemas instead of factoring and modifying them every time its accessed.

Make images in skin layers cacheable by the browser

For each image residing inside a skin layer folder, add a correspondent .metadata file (i.e myimage.png.metadata) containing:

[default]
cache=HTTPCache

Use the CSS and JS registries

Do not add links to CSS and JS files directly on your page templates. Use the CSS and JS registries instead. These tools merge the resources, reducing the number of HTTP requests. And it handles caching as well.

Minimize number of requests and "404 not found" errors

Related to the previous topic, you should care to minimize the number of HTTP requests, because it's expensive in Zope. CSS and JS registries can be used to do just that.

From Profiling Plone and tuning add on product performance (by Mikko Ohtamaa):

Make sure that you don't get any HTTP Not Found 404 pages, since they are very expensive in Zope. You can log not found pages if you clear "NotFound" in error_log / "Ignored exception types".

You can use the Firebug's Network panel to find 404 errors and to see which resources are requested by the browser when opening a URL on your site.

Move processing from templates to view classes

From Profiling Plone and tuning add on product performance (by Mikko Ohtamaa):

Move template expression (python:, string: and traversing expressions) to BrowserView methods, since template expressions are run under RestrictedPython sandbox which comes with heavy execution penalty.

You can use PTProfiler to see which expressions are more time consuming.

Use plone.memoize

From Profiling Plone and tuning add on product performance (by Mikko Ohtamaa):

Check plone.memoize product which contain function decorators for caching the function value during subsequent function runs. This is easy way to solve the problem if a heavy function or view is called several times per request.

Use Zeo

It's often said that use a Zeo server is always a good idea, even if you have only one Zeo client. Read the chapter Scalability and ZEO of the Zope Book for more details.

Change Zope instance options and use multiple Zeo clients

This is the hardest part. There are plenty of articles and mailing lists messages discussing the optimal values for the following options.

In your buildout.cfg you can try to fiddle with these options for the plone.recipe.zope2instance recipe:

  • debug-mode: Set to off to improve speed.
  • zserver-threads: The default is 4.
  • zeo-client-cache-size: Example: 100MB.

You can consider using multiple Zeo clients and a load-balancer between those clients. You can even use multiple servers, containing one or more Zeo clients. The optimal value for zserver-threads value depends on the number of Zeo clients and Zeo clients per server -- besides the number of concurrent users you're planning to have etc.

For more details check Scalability and ZEO (chapter of the Zope Book). See On Zope, multiple cores, and the GIL for an example of issues to consider when doing this kind of optimization.

Document Actions

Branding and printing for Stratford School Academy Branding and printing for Stratford School Academy

Stratford School are to become an academy, and as part of the...

Funky site for Global Art Supplies Funky site for Global Art Supplies

Global Art Supplies needed a revamped web site in keeping with their...

Chancery Bar Association chooses Beetlebrow Chancery Bar Association chooses Beetlebrow

The Chancery Bar Association needed a new web site with improved content...
Beetlebrow web design news