So here are some idea's, please add your own if you know some other idea's
Playing:
-Take it easy
Don't jump around an around and around people and do gestures every second. This will not only annoy people but it will cause lags on slow PC's (server too?)
-Don't use swords etc. when not in outlands
My PC really lags when someone keeps waving a sword around.
-Don't click on scripted objects over and over again.
Specially for objects that produce sound. This also causes lag. The sound system was not designed for listening mp3's anyway (See some other threads). So please don't put these music boxes all over the world, and don't click them every second.
-Don't shoot with freezing or other guns in non-outlands world. That is realllly annoying and it causes lags.
Building:
-Use textures to make complex objects
For example a window. You could use 4 objects for walls (around the window), 4 objects for the edge of the window and 1 or more for the glass. Then if you get one wall with 2 or 3 windows you'll get a LOT of objects soon. It's not only expensive, but it doesn't look good and it slows down the server.
The best thing you can do it just make a wall. Then make a relative large texture (1024x1024) with 2 or 3 windows on it (and everything else you would want). You can use TGA-alpha channerls to make the windows transparant. That way you have a really cool looking wall (and a unique one) and it costs less (only 20$ instead of a possible 300$) and it won't slow down the server.
-Don't use physics if not nessesary. Physics involves collision detection and that slows down the server. Also for people who make elevators (see scripting tips)
-Hollow objects
One of the lindens should comment on this, but I've heard that hollow objects can slow down the server a lot when physical and colliding. Don't know about non-physical hollow objects.
-Boxes and other types.
My guess is (please confirm linden) that boxes are the easiest to do collision detection on. I wouldn't know if it's better to make a hollow box or use 4 loose boxes, but I do think that if you can use a box instead of a more complex object and get the same result: use the box
Scripting hints:
-Don't use scripting when not nessesary. I guess this point is a little weak, but maybe you'll get what I mean. I guess I mean don't leave any unwanted scripted objects to die, because they do use processing power. Only make scripted objects when it actually serves some kind of purpose.
-reduce amount of events.
For example the listen. If you want to listen for the owner to say "fire!" you can do this
llListen(0,"","",""

You can also do this
llListen(0,"",llGetOwner(),"fire!"

Then the SL-system (which can check muuuch faster then scripts) will check to see if the listen event should be triggered. Also you don't need to check in the listen event for the owner and text anymore (unless you've got multiple listens)
-return as soon as possible in an event.
If you're in an event (say listen) and you need to check some things, you could check them all in one big if
if (bla==3 and bla2==4 and bla3==7)
but then it will have to check all those 3. The best thing you can do is to check each thing seperatly and return if it fails:
if (bla!=3) return;
so try to figure out on which contruction of checking the script will return as soon as possible (also think about what kind of check will fail the most of the time and put this on top)
On a return the event is closed and the next can be executed. This will really improve your scripts.
-If you have to calculate the same value over and over again, do it once and store it.
for example (useless example, can't think of anything better). You would want to say the sentence Hello <avatar name> 5 times in a sensor event.
if you do:
llSay(0,"Hello " + llGetDetectedName());
llSay(0,"Hello " + llGetDetectedName());
llSay(0,"Hello " + llGetDetectedName());
llSay(0,"Hello " + llGetDetectedName());
llSay(0,"Hello " + llGetDetectedName());
that will cause each say to get the detected name again, and construct a sting with "hello " concatenated with that name. This is much better
string line= "Hello" + llGetDetectedName();
llSay(0,line);
llSay(0,line);
llSay(0,line);
llSay(0,line);
llSay(0,line);
(ofcouse you can use a loop to do this but that's not the point.)
This way it will have to construct that line only one time: so it will be faster. These are just little things, but it will not only make the server faster, but your events will happen faster so it works better when there are a lot of events.
-Put (moving) objects to non-physical if not used. You can imagine that collision detection uses a lot of processing power. So when you've build an elevator or an car it will keep doing collision detection, also if you think it stands still. So you can easily use the command llSetStatus to put it to non-physics. This way you'll save the server collision detection time. And you can walk onto it much easier (specially on an elevator.
Well I guess this are some basic ideas I've come up with. Feel free to comment on these or come up with some other suggestion. I would also like it if someone from Linden would confirm or deny these tips, or even give some for themselfs.