From the documentation Custom Labels are primarily meant for multi-language translation use, but our company does not use them for this purpose, but uses them extensively for

  • text used in pdfs/VF pages
  • css styles
  • constant values

Is this good practice? Or is there a better way to do this? How many is too many?

  • I'm curious why you don't use a static resource for the CSS styles? – Michael Sobczak Mar 5 at 18:10
  • We do for most CSS, just some seem to be in the labels. – Irene Mar 7 at 21:48

Is this good practice?

Generally no, they should not be used for this purpose. Write a constants class, or use constants in the class they are used in.

Or is there a better way to do this?

I prefer writing constants as static variables with getters. This is primarily a performance concern. The general pattern looks like this:

public static Decimal PI { get { return 3.14159265359; } }
public static String ASC { get { return 'Ascending'; } }

If you only have a few constants, though, you should prefer the more compact, Java-like syntax:

public static final Decimal PI = 3.14159265359;
public static final String ASC = 'Ascending';

The problem with this latter syntax is having hundreds of these in a single class can result in hundreds or even thousands of milliseconds in CPU overhead. Ancedotally, I once removed about 5 minutes off of our unit tests by converting from final static variables to getters (300 unit tests + 1 second saved per unit test).

If you do use constants constantly, try not to put them all in a shared global class if you prefer to use the final static method of writing constants.

How many is too many?

5,001. There's a limit of 5,000 labels per namespace in an org.


I was trying to test a huge Constant Class with the 2 options. The test basically try to get all the constants of the class (around 300), and these are my results:


  • The Heap when the class is loaded in memory is 219
  • The Heap when the Test class is loaded in memory is 20229
  • Total time execution: 25.25ms


  • The Heap when the class is loaded in memory is 761
  • The Heap when the Test class is loaded in memory is 10807
  • Total time execution: 8.13ms

So I think that regarding with the CPU use is better use Getter option, but you are losing time execution. What. do you think about it?


  • Your timing numbers seem off. Are you really getting fractions of milliseconds in your measurements? Also, are you trying to answer the question which was posted or ask a new one? – Adrian Larson Mar 5 at 13:51

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.